30#define TR_HAL_NUM_SPI 2
98#define TR_HAL_SPI_TX_FIFO_SIZE 32
99#define TR_HAL_SPI_RX_FIFO_SIZE 32
102#define SPI0_CLK_BIT 20
103#define SPI1_CLK_BIT 21
104#define SPI0_CLK_ENABLE_VALUE 0x100000
105#define SPI1_CLK_ENABLE_VALUE 0x200000
113#define SPI_INVALID_PIN 0xFF
116#define DEFAULT_SPI_CLK_PIN 22
117#define DEFAULT_SPI_CS_PIN 23
118#define DEFAULT_SPI_IO_0_PIN 28
119#define DEFAULT_SPI_IO_1_PIN 29
133#ifdef QSPI0_SECURE_EN
134 #define CHIP_MEMORY_MAP_SPI0_BASE (0x50020000UL)
136 #define CHIP_MEMORY_MAP_SPI0_BASE (0x40020000UL)
139#ifdef QSPI1_SECURE_EN
140 #define CHIP_MEMORY_MAP_SPI1_BASE (0x50021000UL)
142 #define CHIP_MEMORY_MAP_SPI1_BASE (0x40021000UL)
153 __IO uint32_t spi_tx_data;
156 __I uint32_t spi_rx_data;
159 __IO uint32_t spi_control;
160 __IO uint32_t spi_aux_control;
163 __IO uint32_t peripheral_select;
167 __IO uint32_t controller_clock_divider;
217#define SPI0_REGISTERS ((SPI_REGISTERS_T *) CHIP_MEMORY_MAP_SPI0_BASE)
218#define SPI1_REGISTERS ((SPI_REGISTERS_T *) CHIP_MEMORY_MAP_SPI1_BASE)
222#define SPI_STATUS_TX_IN_PROGRESS 0x01
223#define SPI_STATUS_TX_FIFO_EMPTY 0x04
224#define SPI_STATUS_TX_FIFO_FULL 0x10
225#define SPI_STATUS_RX_FIFO_EMPTY 0x20
226#define SPI_STATUS_RX_FIFO_FULL 0x80
233#define SPI_CONTROL_REG_SET_AS_CONTROLLER 0x01
234#define SPI_CONTROL_REG_SET_AS_PERIPHERAL 0x00
236#define SPI_CONTROL_REG_CPHA_HIGH 0x02
237#define SPI_CONTROL_REG_CPHA_LOW 0x00
239#define SPI_CONTROL_REG_CPOL_HIGH 0x04
240#define SPI_CONTROL_REG_CPOL_LOW 0x00
242#define SPI_CONTROL_REG_SDATA_FOR_CROSSED 0x08
244#define SPI_CONTROL_REG_BYTE_SWAP 0x10
246#define SPI_CONTROL_REG_MSB_FIRST 0x20
248#define SPI_CONTROL_REG_CONTINUOUS_TRANSFER 0x40
251#define SPI_CONTROL_PRE_DELAY_ENABLE 0x100
253#define SPI_CONTROL_INTER_DELAY_ENABLE 0x200
255#define SPI_CONTROL_POST_DELAY_ENABLE 0x400
257#define SPI_CONTROL_DMA_THRESHHOLD_4 0x0000
258#define SPI_CONTROL_DMA_THRESHHOLD_8 0x4000
259#define SPI_CONTROL_DMA_THRESHHOLD_16 0x8000
260#define SPI_CONTROL_DMA_THRESHHOLD_24 0xC000
267#define SPI_AUX_CTRL_REG_MODE_MASK 0x03
270#define SPI_AUX_CTRL_REG_PREVENT_TX_BIT 0x04
275#define SPI_AUX_CTRL_REG_PREVENT_RX_BIT 0x08
278#define SPI_AUX_CTRL_REG_BITSIZE_MASK 0x70
282#define SPI_AUX_CTRL_REG_TRANSFER_EXTEND 0x80
289#define SPI_INTERRUPT_TX_EMPTY 0x01
290#define SPI_INTERRUPT_RX_FULL 0x08
291#define SPI_INTERRUPT_TRANSFER_DONE 0x10
292#define SPI_INTERRUPT_RX_NOT_EMPTY 0x20
294#define SPI_INTERRUPT_ALL 0x39
295#define SPI_INTERRUPT_NONE 0x00
300#define SPI_PERIPH_SELECT_NONE 0x00
301#define SPI_PERIPH_SELECT_0 0x01
302#define SPI_PERIPH_SELECT_1 0x02
303#define SPI_PERIPH_SELECT_2 0x04
304#define SPI_PERIPH_SELECT_3 0x08
306#define SPI_PERIPH_SEL_0_ACTIVE_HIGH 0x100
307#define SPI_PERIPH_SEL_0_ACTIVE_LOW 0x000
308#define SPI_PERIPH_SEL_1_ACTIVE_HIGH 0x200
309#define SPI_PERIPH_SEL_1_ACTIVE_LOW 0x000
310#define SPI_PERIPH_SEL_2_ACTIVE_HIGH 0x400
311#define SPI_PERIPH_SEL_2_ACTIVE_LOW 0x000
312#define SPI_PERIPH_SEL_3_ACTIVE_HIGH 0x800
313#define SPI_PERIPH_SEL_3_ACTIVE_LOW 0x000
315#define SPI_PERIPH_SEL_0_SET_HIGH 0x10000
316#define SPI_PERIPH_SEL_0_SET_LOW 0x00000
317#define SPI_PERIPH_SEL_1_SET_HIGH 0x20000
318#define SPI_PERIPH_SEL_1_SET_LOW 0x00000
319#define SPI_PERIPH_SEL_2_SET_HIGH 0x40000
320#define SPI_PERIPH_SEL_2_SET_LOW 0x00000
321#define SPI_PERIPH_SEL_3_SET_HIGH 0x80000
322#define SPI_PERIPH_SEL_3_SET_LOW 0x00000
324#define SPI_PERIPH_SEL_0_MANUAL_MODE 0x1000000
325#define SPI_PERIPH_SEL_1_MANUAL_MODE 0x2000000
326#define SPI_PERIPH_SEL_2_MANUAL_MODE 0x4000000
327#define SPI_PERIPH_SEL_3_MANUAL_MODE 0x8000000
333#define SPI_ENABLE 0x01
334#define SPI_DISABLE 0x00
374#define SPI_DMA_INTERRUPTS_DISABLE 0x00
375#define SPI_DMA_RX_INTERRUPT_ENABLE 0x01
376#define SPI_DMA_TX_INTERRUPT_ENABLE 0x02
380#define SPI_DMA_RX_INTERRUPT_ACTIVE 0x01
381#define SPI_DMA_TX_INTERRUPT_ACTIVE 0x02
385#define SPI_DMA_ENABLE 0x01
386#define SPI_DMA_DISABLE 0x00
389#define SPI_DMA_RX_BUFF_MINIMUM_SIZE 16
405#define TR_HAL_SPI_EVENT_TX_EMPTY 0x00000001
406#define TR_HAL_SPI_EVENT_RX_FULL 0x00000008
407#define TR_HAL_SPI_EVENT_RX_HAS_MORE_DATA 0x00000010
408#define TR_HAL_SPI_EVENT_TRANSFER_DONE 0x00000020
409#define TR_HAL_SPI_EVENT_RX_TO_USER_FX 0x00000040
410#define TR_HAL_SPI_EVENT_RX_READY 0x00000080
411#define TR_HAL_SPI_EVENT_DMA_RX_TO_USER_FX 0x00000100
412#define TR_HAL_SPI_EVENT_DMA_RX_READY 0x00000200
413#define TR_HAL_SPI_EVENT_DMA_TX_COMPLETE 0x00000400
439 bool run_as_controller;
458 uint8_t num_chip_select_pins;
470 bool sdo_sdi_pins_crossed;
500 bool continuous_transfer;
506 bool most_significant_bit_first;
510 bool enable_inter_transfer_delay;
513 uint16_t delay_in_clock_cycles;
521 uint8_t* rx_dma_buffer;
522 uint16_t rx_dma_buff_length;
530 uint8_t* raw_tx_buffer;
531 uint16_t raw_tx_buff_length;
549 bool enable_chip_interrupts;
557 bool wake_on_interrupt;
580#define SPI_CONFIG_CONTROLLER_NORMAL_MODE \
582 .run_as_controller = true, \
583 .spi_mode = TR_HAL_SPI_MODE_NORMAL, \
584 .clock_pin = (tr_hal_gpio_pin_t) { DEFAULT_SPI_CLK_PIN }, \
585 .io_0_pin = (tr_hal_gpio_pin_t) { DEFAULT_SPI_IO_0_PIN }, \
586 .io_1_pin = (tr_hal_gpio_pin_t) { DEFAULT_SPI_IO_1_PIN }, \
587 .io_2_pin = (tr_hal_gpio_pin_t) { SPI_INVALID_PIN }, \
588 .io_3_pin = (tr_hal_gpio_pin_t) { SPI_INVALID_PIN }, \
589 .num_chip_select_pins = 1, \
590 .chip_select_0 = (tr_hal_gpio_pin_t) { DEFAULT_SPI_CS_PIN },\
591 .chip_select_1 = (tr_hal_gpio_pin_t) { SPI_INVALID_PIN }, \
592 .chip_select_2 = (tr_hal_gpio_pin_t) { SPI_INVALID_PIN }, \
593 .chip_select_3 = (tr_hal_gpio_pin_t) { SPI_INVALID_PIN }, \
594 .sdo_sdi_pins_crossed = false, \
597 .controller_clock_rate = SPI_CTRL_CLOCK_1_MHZ, \
598 .bit_size = TR_HAL_SPI_BIT_SIZE_8, \
599 .continuous_transfer = true, \
600 .byte_swap = false, \
601 .most_significant_bit_first = true, \
602 .enable_inter_transfer_delay = false, \
603 .delay_in_clock_cycles = 0, \
604 .rx_dma_enabled = false, \
605 .tx_dma_enabled = false, \
606 .rx_dma_buffer = NULL, \
607 .rx_dma_buff_length = 0, \
608 .raw_tx_buffer = NULL, \
609 .raw_tx_buff_length = 0, \
610 .rx_handler_function = NULL, \
611 .event_handler_fx = NULL, \
612 .enable_chip_interrupts = true, \
613 .interrupt_priority = TR_HAL_INTERRUPT_PRIORITY_5, \
614 .wake_on_interrupt = false, \
658 uint8_t num_chip_select,
670 uint32_t* transmit_started,
671 uint32_t* transmit_completed,
672 uint32_t* bytes_received);
tr_hal_status_t
Definition tr_hal_common.h:25
tr_hal_spi_bit_size_t
Definition T32CM11_spi.h:89
void(* tr_hal_spi_receive_callback_t)(uint8_t num_received_bytes, uint8_t *byte_buffer)
Definition T32CM11_spi.h:471
tr_hal_spi_mode_t
Normal SPI vs Dual SPI vs Quad SPI modes.
Definition T32CM11_spi.h:78
tr_hal_spi_id_t
Definition T32CM11_spi.h:33
void(* tr_hal_spi_event_callback_t)(tr_hal_spi_id_t spi_id, uint32_t event_bitmask)
Definition T32CM11_spi.h:474
tr_hal_spi_clock_rate_t
Definition T32CM11_spi.h:406
@ TR_HAL_SPI_BIT_SIZE_32
Definition T32CM11_spi.h:91
@ TR_HAL_SPI_BIT_SIZE_8
Definition T32CM11_spi.h:90
@ TR_HAL_SPI_MODE_NORMAL
Definition T32CM11_spi.h:79
@ TR_HAL_SPI_MODE_DUAL
Definition T32CM11_spi.h:80
@ TR_HAL_SPI_MODE_QUAD
Definition T32CM11_spi.h:81
@ SPI_1_ID
Definition T32CM11_spi.h:35
@ SPI_0_ID
Definition T32CM11_spi.h:34
@ SPI_CTRL_CLOCK_250_KHZ
Definition T32CM11_spi.h:414
@ SPI_CTRL_CLOCK_32_MHZ
Definition T32CM11_spi.h:407
@ SPI_CTRL_CLOCK_16_MHZ
Definition T32CM11_spi.h:408
@ SPI_CTRL_CLOCK_125_KHZ
Definition T32CM11_spi.h:415
@ SPI_CTRL_CLOCK_4_MHZ
Definition T32CM11_spi.h:410
@ SPI_CTRL_CLOCK_8_MHZ
Definition T32CM11_spi.h:409
@ SPI_CTRL_CLOCK_500_KHZ
Definition T32CM11_spi.h:413
@ SPI_CTRL_CLOCK_2_MHZ
Definition T32CM11_spi.h:411
@ SPI_CTRL_CLOCK_1_MHZ
Definition T32CM11_spi.h:412
tr_hal_status_t tr_hal_spi_clear_tx_busy(tr_hal_spi_id_t spi_id)
tr_hal_status_t tr_hal_spi_read_stats(tr_hal_spi_id_t spi_id, uint32_t *transmit_started, uint32_t *transmit_completed, uint32_t *bytes_received)
tr_hal_status_t tr_hal_spi_power_off(tr_hal_spi_id_t spi_id)
tr_hal_status_t tr_hal_spi_power_on(tr_hal_spi_id_t spi_id)
SPI_REGISTERS_T * tr_hal_spi_get_register_address(tr_hal_spi_id_t spi_id)
tr_hal_status_t tr_hal_spi_set_standard_pins(tr_hal_spi_id_t spi_id, bool is_controller, tr_hal_gpio_pin_t clk_pin, tr_hal_gpio_pin_t chip_select_0_pin, tr_hal_gpio_pin_t sdo_pin, tr_hal_gpio_pin_t sdi_pin)
tr_hal_status_t tr_hal_spi_set_addl_cs_pins(tr_hal_spi_id_t spi_id, uint8_t num_chip_select, tr_hal_gpio_pin_t chip_select_1_pin, tr_hal_gpio_pin_t chip_select_2_pin, tr_hal_gpio_pin_t chip_select_3_pin)
the struct we use so we can address registers using field names
Definition T32CM11_spi.h:224
__IO uint32_t DMA_tx_buffer_addr
Definition T32CM11_spi.h:270
__IO uint32_t DMA_rx_buffer_len
Definition T32CM11_spi.h:267
__I uint32_t tx_fifo_current_level
Definition T32CM11_spi.h:249
__IO uint32_t DMA_interrupt_enable
Definition T32CM11_spi.h:277
__IO uint32_t epd_function
Definition T32CZ20_spi.h:170
__I uint32_t rx_fifo_current_level
Definition T32CM11_spi.h:250
__I uint32_t spi_status
Definition T32CM11_spi.h:237
__IO uint32_t DMA_rx_buffer_addr
Definition T32CM11_spi.h:266
__I uint32_t interrupt_status
Definition T32CM11_spi.h:245
__IO uint32_t DMA_interrupt_status
Definition T32CM11_spi.h:278
__IO uint32_t interrupt_enable
Definition T32CM11_spi.h:244
__IO uint32_t DMA_tx_buffer_len
Definition T32CM11_spi.h:271
__I uint32_t reserved_1
Definition T32CZ20_spi.h:191
__IO uint32_t DMA_rx_enable
Definition T32CM11_spi.h:279
__IO int32_t interrupt_clear
Definition T32CM11_spi.h:246
__IO uint32_t spi_enable_disable
Definition T32CM11_spi.h:257
__IO uint32_t controller_delay_setting
Definition T32CM11_spi.h:254
__I uint32_t DMA_rx_xfer_len_remaining
Definition T32CM11_spi.h:273
__IO uint32_t DMA_tx_enable
Definition T32CM11_spi.h:280
__I uint32_t DMA_tx_xfer_len_remaining
Definition T32CM11_spi.h:274
pin type
Definition tr_hal_platform.h:23
Definition T32CM11_spi.h:484