22 #include "common_util.h" 25 #include "nrf_assert.h" 29 #include "isr_manager.h" 35 #define SPIM_ID CONCAT_2(NRF_SPIM,SPIM_USED) 37 #define SPIM_IRQN SPIM_IRQN_a(SPIM_USED) 38 #define SPIM_IRQ_Handler SPIM_IRQ_Handler_a(SPIM_USED) 40 #define SPIM_IRQ_Handler_a(n) SPIM_IRQ_Handler_b(n) 41 #define SPIM_IRQ_Handler_b(n) SPIM##n##_SPIS##n##_TWIM##n##_TWIS##n##_SPI##n##_TWI##n##_IRQHandler 43 #define SPIM_IRQN_a(n) SPIM_IRQN_b(n) 44 #define SPIM_IRQN_b(n) SPIM##n##_SPIS##n##_TWIM##n##_TWIS##n##_SPI##n##_TWI##n##_IRQn 48 static uint32_t csBar = 0;
51 static uint32_t intr_enabled = 0;
54 static volatile bool mod_is_busy =
false;
57 void (*rx_done) (uint32_t last_byte_no);
58 void (*tx_done) (uint32_t last_byte_no);
62 hal_gpio_cfg_output (spim_init->
csBar_pin, 1);
63 SPIM_ID->TASKS_SUSPEND = 1;
64 SPIM_ID->TASKS_STOP = 1;
66 SPIM_ID->FREQUENCY = spim_init->
freq;
67 SPIM_ID->PSEL.MISO = spim_init->
miso_pin;
68 SPIM_ID->PSEL.MOSI = spim_init->
mosi_pin;
69 SPIM_ID->PSEL.SCK = spim_init->
sck_pin;
71 intr_enabled = spim_init->
en_intr;
72 SPIM_ID->INTENSET = spim_init->
en_intr | SPIM_INTENSET_END_Msk;
73 NVIC_SetPriority (SPIM_IRQN, APP_IRQ_PRIORITY_MID);
74 NVIC_EnableIRQ (SPIM_IRQN);
75 log_printf(
"Intr En : %d\n", intr_enabled);
79 NVIC_EnableIRQ (SPIM_IRQN);
92 SPIM_ID->TXD.LIST = 1;
93 SPIM_ID->RXD.LIST = 1;
99 SPIM_ID->ENABLE = (SPIM_ENABLE_ENABLE_Disabled << SPIM_ENABLE_ENABLE_Pos) &
100 SPIM_ENABLE_ENABLE_Msk;
101 SPIM_ID->INTENCLR = intr_enabled;
102 SPIM_ID->TASKS_SUSPEND = 1;
103 SPIM_ID->TASKS_STOP = 1;
105 NVIC_DisableIRQ (SPIM_IRQN);
108 void hal_spim_tx_rx (
void * p_tx_data, uint32_t tx_len,
void * p_rx_data, uint32_t rx_len)
110 if(p_tx_data == NULL)
114 if(p_rx_data == NULL)
118 hal_gpio_pin_clear (csBar);
120 SPIM_ID->EVENTS_ENDTX = 0;
121 SPIM_ID->TXD.PTR = (uint32_t) p_tx_data;
122 SPIM_ID->TXD.MAXCNT = tx_len;
124 SPIM_ID->EVENTS_ENDRX = 0;
125 SPIM_ID->RXD.PTR = (uint32_t) p_rx_data;
126 SPIM_ID->RXD.MAXCNT = rx_len;
128 SPIM_ID->ENABLE = (SPIM_ENABLE_ENABLE_Enabled << SPIM_ENABLE_ENABLE_Pos) &
129 SPIM_ENABLE_ENABLE_Msk;
131 SPIM_ID->TASKS_START = 1;
132 (void) SPIM_ID->TASKS_START;
137 return (uint32_t)mod_is_busy;
141 void hal_spim_Handler (
void)
143 void SPIM_IRQ_Handler (
void)
146 if(SPIM_ID->EVENTS_END == 1)
149 SPIM_ID->EVENTS_END = 0;
152 hal_gpio_pin_set (csBar);
157 SPIM_ID->EVENTS_ENDTX = 0;
161 tx_done(SPIM_ID->TXD.AMOUNT);
167 SPIM_ID->EVENTS_ENDRX = 0;
171 rx_done(SPIM_ID->RXD.AMOUNT);
hal_spim_byte_order_t byte_order
void hal_spim_init(hal_spim_init_t *spim_init)
Function to Initiate the SPIM module.
app_irq_priority_t irq_priority
hal_spim_spi_mode_t spi_mode
void hal_spim_tx_rx(void *p_tx_data, uint32_t tx_len, void *p_rx_data, uint32_t rx_len)
Function to start communication.
#define ASSERT(expression)
Macro for runtime assertion of an expression. If the expression is false the assert_nrf_callback func...
void(* rx_done_handler)(uint32_t bytes_last_rx)
void hal_spim_deinit()
Function to de-initialize the SPIM module.
void(* tx_done_handler)(uint32_t bytes_last_tx)
uint32_t hal_spim_is_busy()
Function to check if SIPM module is available or not.