23 #include "tinyprintf.h" 27 #include "isr_manager.h" 34 #define UART_ID CONCAT_2(NRF_UART,UART_USED) 35 #define UART_IRQN UART_IRQN_a(UART_USED) 36 #define UART_IRQ_Handler UART_IRQ_Handler_a(UART_USED) 38 #define UART_IRQN_a(n) UART_IRQN_b(n) 39 #define UART_IRQN_b(n) UART##n##_IRQn 41 #define UART_IRQ_Handler_a(n) UART_IRQ_Handler_b(n) 42 #define UART_IRQ_Handler_b(n) UART##n##_IRQHandler 45 #if defined NRF52832 || defined NRF52810 46 #define UART_ID CONCAT_2(NRF_UARTE,UART_USED) 47 #define UART_IRQN UART_IRQN_a(UART_USED) 48 #define UART_IRQ_Handler UART_IRQ_Handler_a(UART_USED) 50 #define UART_IRQN_a(n) UART_IRQN_b(n) 51 #define UART_IRQN_b(n) UARTE##n##_UART##n##_IRQn 53 #define UART_IRQ_Handler_a(n) UART_IRQ_Handler_b(n) 54 #define UART_IRQ_Handler_b(n) UARTE##n##_UART##n##_IRQHandler 59 #define BUFFER_SIZE 128 62 uint8_t rx_buffer[BUFFER_SIZE];
65 void (*rx_handler)(uint8_t * ptr);
72 static void rx_collect(uint8_t rx_data)
74 static uint32_t count = 0;
77 if (count < BUFFER_SIZE - 1)
79 rx_buffer[count] = rx_data;
85 rx_buffer[count] =
'\0';
86 if (rx_handler != NULL)
88 rx_handler(rx_buffer);
99 void hal_uart_Handler ()
101 void UART_IRQ_Handler (
void)
106 while (UART_ID->EVENTS_RXDRDY != 1)
110 UART_ID->EVENTS_RXDRDY = 0;
112 rx_collect((uint8_t) (*((uint32_t *)(0x40002518))));
117 (*((uint32_t *)(0x4000251C))) = (uint8_t) cr;
118 UART_ID->EVENTS_TXDRDY = 0;
119 UART_ID->TASKS_STARTTX = 1;
121 while (UART_ID->EVENTS_TXDRDY != 1)
125 UART_ID->EVENTS_TXDRDY = 0;
126 UART_ID->TASKS_STOPTX = 1;
134 void printf_callback(
void* str_end,
char ch)
136 if((uint32_t) str_end != START_TX)
148 hal_gpio_cfg_output(TX_PIN_NUMBER, 1);
150 (*((uint32_t *)(0x4000250C))) = TX_PIN_NUMBER;
151 (*((uint32_t *)(0x40002514))) = RX_PIN_NUMBER;
160 hal_gpio_cfg_output(RTS_PIN_NUMBER, 1);
162 (*((uint32_t *)(0x40002508))) = RTS_PIN_NUMBER;
163 (*((uint32_t *)(0x40002510))) = CTS_PIN_NUMBER;
170 UART_ID->BAUDRATE = (baud);
173 UART_ID->ENABLE = (0x04);
175 UART_ID->INTENCLR = 0xFFFFFFFF;
177 init_printf((
void *) !(START_TX), printf_callback);
181 UART_ID->EVENTS_RXDRDY = 0;
183 rx_handler = handler;
186 UART_ID->INTENSET = (1 << 2);
188 NVIC_SetPriority(UART_IRQN, APP_IRQ_PRIORITY_LOW);
189 NVIC_EnableIRQ(UART_IRQN);
191 UART_ID->TASKS_STARTRX = 1;
#define CRITICAL_REGION_ENTER()
Macro for entering a critical region.
#define CRITICAL_REGION_EXIT()
Macro for leaving a critical region.
void hal_uart_init(hal_uart_baud_t baud, void(*handler)(uint8_t *ptr))
void hal_uart_putchar(uint8_t cr)
Send a single character through UART This function is used by printf_callback so that printf can be u...