init
Dependencies: aconno_I2C Lis2dh12 WatchdogTimer
NRFuart.cpp@36:8e359069192b, 2019-01-15 (annotated)
- Committer:
- pathfindr
- Date:
- Tue Jan 15 11:19:41 2019 +0000
- Revision:
- 36:8e359069192b
- Child:
- 37:505ef618f06c
update
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pathfindr | 36:8e359069192b | 1 | //bool NRFuart_enabled = false; |
pathfindr | 36:8e359069192b | 2 | #include "NRFuart.h" |
pathfindr | 36:8e359069192b | 3 | |
pathfindr | 36:8e359069192b | 4 | void NRFuart_init_nohwfc() { |
pathfindr | 36:8e359069192b | 5 | if(NRF_UART0->ENABLE == UART_ENABLE_ENABLE_Disabled) { |
pathfindr | 36:8e359069192b | 6 | //Configure UART0 pins. |
pathfindr | 36:8e359069192b | 7 | nrf_gpio_cfg_output(PN_UART_TX); |
pathfindr | 36:8e359069192b | 8 | nrf_gpio_cfg_input(PN_UART_RX, NRF_GPIO_PIN_NOPULL); |
pathfindr | 36:8e359069192b | 9 | NRF_UART0->PSELTXD = PN_UART_TX; |
pathfindr | 36:8e359069192b | 10 | NRF_UART0->PSELRXD = PN_UART_RX; |
pathfindr | 36:8e359069192b | 11 | NRF_UART0->CONFIG = (UART_CONFIG_PARITY_Excluded << UART_CONFIG_PARITY_Pos) | UART_CONFIG_HWFC_Disabled; |
pathfindr | 36:8e359069192b | 12 | NRF_UART0->BAUDRATE = NRF_UART_BAUDRATE_115200; |
pathfindr | 36:8e359069192b | 13 | NRF_UART0->ENABLE = UART_ENABLE_ENABLE_Enabled; |
pathfindr | 36:8e359069192b | 14 | NRF_UART0->EVENTS_RXDRDY = 0; |
pathfindr | 36:8e359069192b | 15 | NRF_UART0->EVENTS_TXDRDY = 0; |
pathfindr | 36:8e359069192b | 16 | NRF_UART0->EVENTS_ERROR = 0; |
pathfindr | 36:8e359069192b | 17 | NRF_UART0->EVENTS_TXDRDY = 0; |
pathfindr | 36:8e359069192b | 18 | NRF_UART0->TASKS_STARTRX = 1; |
pathfindr | 36:8e359069192b | 19 | NRF_UART0->TASKS_STARTTX = 1; |
pathfindr | 36:8e359069192b | 20 | //NRF_UART0->INTENCLR = 0xffffffffUL; |
pathfindr | 36:8e359069192b | 21 | //NRF_UART0->INTENSET = UART_INTENSET_RXDRDY_Msk; //or |
pathfindr | 36:8e359069192b | 22 | /*NRF_UART0->INTENSET = (UART_INTENSET_RXDRDY_Set << UART_INTENSET_RXDRDY_Pos) | |
pathfindr | 36:8e359069192b | 23 | (UART_INTENSET_TXDRDY_Set << UART_INTENSET_TXDRDY_Pos) | |
pathfindr | 36:8e359069192b | 24 | (UART_INTENSET_ERROR_Set << UART_INTENSET_ERROR_Pos);*/ |
pathfindr | 36:8e359069192b | 25 | //NVIC_ClearPendingIRQ(UART0_IRQn); |
pathfindr | 36:8e359069192b | 26 | //NVIC_SetPriority(UART0_IRQn, 1); //3 |
pathfindr | 36:8e359069192b | 27 | //NVIC_EnableIRQ(UART0_IRQn); |
pathfindr | 36:8e359069192b | 28 | //NVIC_SetVector(UART0_IRQn, (uint32_t) UART0_IRQHandler); |
pathfindr | 36:8e359069192b | 29 | } |
pathfindr | 36:8e359069192b | 30 | //NRFuart_enabled = true; |
pathfindr | 36:8e359069192b | 31 | }; |
pathfindr | 36:8e359069192b | 32 | void NRFuart_uninit() { |
pathfindr | 36:8e359069192b | 33 | if (NRF_UART0->ENABLE == UART_ENABLE_ENABLE_Enabled) { |
pathfindr | 36:8e359069192b | 34 | NVIC_DisableIRQ(UART0_IRQn); |
pathfindr | 36:8e359069192b | 35 | NRF_UART0->INTENCLR = 0xffffffffUL; |
pathfindr | 36:8e359069192b | 36 | NRF_UART0->TASKS_STOPRX = 1; |
pathfindr | 36:8e359069192b | 37 | NRF_UART0->TASKS_STOPTX = 1; |
pathfindr | 36:8e359069192b | 38 | NRF_UART0->ENABLE = UART_ENABLE_ENABLE_Disabled; |
pathfindr | 36:8e359069192b | 39 | NRF_UART0->PSELTXD = 0xFFFFFFFF; |
pathfindr | 36:8e359069192b | 40 | NRF_UART0->PSELRXD = 0xFFFFFFFF; |
pathfindr | 36:8e359069192b | 41 | NRF_UART0->PSELRTS = 0xFFFFFFFF; |
pathfindr | 36:8e359069192b | 42 | NRF_UART0->PSELCTS = 0xFFFFFFFF; |
pathfindr | 36:8e359069192b | 43 | //NRFuart_enabled = false; |
pathfindr | 36:8e359069192b | 44 | } |
pathfindr | 36:8e359069192b | 45 | }; |
pathfindr | 36:8e359069192b | 46 | void NRFuart_putc(char byte) { |
pathfindr | 36:8e359069192b | 47 | if (!NRF_UART0->ENABLE) NRFuart_init_nohwfc(); |
pathfindr | 36:8e359069192b | 48 | NRF_UART0->TXD = byte; |
pathfindr | 36:8e359069192b | 49 | uint32_t safetycounter = 0; |
pathfindr | 36:8e359069192b | 50 | while(NRF_UART0->EVENTS_TXDRDY != 1 && safetycounter < 10000) { |
pathfindr | 36:8e359069192b | 51 | safetycounter ++; // Wait for the current TXD data to be sent. |
pathfindr | 36:8e359069192b | 52 | } |
pathfindr | 36:8e359069192b | 53 | NRF_UART0->EVENTS_TXDRDY = 0; |
pathfindr | 36:8e359069192b | 54 | }; |
pathfindr | 36:8e359069192b | 55 | void NRFuart_puts(char* bytes) { |
pathfindr | 36:8e359069192b | 56 | if (!NRF_UART0->ENABLE) NRFuart_init_nohwfc(); |
pathfindr | 36:8e359069192b | 57 | for(int i = 0; bytes[i] != '\0'; i++) { |
pathfindr | 36:8e359069192b | 58 | NRFuart_putc(bytes[i]); |
pathfindr | 36:8e359069192b | 59 | } |
pathfindr | 36:8e359069192b | 60 | }; |
pathfindr | 36:8e359069192b | 61 | void NRFuart_puts_debug(char* bytes) { |
pathfindr | 36:8e359069192b | 62 | if (!NRF_UART0->ENABLE) NRFuart_init_nohwfc(); |
pathfindr | 36:8e359069192b | 63 | for(int i = 0; bytes[i] != '\0'; i++) { |
pathfindr | 36:8e359069192b | 64 | NRFuart_putc(bytes[i]); |
pathfindr | 36:8e359069192b | 65 | } |
pathfindr | 36:8e359069192b | 66 | NRFuart_putc('\n'); |
pathfindr | 36:8e359069192b | 67 | }; |
pathfindr | 36:8e359069192b | 68 | void debug_prep(){ |
pathfindr | 36:8e359069192b | 69 | memset(GLOBAL_debug_buffer, '\0', sizeof(GLOBAL_debug_buffer)); |
pathfindr | 36:8e359069192b | 70 | } |
pathfindr | 36:8e359069192b | 71 | void debug_exe(){ |
pathfindr | 36:8e359069192b | 72 | NRFuart_puts_debug(GLOBAL_debug_buffer); |
pathfindr | 36:8e359069192b | 73 | } |
pathfindr | 36:8e359069192b | 74 | char NRFuart_getc() { |
pathfindr | 36:8e359069192b | 75 | if (!NRF_UART0->ENABLE) NRFuart_init_nohwfc(); |
pathfindr | 36:8e359069192b | 76 | uint32_t safetycounter = 0; |
pathfindr | 36:8e359069192b | 77 | while(NRF_UART0->EVENTS_RXDRDY != 1 && safetycounter < 10000){ |
pathfindr | 36:8e359069192b | 78 | safetycounter ++; |
pathfindr | 36:8e359069192b | 79 | } |
pathfindr | 36:8e359069192b | 80 | NRF_UART0->EVENTS_RXDRDY = 0; |
pathfindr | 36:8e359069192b | 81 | return (uint8_t)NRF_UART0->RXD; |
pathfindr | 36:8e359069192b | 82 | }; |
pathfindr | 36:8e359069192b | 83 | char* NRFuart_gets(char terminator) { |
pathfindr | 36:8e359069192b | 84 | if (!NRF_UART0->ENABLE) NRFuart_init_nohwfc(); |
pathfindr | 36:8e359069192b | 85 | static char buffer[200]; |
pathfindr | 36:8e359069192b | 86 | int charindex = 0; |
pathfindr | 36:8e359069192b | 87 | memset(buffer,0x00,sizeof(buffer)); |
pathfindr | 36:8e359069192b | 88 | while(1) { |
pathfindr | 36:8e359069192b | 89 | if (NRF_UART0->EVENTS_RXDRDY == 0) { |
pathfindr | 36:8e359069192b | 90 | //Nothing available from the UART. |
pathfindr | 36:8e359069192b | 91 | continue; |
pathfindr | 36:8e359069192b | 92 | } else { |
pathfindr | 36:8e359069192b | 93 | char inbyte = NRFuart_getc(); |
pathfindr | 36:8e359069192b | 94 | if (inbyte == terminator) { |
pathfindr | 36:8e359069192b | 95 | break; |
pathfindr | 36:8e359069192b | 96 | } else { |
pathfindr | 36:8e359069192b | 97 | buffer[charindex] = inbyte; |
pathfindr | 36:8e359069192b | 98 | charindex++; |
pathfindr | 36:8e359069192b | 99 | } |
pathfindr | 36:8e359069192b | 100 | } |
pathfindr | 36:8e359069192b | 101 | } |
pathfindr | 36:8e359069192b | 102 | buffer[charindex] = '\n'; //make sure we end with whitespace lf |
pathfindr | 36:8e359069192b | 103 | return buffer; |
pathfindr | 36:8e359069192b | 104 | }; |
pathfindr | 36:8e359069192b | 105 | void NRFuart_flush() { |
pathfindr | 36:8e359069192b | 106 | if (!NRF_UART0->ENABLE) NRFuart_init_nohwfc(); |
pathfindr | 36:8e359069192b | 107 | //THIS HASNT BEEN TESTED |
pathfindr | 36:8e359069192b | 108 | char char1 = 0; |
pathfindr | 36:8e359069192b | 109 | uint32_t safetycounter = 0; |
pathfindr | 36:8e359069192b | 110 | while (NRFuart_readable() && safetycounter < 10000) { |
pathfindr | 36:8e359069192b | 111 | safetycounter ++; |
pathfindr | 36:8e359069192b | 112 | char1 = NRFuart_getc(); |
pathfindr | 36:8e359069192b | 113 | } |
pathfindr | 36:8e359069192b | 114 | }; |
pathfindr | 36:8e359069192b | 115 | bool NRFuart_readable() { |
pathfindr | 36:8e359069192b | 116 | if (!NRF_UART0->ENABLE) NRFuart_init_nohwfc(); |
pathfindr | 36:8e359069192b | 117 | return (NRF_UART0->EVENTS_RXDRDY == 1); |
pathfindr | 36:8e359069192b | 118 | }; |