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 QSPI0_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;
173 __IO uint32_t controller_delay_setting;
176 __IO uint32_t interrupt_enable;
177 __I uint32_t interrupt_status;
181 __IO uint32_t spi_enable_disable;
184 __I uint32_t spi_status;
187 __I uint32_t tx_fifo_current_level;
188 __I uint32_t rx_fifo_current_level;
194 __IO uint32_t DMA_rx_buffer_addr;
195 __IO uint32_t DMA_rx_buffer_len;
198 __IO uint32_t DMA_tx_buffer_addr;
199 __IO uint32_t DMA_tx_buffer_len;
201 __I uint32_t DMA_rx_xfer_len_remaining;
202 __I uint32_t DMA_tx_xfer_len_remaining;
205 __IO uint32_t DMA_interrupt_enable;
206 __IO uint32_t DMA_interrupt_status;
207 __IO uint32_t DMA_rx_enable;
208 __IO uint32_t DMA_tx_enable;
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
262#define SPI_AUX_CTRL_REG_MODE_MASK 0x03
265#define SPI_AUX_CTRL_REG_PREVENT_TX_BIT 0x04
270#define SPI_AUX_CTRL_REG_PREVENT_RX_BIT 0x08
273#define SPI_AUX_CTRL_REG_BITSIZE_MASK 0x70
277#define SPI_AUX_CTRL_REG_TRANSFER_EXTEND 0x80
284#define SPI_INTERRUPT_TX_EMPTY 0x01
285#define SPI_INTERRUPT_RX_FULL 0x08
286#define SPI_INTERRUPT_TRANSFER_DONE 0x10
287#define SPI_INTERRUPT_RX_NOT_EMPTY 0x20
289#define SPI_INTERRUPT_ALL 0x39
290#define SPI_INTERRUPT_NONE 0x00
295#define SPI_PERIPH_SELECT_NONE 0x00
296#define SPI_PERIPH_SELECT_0 0x01
297#define SPI_PERIPH_SELECT_1 0x02
298#define SPI_PERIPH_SELECT_2 0x04
299#define SPI_PERIPH_SELECT_3 0x08
301#define SPI_PERIPH_SEL_0_ACTIVE_HIGH 0x100
302#define SPI_PERIPH_SEL_0_ACTIVE_LOW 0x000
303#define SPI_PERIPH_SEL_1_ACTIVE_HIGH 0x200
304#define SPI_PERIPH_SEL_1_ACTIVE_LOW 0x000
305#define SPI_PERIPH_SEL_2_ACTIVE_HIGH 0x400
306#define SPI_PERIPH_SEL_2_ACTIVE_LOW 0x000
307#define SPI_PERIPH_SEL_3_ACTIVE_HIGH 0x800
308#define SPI_PERIPH_SEL_3_ACTIVE_LOW 0x000
310#define SPI_PERIPH_SEL_0_SET_HIGH 0x10000
311#define SPI_PERIPH_SEL_0_SET_LOW 0x00000
312#define SPI_PERIPH_SEL_1_SET_HIGH 0x20000
313#define SPI_PERIPH_SEL_1_SET_LOW 0x00000
314#define SPI_PERIPH_SEL_2_SET_HIGH 0x40000
315#define SPI_PERIPH_SEL_2_SET_LOW 0x00000
316#define SPI_PERIPH_SEL_3_SET_HIGH 0x80000
317#define SPI_PERIPH_SEL_3_SET_LOW 0x00000
319#define SPI_PERIPH_SEL_0_MANUAL_MODE 0x1000000
320#define SPI_PERIPH_SEL_1_MANUAL_MODE 0x2000000
321#define SPI_PERIPH_SEL_2_MANUAL_MODE 0x4000000
322#define SPI_PERIPH_SEL_3_MANUAL_MODE 0x8000000
328#define SPI_ENABLE 0x01
329#define SPI_DISABLE 0x00
369#define SPI_DMA_INTERRUPTS_DISABLE 0x00
370#define SPI_DMA_RX_INTERRUPT_ENABLE 0x01
371#define SPI_DMA_TX_INTERRUPT_ENABLE 0x02
375#define SPI_DMA_RX_INTERRUPT_ACTIVE 0x01
376#define SPI_DMA_TX_INTERRUPT_ACTIVE 0x02
380#define SPI_DMA_ENABLE 0x01
381#define SPI_DMA_DISABLE 0x00
384#define SPI_DMA_RX_BUFF_MINIMUM_SIZE 16
400#define TR_HAL_SPI_EVENT_TX_EMPTY 0x00000001
401#define TR_HAL_SPI_EVENT_RX_FULL 0x00000008
402#define TR_HAL_SPI_EVENT_RX_HAS_MORE_DATA 0x00000010
403#define TR_HAL_SPI_EVENT_TRANSFER_DONE 0x00000020
404#define TR_HAL_SPI_EVENT_RX_TO_USER_FX 0x00000040
405#define TR_HAL_SPI_EVENT_RX_READY 0x00000080
406#define TR_HAL_SPI_EVENT_DMA_RX_TO_USER_FX 0x00000100
407#define TR_HAL_SPI_EVENT_DMA_RX_READY 0x00000200
408#define TR_HAL_SPI_EVENT_DMA_TX_COMPLETE 0x00000400
434 bool run_as_controller;
453 uint8_t num_chip_select_pins;
465 bool sdo_sdi_pins_crossed;
495 bool continuous_transfer;
501 bool most_significant_bit_first;
505 bool enable_inter_transfer_delay;
508 uint16_t delay_in_clock_cycles;
516 uint8_t* rx_dma_buffer;
517 uint16_t rx_dma_buff_length;
525 uint8_t* raw_tx_buffer;
526 uint16_t raw_tx_buff_length;
544 bool enable_chip_interrupts;
552 bool wake_on_interrupt;
575#define SPI_CONFIG_CONTROLLER_NORMAL_MODE \
577 .run_as_controller = true, \
578 .spi_mode = TR_HAL_SPI_MODE_NORMAL, \
579 .clock_pin = (tr_hal_gpio_pin_t) { DEFAULT_SPI_CLK_PIN }, \
580 .io_0_pin = (tr_hal_gpio_pin_t) { DEFAULT_SPI_IO_0_PIN }, \
581 .io_1_pin = (tr_hal_gpio_pin_t) { DEFAULT_SPI_IO_1_PIN }, \
582 .io_2_pin = (tr_hal_gpio_pin_t) { SPI_INVALID_PIN }, \
583 .io_3_pin = (tr_hal_gpio_pin_t) { SPI_INVALID_PIN }, \
584 .num_chip_select_pins = 1, \
585 .chip_select_0 = (tr_hal_gpio_pin_t) { DEFAULT_SPI_CS_PIN },\
586 .chip_select_1 = (tr_hal_gpio_pin_t) { SPI_INVALID_PIN }, \
587 .chip_select_2 = (tr_hal_gpio_pin_t) { SPI_INVALID_PIN }, \
588 .chip_select_3 = (tr_hal_gpio_pin_t) { SPI_INVALID_PIN }, \
589 .sdo_sdi_pins_crossed = false, \
592 .controller_clock_rate = SPI_CTRL_CLOCK_1_MHZ, \
593 .bit_size = TR_HAL_SPI_BIT_SIZE_8, \
594 .continuous_transfer = true, \
595 .byte_swap = false, \
596 .most_significant_bit_first = true, \
597 .enable_inter_transfer_delay = false, \
598 .delay_in_clock_cycles = 0, \
599 .rx_dma_enabled = false, \
600 .tx_dma_enabled = false, \
601 .rx_dma_buffer = NULL, \
602 .rx_dma_buff_length = 0, \
603 .raw_tx_buffer = NULL, \
604 .raw_tx_buff_length = 0, \
605 .rx_handler_function = NULL, \
606 .event_handler_fx = NULL, \
607 .enable_chip_interrupts = true, \
608 .interrupt_priority = TR_HAL_INTERRUPT_PRIORITY_5, \
609 .wake_on_interrupt = false, \
652 uint8_t num_chip_select,
664 uint32_t* transmit_started,
665 uint32_t* transmit_completed,
666 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
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
tr_hal_spi_clock_rate_t
Definition T32CM11_spi.h:406
tr_hal_status_t tr_hal_spi_clear_tx_busy(tr_hal_spi_id_t spi_id)
tr_hal_spi_bit_size_t
Definition T32CZ20_spi.h:90
tr_hal_status_t tr_hal_spi_set_standard_pins(tr_hal_spi_id_t spi_id, 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_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)
void(* tr_hal_spi_receive_callback_t)(uint8_t num_received_bytes, uint8_t *byte_buffer)
Definition T32CZ20_spi.h:416
tr_hal_spi_mode_t
Normal SPI vs Dual SPI vs Quad SPI modes.
Definition T32CZ20_spi.h:79
tr_hal_spi_id_t
Definition T32CZ20_spi.h:34
tr_hal_status_t tr_hal_spi_power_on(tr_hal_spi_id_t spi_id)
void(* tr_hal_spi_event_callback_t)(tr_hal_spi_id_t spi_id, uint32_t event_bitmask)
Definition T32CZ20_spi.h:419
SPI_REGISTERS_T * tr_hal_spi_get_register_address(tr_hal_spi_id_t spi_id)
tr_hal_spi_clock_rate_t
Definition T32CZ20_spi.h:353
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)
@ TR_HAL_SPI_BIT_SIZE_32
Definition T32CZ20_spi.h:92
@ TR_HAL_SPI_BIT_SIZE_8
Definition T32CZ20_spi.h:91
@ TR_HAL_SPI_MODE_NORMAL
Definition T32CZ20_spi.h:80
@ TR_HAL_SPI_MODE_DUAL
Definition T32CZ20_spi.h:81
@ TR_HAL_SPI_MODE_QUAD
Definition T32CZ20_spi.h:82
@ SPI_1_ID
Definition T32CZ20_spi.h:36
@ SPI_0_ID
Definition T32CZ20_spi.h:35
@ SPI_CTRL_CLOCK_250_KHZ
Definition T32CZ20_spi.h:361
@ SPI_CTRL_CLOCK_32_MHZ
Definition T32CZ20_spi.h:354
@ SPI_CTRL_CLOCK_16_MHZ
Definition T32CZ20_spi.h:355
@ SPI_CTRL_CLOCK_125_KHZ
Definition T32CZ20_spi.h:362
@ SPI_CTRL_CLOCK_4_MHZ
Definition T32CZ20_spi.h:357
@ SPI_CTRL_CLOCK_8_MHZ
Definition T32CZ20_spi.h:356
@ SPI_CTRL_CLOCK_500_KHZ
Definition T32CZ20_spi.h:360
@ SPI_CTRL_CLOCK_2_MHZ
Definition T32CZ20_spi.h:358
@ SPI_CTRL_CLOCK_1_MHZ
Definition T32CZ20_spi.h:359
the struct we use so we can address registers using field names
Definition T32CM11_spi.h:224
__IO uint32_t epd_function
Definition T32CZ20_spi.h:170
__IO uint32_t interrupt_clear
Definition T32CZ20_spi.h:178
__I uint32_t reserved_1
Definition T32CZ20_spi.h:191
pin type
Definition tr_hal_platform.h:23
Definition T32CM11_spi.h:484