Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/tty/serial/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 7 kB image not shown  

Quelle  stm32-usart.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright (C) Maxime Coquelin 2015
 * Copyright (C) STMicroelectronics SA 2017
 * Authors:  Maxime Coquelin <mcoquelin.stm32@gmail.com>
 *      Gerald Baeza <gerald_baeza@yahoo.fr>
 */


#define DRIVER_NAME "stm32-usart"

struct stm32_usart_offsets {
 u16 cr1;
 u16 cr2;
 u16 cr3;
 u16 brr;
 u16 gtpr;
 u16 rtor;
 u16 rqr;
 u16 isr;
 u16 icr;
 u16 rdr;
 u16 tdr;
 u16 presc;
 u16 hwcfgr1;
};

struct stm32_usart_config {
 u8 uart_enable_bit; /* USART_CR1_UE */
 bool has_7bits_data;
 bool has_swap;
 bool has_wakeup;
 bool has_fifo;
};

struct stm32_usart_info {
 struct stm32_usart_offsets ofs;
 struct stm32_usart_config cfg;
};

#define UNDEF_REG 0xffff

/* USART_SR (F4) / USART_ISR (F7) */
#define USART_SR_PE  BIT(0)
#define USART_SR_FE  BIT(1)
#define USART_SR_NE  BIT(2)  /* F7 (NF for F4) */
#define USART_SR_ORE  BIT(3)
#define USART_SR_IDLE  BIT(4)
#define USART_SR_RXNE  BIT(5)
#define USART_SR_TC  BIT(6)
#define USART_SR_TXE  BIT(7)
#define USART_SR_CTSIF  BIT(9)
#define USART_SR_CTS  BIT(10)  /* F7 */
#define USART_SR_RTOF  BIT(11)  /* F7 */
#define USART_SR_EOBF  BIT(12)  /* F7 */
#define USART_SR_ABRE  BIT(14)  /* F7 */
#define USART_SR_ABRF  BIT(15)  /* F7 */
#define USART_SR_BUSY  BIT(16)  /* F7 */
#define USART_SR_CMF  BIT(17)  /* F7 */
#define USART_SR_SBKF  BIT(18)  /* F7 */
#define USART_SR_WUF  BIT(20)  /* H7 */
#define USART_SR_TEACK  BIT(21)  /* F7 */
#define USART_SR_ERR_MASK (USART_SR_ORE | USART_SR_NE | USART_SR_FE |\
     USART_SR_PE)
/* Dummy bits */
#define USART_SR_DUMMY_RX BIT(16)

/* USART_DR */
#define USART_DR_MASK  GENMASK(8, 0)

/* USART_BRR */
#define USART_BRR_DIV_F_MASK GENMASK(3, 0)
#define USART_BRR_DIV_M_MASK GENMASK(15, 4)
#define USART_BRR_DIV_M_SHIFT 4
#define USART_BRR_04_R_SHIFT 1
#define USART_BRR_MASK  (USART_BRR_DIV_M_MASK | USART_BRR_DIV_F_MASK)

/* USART_CR1 */
#define USART_CR1_SBK  BIT(0)
#define USART_CR1_RWU  BIT(1)  /* F4 */
#define USART_CR1_UESM  BIT(1)  /* H7 */
#define USART_CR1_RE  BIT(2)
#define USART_CR1_TE  BIT(3)
#define USART_CR1_IDLEIE BIT(4)
#define USART_CR1_RXNEIE BIT(5)
#define USART_CR1_TCIE  BIT(6)
#define USART_CR1_TXEIE  BIT(7)
#define USART_CR1_PEIE  BIT(8)
#define USART_CR1_PS  BIT(9)
#define USART_CR1_PCE  BIT(10)
#define USART_CR1_WAKE  BIT(11)
#define USART_CR1_M0  BIT(12)  /* F7 (CR1_M for F4) */
#define USART_CR1_MME  BIT(13)  /* F7 */
#define USART_CR1_CMIE  BIT(14)  /* F7 */
#define USART_CR1_OVER8  BIT(15)
#define USART_CR1_DEDT_MASK GENMASK(20, 16) /* F7 */
#define USART_CR1_DEAT_MASK GENMASK(25, 21) /* F7 */
#define USART_CR1_RTOIE  BIT(26)  /* F7 */
#define USART_CR1_EOBIE  BIT(27)  /* F7 */
#define USART_CR1_M1  BIT(28)  /* F7 */
#define USART_CR1_IE_MASK (GENMASK(8, 4) | BIT(14) | BIT(26) | BIT(27))
#define USART_CR1_FIFOEN BIT(29)  /* H7 */
#define USART_CR1_DEAT_SHIFT 21
#define USART_CR1_DEDT_SHIFT 16

/* USART_CR2 */
#define USART_CR2_ADD_MASK GENMASK(3, 0) /* F4 */
#define USART_CR2_ADDM7  BIT(4)  /* F7 */
#define USART_CR2_LBCL  BIT(8)
#define USART_CR2_CPHA  BIT(9)
#define USART_CR2_CPOL  BIT(10)
#define USART_CR2_CLKEN  BIT(11)
#define USART_CR2_STOP_2B BIT(13)
#define USART_CR2_STOP_MASK GENMASK(13, 12)
#define USART_CR2_LINEN  BIT(14)
#define USART_CR2_SWAP  BIT(15)  /* F7 */
#define USART_CR2_RXINV  BIT(16)  /* F7 */
#define USART_CR2_TXINV  BIT(17)  /* F7 */
#define USART_CR2_DATAINV BIT(18)  /* F7 */
#define USART_CR2_MSBFIRST BIT(19)  /* F7 */
#define USART_CR2_ABREN  BIT(20)  /* F7 */
#define USART_CR2_ABRMOD_MASK GENMASK(22, 21) /* F7 */
#define USART_CR2_RTOEN  BIT(23)  /* F7 */
#define USART_CR2_ADD_F7_MASK GENMASK(31, 24) /* F7 */

/* USART_CR3 */
#define USART_CR3_EIE  BIT(0)
#define USART_CR3_IREN  BIT(1)
#define USART_CR3_IRLP  BIT(2)
#define USART_CR3_HDSEL  BIT(3)
#define USART_CR3_NACK  BIT(4)
#define USART_CR3_SCEN  BIT(5)
#define USART_CR3_DMAR  BIT(6)
#define USART_CR3_DMAT  BIT(7)
#define USART_CR3_RTSE  BIT(8)
#define USART_CR3_CTSE  BIT(9)
#define USART_CR3_CTSIE  BIT(10)
#define USART_CR3_ONEBIT BIT(11)
#define USART_CR3_OVRDIS BIT(12)  /* F7 */
#define USART_CR3_DDRE  BIT(13)  /* F7 */
#define USART_CR3_DEM  BIT(14)  /* F7 */
#define USART_CR3_DEP  BIT(15)  /* F7 */
#define USART_CR3_SCARCNT_MASK GENMASK(19, 17) /* F7 */
#define USART_CR3_WUS_MASK GENMASK(21, 20) /* H7 */
#define USART_CR3_WUS_START_BIT BIT(21)  /* H7 */
#define USART_CR3_WUFIE  BIT(22)  /* H7 */
#define USART_CR3_TXFTIE BIT(23)  /* H7 */
#define USART_CR3_TCBGTIE BIT(24)  /* H7 */
#define USART_CR3_RXFTCFG_MASK GENMASK(27, 25) /* H7 */
#define USART_CR3_RXFTCFG_SHIFT 25  /* H7 */
#define USART_CR3_RXFTIE BIT(28)  /* H7 */
#define USART_CR3_TXFTCFG_MASK GENMASK(31, 29) /* H7 */
#define USART_CR3_TXFTCFG_SHIFT 29  /* H7 */

/* USART_GTPR */
#define USART_GTPR_PSC_MASK GENMASK(7, 0)
#define USART_GTPR_GT_MASK GENMASK(15, 8)

/* USART_RTOR */
#define USART_RTOR_RTO_MASK GENMASK(23, 0) /* F7 */
#define USART_RTOR_BLEN_MASK GENMASK(31, 24) /* F7 */

/* USART_RQR */
#define USART_RQR_ABRRQ  BIT(0)  /* F7 */
#define USART_RQR_SBKRQ  BIT(1)  /* F7 */
#define USART_RQR_MMRQ  BIT(2)  /* F7 */
#define USART_RQR_RXFRQ  BIT(3)  /* F7 */
#define USART_RQR_TXFRQ  BIT(4)  /* F7 */

/* USART_ICR */
#define USART_ICR_PECF  BIT(0)  /* F7 */
#define USART_ICR_FECF  BIT(1)  /* F7 */
#define USART_ICR_ORECF  BIT(3)  /* F7 */
#define USART_ICR_IDLECF BIT(4)  /* F7 */
#define USART_ICR_TCCF  BIT(6)  /* F7 */
#define USART_ICR_CTSCF  BIT(9)  /* F7 */
#define USART_ICR_RTOCF  BIT(11)  /* F7 */
#define USART_ICR_EOBCF  BIT(12)  /* F7 */
#define USART_ICR_CMCF  BIT(17)  /* F7 */
#define USART_ICR_WUCF  BIT(20)  /* H7 */

/* USART_PRESC */
#define USART_PRESC  GENMASK(3, 0) /* H7 */
#define USART_PRESC_MAX  0b1011

/* USART_HWCFCR1 */
#define USART_HWCFGR1_CFG8 GENMASK(31, 28) /* MP1 */

#define STM32_SERIAL_NAME "ttySTM"
#define STM32_MAX_PORTS 9
#define STM32H7_USART_FIFO_SIZE 16

#define RX_BUF_L 4096   /* dma rx buffer length     */
#define RX_BUF_P (RX_BUF_L / 2)  /* dma rx buffer period     */
#define TX_BUF_L RX_BUF_L  /* dma tx buffer length     */

#define STM32_USART_TIMEOUT_USEC USEC_PER_SEC /* 1s timeout in µs */

struct stm32_port {
 struct uart_port port;
 struct clk *clk;
 const struct stm32_usart_info *info;
 struct dma_chan *rx_ch;  /* dma rx channel            */
 dma_addr_t rx_dma_buf;   /* dma rx buffer bus address */
 unsigned char *rx_buf;   /* dma rx buffer cpu address */
 struct dma_chan *tx_ch;  /* dma tx channel            */
 dma_addr_t tx_dma_buf;   /* dma tx buffer bus address */
 unsigned char *tx_buf;   /* dma tx buffer cpu address */
 u32 cr1_irq;   /* USART_CR1_RXNEIE or RTOIE */
 u32 cr3_irq;   /* USART_CR3_RXFTIE */
 int last_res;
 bool tx_dma_busy;  /* dma tx transaction in progress */
 bool rx_dma_busy;  /* dma rx transaction in progress */
 bool throttled;   /* port throttled            */
 bool hw_flow_control;
 bool swap;   /* swap RX & TX pins */
 bool fifoen;
 int rxftcfg;  /* RX FIFO threshold CFG      */
 int txftcfg;  /* TX FIFO threshold CFG      */
 bool wakeup_src;
 int rdr_mask;  /* receive data register mask */
 struct mctrl_gpios *gpios; /* modem control gpios */
 struct dma_tx_state rx_dma_state;
};

static struct stm32_port stm32_ports[STM32_MAX_PORTS];
static struct uart_driver stm32_usart_driver;

Messung V0.5
C=84 H=85 G=84

¤ Dauer der Verarbeitung: 0.0 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.