55#ifndef T32CZ20_UART_H_
56#define T32CZ20_UART_H_
74#define TR_NUMBER_OF_UARTS 3
88#define LOW_BYTES_BUFFER_THRESHHOLD 16
93#define MAX_RAW_TX_DATA_BUFFER_SIZE 256
97#define DMA_RX_BUFF_MINIMUM_SIZE 16
101#define TX_FIFO_SIZE 32
113#define UART0_TX_PIN_DEFAULT 17
115#define UART0_RX_PIN_DEFAULT 16
118#define UART1_TX_PIN_DEFAULT 6
120#define UART1_RX_PIN_DEFAULT 7
123#define UART2_TX_PIN_DEFAULT 8
125#define UART2_RX_PIN_DEFAULT 9
128#define TR_HAL_PIN_NOT_SET 0xFF
139#ifdef UART0_SECURE_EN
140 #define CHIP_MEMORY_MAP_UART0_BASE (0x50012000UL)
142 #define CHIP_MEMORY_MAP_UART0_BASE (0x40012000UL)
145#ifdef UART1_SECURE_EN
146 #define CHIP_MEMORY_MAP_UART1_BASE (0x50013000UL)
148 #define CHIP_MEMORY_MAP_UART1_BASE (0x40013000UL)
151#ifdef UART2_SECURE_EN
152 #define CHIP_MEMORY_MAP_UART2_BASE (0x50025000UL)
154 #define CHIP_MEMORY_MAP_UART2_BASE (0x40025000UL)
227 __IO uint32_t receive_buffer_register;
230 __IO uint32_t interrupt_enable_register;
233 __IO uint32_t FIFO_control_register;
236 __IO uint32_t line_control_register;
239 __IO uint32_t modem_control_register;
242 __IO uint32_t line_status_register;
245 __I uint32_t modem_status_register;
252 __IO uint32_t divisor_latch_register;
253 __IO uint32_t fractional_divisor_latch;
258 __IO uint32_t low_speed_mode;
260 __IO uint32_t wake_enable;
261 __IO uint32_t enable;
265 __IO uint32_t DMA_rx_buffer_addr;
266 __IO uint32_t DMA_rx_buffer_len;
269 __IO uint32_t DMA_tx_buffer_addr;
270 __IO uint32_t DMA_tx_buffer_len;
273 __I uint32_t DMA_rx_xfer_len_remaining;
274 __I uint32_t DMA_tx_xfer_len_remaining;
275 __IO uint32_t DMA_rx_enable;
276 __IO uint32_t DMA_tx_enable;
289#define transmitter_holding_register receive_buffer_register
296#define UART0_CHIP_REGISTERS ((UART_REGISTERS_T *) CHIP_MEMORY_MAP_UART0_BASE)
297#define UART1_CHIP_REGISTERS ((UART_REGISTERS_T *) CHIP_MEMORY_MAP_UART1_BASE)
298#define UART2_CHIP_REGISTERS ((UART_REGISTERS_T *) CHIP_MEMORY_MAP_UART2_BASE)
302#define IER_ENABLE_RECEIVE_DATA_AVAIL_INT 0x01
303#define IER_ENABLE_READY_TO_TRANSMIT_INT 0x02
304#define IER_ENABLE_FRAMING_PARITY_OVERRUN_ERROR_INT 0x04
305#define IER_ENABLE_MODEM_STATUS_INT 0x08
306#define IER_ENABLE_RECEIVED_DATA_TIMEOUT 0x10
307#define IER_ENABLE_DMA_RX_INT 0x20
308#define IER_ENABLE_DMA_TX_INT 0x40
313#define FCR_CLEAR_RECEIVER 0x02
314#define FCR_CLEAR_TRANSMIT 0x04
315#define FCR_DMA_SELECT 0x08
317#define FCR_TRIGGER_MASK 0xC0
318#define FCR_RTS_TRIGGER_MASK 0x300
331#define LCR_DATA_BITS_MASK 0x03
332#define LCR_DATA_BITS_INV_MASK 0xFC
333#define LCR_STOP_BITS_MASK 0x04
334#define LCR_STOP_BITS_INV_MASK 0xFB
335#define LCR_PARITY_BITS_MASK 0x18
336#define LCR_PARITY_BITS_INV_MASK 0xE7
337#define LCR_BAUD_RATE_SETTING_MASK 0x80
349#define LSR_DATA_READY 0x01
351#define LSR_OVERRUN_ERROR 0x02
353#define LSR_PARITY_ERROR 0x04
355#define LSR_FRAMING_ERROR 0x08
357#define LSR_BREAK_INDICATOR 0x10
361#define LSR_TRANSMITTER_HOLDING_REG_EMPTY 0x20
363#define LSR_TRANSMITTER_EMPTY 0x40
365#define CLEAR_RX_ERROR_BY_CLEAR_LSR_BITS 0x1E
369#define MSR_DELTA_CTS 0x01
374#define IIR_RX_DATA_AVAIL_INTERRUPT 0x01
375#define IIR_THR_EMPTY_INTERRUPT 0x02
376#define IIR_RECEIVER_ERROR_INTERRUPT 0x04
377#define IIR_MODEM_STATUS_INTERRUPT 0x08
378#define IIR_RX_DATA_TIMEOUT_INTERRUPT 0x10
379#define IIR_DMA_RX_INTERRUPT 0x20
380#define IIR_DMA_TX_INTERRUPT 0x40
381#define IIR_INTERRUPT_MASK 0x7F
385#define LOW_SPEED_MODE_ENABLED 0x01
386#define NORMAL_SPEED_MODE_ENABLED 0x00
390#define UART_WAKE_ENABLE 0x01
394#define UART_ENABLE 0x01
399#define UART_DMA_ENABLE 0x01
400#define UART_DMA_DISABLE 0x00
430#define TR_HAL_NUM_FULL_SPEED_BAUD_RATES 14
431#define TR_HAL_NUM_LPM_BAUD_RATES 14
432#define TR_HAL_NUM_LOW_SPEED_BAUD_RATES 10
433#define TR_HAL_NUM_SLOW_CLOCK_BAUD_RATES 3
434#define TR_HAL_NUM_BAUD_RATES (TR_HAL_NUM_FULL_SPEED_BAUD_RATES + \
435 TR_HAL_NUM_LPM_BAUD_RATES + \
436 TR_HAL_NUM_LOW_SPEED_BAUD_RATES + \
437 TR_HAL_NUM_SLOW_CLOCK_BAUD_RATES)
583 bool hardware_flow_control_enabled;
604 uint8_t* rx_dma_buffer;
605 uint16_t rx_dma_buff_length;
612 uint8_t* raw_tx_buffer;
613 uint16_t raw_tx_buff_length;
634 bool enable_chip_interrupts;
654 bool wake_on_interrupt;
671#define DEFAULT_UART0_CONFIG \
673 .tx_pin = (tr_hal_gpio_pin_t) { UART0_TX_PIN_DEFAULT }, \
674 .rx_pin = (tr_hal_gpio_pin_t) { UART0_RX_PIN_DEFAULT }, \
675 .hardware_flow_control_enabled = false, \
676 .rts_pin = (tr_hal_gpio_pin_t) { TR_HAL_PIN_NOT_SET }, \
677 .cts_pin = (tr_hal_gpio_pin_t) { TR_HAL_PIN_NOT_SET }, \
678 .baud_rate = TR_HAL_UART_BAUD_RATE_115200, \
679 .clock_to_use = TR_HAL_CLOCK_32M, \
680 .data_bits = LCR_DATA_BITS_8_VALUE, \
681 .stop_bits = LCR_STOP_BITS_ONE_VALUE, \
682 .parity = LCR_PARITY_NONE_VALUE, \
683 .rx_dma_enabled = false, \
684 .tx_dma_enabled = false, \
685 .rx_dma_buffer = NULL, \
686 .rx_dma_buff_length = 0, \
687 .raw_tx_buffer = NULL, \
688 .raw_tx_buff_length = 0, \
689 .rx_handler_function = NULL, \
690 .rx_bytes_before_trigger = FCR_TRIGGER_1_BYTE, \
691 .enable_chip_interrupts = true, \
692 .interrupt_priority = TR_HAL_INTERRUPT_PRIORITY_5, \
693 .wake_on_interrupt = false, \
694 .event_handler_fx = NULL, \
695 .run_when_sleeping = true, \
696 .sleep_baud_rate = TR_HAL_UART_BAUD_RATE_115200, \
697 .sleep_clock_to_use = TR_HAL_CLOCK_1M, \
700#define DEFAULT_UART1_CONFIG \
702 .tx_pin = (tr_hal_gpio_pin_t) { UART1_TX_PIN_DEFAULT }, \
703 .rx_pin = (tr_hal_gpio_pin_t) { UART1_RX_PIN_DEFAULT }, \
704 .hardware_flow_control_enabled = false, \
705 .rts_pin = (tr_hal_gpio_pin_t) { TR_HAL_PIN_NOT_SET }, \
706 .cts_pin = (tr_hal_gpio_pin_t) { TR_HAL_PIN_NOT_SET }, \
707 .baud_rate = TR_HAL_UART_BAUD_RATE_115200, \
708 .clock_to_use = TR_HAL_CLOCK_32M, \
709 .data_bits = LCR_DATA_BITS_8_VALUE, \
710 .stop_bits = LCR_STOP_BITS_ONE_VALUE, \
711 .parity = LCR_PARITY_NONE_VALUE, \
712 .rx_dma_enabled = false, \
713 .tx_dma_enabled = false, \
714 .rx_dma_buffer = NULL, \
715 .rx_dma_buff_length = 0, \
716 .raw_tx_buffer = NULL, \
717 .raw_tx_buff_length = 0, \
718 .rx_handler_function = NULL, \
719 .rx_bytes_before_trigger = FCR_TRIGGER_1_BYTE, \
720 .enable_chip_interrupts = true, \
721 .interrupt_priority = TR_HAL_INTERRUPT_PRIORITY_5, \
722 .wake_on_interrupt = false, \
723 .event_handler_fx = NULL, \
724 .run_when_sleeping = false, \
727#define DEFAULT_UART2_CONFIG \
729 .tx_pin = (tr_hal_gpio_pin_t) { UART2_TX_PIN_DEFAULT }, \
730 .rx_pin = (tr_hal_gpio_pin_t) { UART2_RX_PIN_DEFAULT }, \
731 .hardware_flow_control_enabled = false, \
732 .rts_pin = (tr_hal_gpio_pin_t) { TR_HAL_PIN_NOT_SET }, \
733 .cts_pin = (tr_hal_gpio_pin_t) { TR_HAL_PIN_NOT_SET }, \
734 .baud_rate = TR_HAL_UART_BAUD_RATE_115200, \
735 .clock_to_use = TR_HAL_CLOCK_32M, \
736 .data_bits = LCR_DATA_BITS_8_VALUE, \
737 .stop_bits = LCR_STOP_BITS_ONE_VALUE, \
738 .parity = LCR_PARITY_NONE_VALUE, \
739 .rx_dma_enabled = false, \
740 .tx_dma_enabled = false, \
741 .rx_dma_buffer = NULL, \
742 .rx_dma_buff_length = 0, \
743 .raw_tx_buffer = NULL, \
744 .raw_tx_buff_length = 0, \
745 .rx_handler_function = NULL, \
746 .rx_bytes_before_trigger = FCR_TRIGGER_1_BYTE, \
747 .enable_chip_interrupts = true, \
748 .interrupt_priority = TR_HAL_INTERRUPT_PRIORITY_5, \
749 .wake_on_interrupt = false, \
750 .event_handler_fx = NULL, \
751 .run_when_sleeping = false, \
760#define TR_HAL_UART_EVENT_DMA_TX_COMPLETE 0x00000001
761#define TR_HAL_UART_EVENT_DMA_RX_BUFFER_LOW 0x00000002
762#define TR_HAL_UART_EVENT_DMA_RX_TO_USER_FX 0x00000004
763#define TR_HAL_UART_EVENT_DMA_RX_READY 0x00000008
764#define TR_HAL_UART_EVENT_TX_COMPLETE 0x00000010
765#define TR_HAL_UART_EVENT_TX_STILL_GOING 0x00000020
766#define TR_HAL_UART_EVENT_RX_TO_USER_FX 0x00000040
767#define TR_HAL_UART_EVENT_RX_READY 0x00000080
768#define TR_HAL_UART_EVENT_RX_ENDED_TO_USER_FX 0x00000100
769#define TR_HAL_UART_EVENT_RX_ENDED_NO_DATA 0x00000200
770#define TR_HAL_UART_EVENT_RX_MAYBE_READY 0x00000400
771#define TR_HAL_UART_EVENT_RX_ERR_OVERRUN 0x00000800
772#define TR_HAL_UART_EVENT_RX_ERR_PARITY 0x00001000
773#define TR_HAL_UART_EVENT_RX_ERR_FRAMING 0x00002000
774#define TR_HAL_UART_EVENT_RX_ERR_BREAK 0x00004000
775#define TR_HAL_UART_EVENT_HW_FLOW_CONTROL 0x00008000
776#define TR_HAL_UART_EVENT_UNEXPECTED 0x00010000
tr_hal_clock_t
enum for the different clocks some of these can be disabled and some cannot, the crystal oscillator c...
Definition T32CZ20_power.h:202
tr_hal_baud_rate_t
Definition T32CM11_uart.h:409
#define interrupt_identification_register
Definition T32CM11_uart.h:227
tr_hal_uart_id_t
Definition T32CM11_uart.h:78
#define TR_HAL_NUM_LOW_SPEED_BAUD_RATES
Definition T32CZ20_uart.h:432
tr_hal_data_bits_t
Definition T32CZ20_uart.h:173
#define TR_HAL_NUM_FULL_SPEED_BAUD_RATES
Definition T32CZ20_uart.h:430
tr_hal_baud_rate_t
Definition T32CZ20_uart.h:440
tr_hal_parity_t
Definition T32CZ20_uart.h:197
#define TR_HAL_NUM_LPM_BAUD_RATES
Definition T32CZ20_uart.h:431
UART_REGISTERS_T * tr_hal_uart_get_uart_register_address(tr_hal_uart_id_t uart_id)
void(* tr_hal_uart_receive_callback_t)(uint8_t received_byte)
Definition T32CZ20_uart.h:548
tr_hal_hw_fc_t
for setting up hardware flow control
Definition T32CZ20_uart.h:207
tr_hal_stop_bits_t
Definition T32CZ20_uart.h:186
tr_hal_fifo_trigger_t
values we can trigger on for receive FIFO
Definition T32CZ20_uart.h:160
tr_hal_uart_id_t
this type is used to specify a UART ID. On the T32CZ20 there are 3 UARTs available.
Definition T32CZ20_uart.h:78
#define TR_HAL_NUM_BAUD_RATES
Definition T32CZ20_uart.h:434
void(* tr_hal_uart_event_callback_t)(uint32_t event_bitmask)
Definition T32CZ20_uart.h:551
@ LCR_DATA_BITS_7_VALUE
Definition T32CZ20_uart.h:176
@ LCR_DATA_BITS_INVALID_VALUE
Definition T32CZ20_uart.h:178
@ LCR_DATA_BITS_6_VALUE
Definition T32CZ20_uart.h:175
@ LCR_DATA_BITS_5_VALUE
Definition T32CZ20_uart.h:174
@ LCR_DATA_BITS_8_VALUE
Definition T32CZ20_uart.h:177
@ TR_HAL_UART_BAUD_RATE_LPM_19200
Definition T32CZ20_uart.h:472
@ TR_HAL_UART_BAUD_RATE_1000000
Definition T32CZ20_uart.h:461
@ TR_HAL_UART_BAUD_RATE_LOW_SPEED_57600
Definition T32CZ20_uart.h:492
@ TR_HAL_UART_BAUD_RATE_115200
Definition T32CZ20_uart.h:458
@ TR_HAL_UART_BAUD_RATE_230400
Definition T32CZ20_uart.h:459
@ TR_HAL_UART_BAUD_RATE_LPM_14400
Definition T32CZ20_uart.h:471
@ TR_HAL_UART_BAUD_RATE_ERROR
Definition T32CZ20_uart.h:503
@ TR_HAL_UART_BAUD_RATE_57600
Definition T32CZ20_uart.h:456
@ TR_HAL_UART_BAUD_RATE_LPM_2400
Definition T32CZ20_uart.h:468
@ TR_HAL_UART_BAUD_RATE_500000
Definition T32CZ20_uart.h:460
@ TR_HAL_UART_BAUD_RATE_LOW_SPEED_19200
Definition T32CZ20_uart.h:489
@ TR_HAL_UART_BAUD_RATE_2400
Definition T32CZ20_uart.h:449
@ TR_HAL_UART_BAUD_RATE_LPM_28800
Definition T32CZ20_uart.h:473
@ TR_HAL_UART_BAUD_RATE_LOW_SPEED_4800
Definition T32CZ20_uart.h:486
@ TR_HAL_UART_BAUD_RATE_76800
Definition T32CZ20_uart.h:457
@ TR_HAL_UART_BAUD_RATE_LPM_2000000
Definition T32CZ20_uart.h:481
@ TR_HAL_UART_BAUD_RATE_LPM_115200
Definition T32CZ20_uart.h:477
@ TR_HAL_UART_BAUD_RATE_LPM_38400
Definition T32CZ20_uart.h:474
@ TR_HAL_UART_BAUD_RATE_LPM_57600
Definition T32CZ20_uart.h:475
@ TR_HAL_UART_BAUD_RATE_SLOW_CLOCK_4800
Definition T32CZ20_uart.h:499
@ TR_HAL_UART_BAUD_RATE_LOW_SPEED_76800
Definition T32CZ20_uart.h:493
@ TR_HAL_UART_BAUD_RATE_LPM_9600
Definition T32CZ20_uart.h:470
@ TR_HAL_UART_BAUD_RATE_LPM_1000000
Definition T32CZ20_uart.h:480
@ TR_HAL_UART_BAUD_RATE_SLOW_CLOCK_9600
Definition T32CZ20_uart.h:500
@ TR_HAL_UART_BAUD_RATE_LOW_SPEED_38400
Definition T32CZ20_uart.h:491
@ TR_HAL_UART_BAUD_RATE_LOW_SPEED_2400
Definition T32CZ20_uart.h:485
@ TR_HAL_UART_BAUD_RATE_19200
Definition T32CZ20_uart.h:453
@ TR_HAL_UART_BAUD_RATE_LOW_SPEED_28800
Definition T32CZ20_uart.h:490
@ TR_HAL_UART_BAUD_RATE_LPM_76800
Definition T32CZ20_uart.h:476
@ TR_HAL_UART_BAUD_RATE_LPM_230400
Definition T32CZ20_uart.h:478
@ TR_HAL_UART_BAUD_RATE_9600
Definition T32CZ20_uart.h:451
@ TR_HAL_UART_BAUD_RATE_28800
Definition T32CZ20_uart.h:454
@ TR_HAL_UART_BAUD_RATE_LOW_SPEED_9600
Definition T32CZ20_uart.h:487
@ TR_HAL_UART_BAUD_RATE_LPM_500000
Definition T32CZ20_uart.h:479
@ TR_HAL_UART_BAUD_RATE_4800
Definition T32CZ20_uart.h:450
@ TR_HAL_UART_BAUD_RATE_LPM_4800
Definition T32CZ20_uart.h:469
@ TR_HAL_UART_BAUD_RATE_14400
Definition T32CZ20_uart.h:452
@ TR_HAL_UART_BAUD_RATE_38400
Definition T32CZ20_uart.h:455
@ TR_HAL_UART_BAUD_RATE_LOW_SPEED_14400
Definition T32CZ20_uart.h:488
@ TR_HAL_UART_BAUD_RATE_LOW_SPEED_115200
Definition T32CZ20_uart.h:494
@ TR_HAL_UART_BAUD_RATE_2000000
Definition T32CZ20_uart.h:462
@ TR_HAL_UART_BAUD_RATE_SLOW_CLOCK_2400
Definition T32CZ20_uart.h:498
@ LCR_PARITY_EVEN_VALUE
Definition T32CZ20_uart.h:200
@ LCR_PARITY_NONE_VALUE
Definition T32CZ20_uart.h:198
@ LCR_PARITY_ODD_VALUE
Definition T32CZ20_uart.h:199
@ LCR_PARITY_INVALID_VALUE
Definition T32CZ20_uart.h:201
@ MCR_SET_CTS_ENABLED
Definition T32CZ20_uart.h:210
@ MCR_NO_FLOW_CONTROL_VALUE
Definition T32CZ20_uart.h:208
@ MCR_SET_RTS_READY
Definition T32CZ20_uart.h:209
@ LCR_STOP_BITS_TWO_VALUE
Definition T32CZ20_uart.h:188
@ LCR_STOP_BITS_ONE_VALUE
Definition T32CZ20_uart.h:187
@ LCR_STOP_BITS_INVALID_VALUE
Definition T32CZ20_uart.h:189
@ FCR_TRIGGER_14_BYTES
Definition T32CZ20_uart.h:164
@ FCR_TRIGGER_8_BYTES
Definition T32CZ20_uart.h:163
@ FCR_NO_TRIGGER
Definition T32CZ20_uart.h:165
@ FCR_TRIGGER_4_BYTES
Definition T32CZ20_uart.h:162
@ FCR_TRIGGER_1_BYTE
Definition T32CZ20_uart.h:161
@ UART_0_ID
Definition T32CZ20_uart.h:79
@ UART_2_ID
Definition T32CZ20_uart.h:81
@ UART_1_ID
Definition T32CZ20_uart.h:80
Definition T32CM11_uart.h:189
pin type
Definition tr_hal_platform.h:23
Definition T32CM11_uart.h:470
tr_hal_clock_t sleep_clock_to_use
Definition T32CZ20_uart.h:648
tr_hal_clock_t clock_to_use
Definition T32CZ20_uart.h:592
bool run_when_sleeping
Definition T32CZ20_uart.h:646
tr_hal_baud_rate_t sleep_baud_rate
Definition T32CZ20_uart.h:647
This is the common include file for the Trident HAL GPIO Driver.