init

Dependencies:   aconno_I2C Lis2dh12 WatchdogTimer

Committer:
pathfindr
Date:
Mon Feb 17 23:24:52 2020 +0000
Revision:
58:8d4a354816b1
Parent:
51:9078e6928412
usb

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pathfindr 36:8e359069192b 1 #include "NRFuart.h"
pathfindr 36:8e359069192b 2
pathfindr 36:8e359069192b 3 void NRFuart_init_nohwfc() {
pathfindr 36:8e359069192b 4 if(NRF_UART0->ENABLE == UART_ENABLE_ENABLE_Disabled) {
pathfindr 36:8e359069192b 5 nrf_gpio_cfg_output(PN_UART_TX);
pathfindr 36:8e359069192b 6 nrf_gpio_cfg_input(PN_UART_RX, NRF_GPIO_PIN_NOPULL);
pathfindr 36:8e359069192b 7 NRF_UART0->PSELTXD = PN_UART_TX;
pathfindr 36:8e359069192b 8 NRF_UART0->PSELRXD = PN_UART_RX;
pathfindr 36:8e359069192b 9 NRF_UART0->CONFIG = (UART_CONFIG_PARITY_Excluded << UART_CONFIG_PARITY_Pos) | UART_CONFIG_HWFC_Disabled;
pathfindr 36:8e359069192b 10 NRF_UART0->BAUDRATE = NRF_UART_BAUDRATE_115200;
pathfindr 36:8e359069192b 11 NRF_UART0->ENABLE = UART_ENABLE_ENABLE_Enabled;
pathfindr 36:8e359069192b 12 NRF_UART0->EVENTS_RXDRDY = 0;
pathfindr 36:8e359069192b 13 NRF_UART0->EVENTS_TXDRDY = 0;
pathfindr 36:8e359069192b 14 NRF_UART0->EVENTS_ERROR = 0;
pathfindr 36:8e359069192b 15 NRF_UART0->EVENTS_TXDRDY = 0;
pathfindr 36:8e359069192b 16 NRF_UART0->TASKS_STARTRX = 1;
pathfindr 36:8e359069192b 17 NRF_UART0->TASKS_STARTTX = 1;
pathfindr 36:8e359069192b 18 //NRF_UART0->INTENCLR = 0xffffffffUL;
pathfindr 36:8e359069192b 19 //NRF_UART0->INTENSET = UART_INTENSET_RXDRDY_Msk; //or
pathfindr 51:9078e6928412 20 //NRF_UART0->INTENSET = (UART_INTENSET_RXDRDY_Set << UART_INTENSET_RXDRDY_Pos) |
pathfindr 51:9078e6928412 21 // (UART_INTENSET_TXDRDY_Set << UART_INTENSET_TXDRDY_Pos) |
pathfindr 51:9078e6928412 22 // (UART_INTENSET_ERROR_Set << UART_INTENSET_ERROR_Pos);
pathfindr 36:8e359069192b 23 //NVIC_ClearPendingIRQ(UART0_IRQn);
pathfindr 36:8e359069192b 24 //NVIC_SetPriority(UART0_IRQn, 1); //3
pathfindr 36:8e359069192b 25 //NVIC_EnableIRQ(UART0_IRQn);
pathfindr 36:8e359069192b 26 //NVIC_SetVector(UART0_IRQn, (uint32_t) UART0_IRQHandler);
pathfindr 36:8e359069192b 27 }
pathfindr 37:505ef618f06c 28 };
pathfindr 37:505ef618f06c 29 void NRFuart_init_hwfc() {
pathfindr 37:505ef618f06c 30 if(NRF_UART0->ENABLE == UART_ENABLE_ENABLE_Disabled) {
pathfindr 37:505ef618f06c 31 nrf_gpio_cfg_output(PN_UART_TX);
pathfindr 37:505ef618f06c 32 nrf_gpio_cfg_input(PN_UART_RX, NRF_GPIO_PIN_NOPULL);
pathfindr 37:505ef618f06c 33 NRF_UART0->PSELTXD = PN_UART_TX;
pathfindr 37:505ef618f06c 34 NRF_UART0->PSELRXD = PN_UART_RX;
pathfindr 37:505ef618f06c 35 NRF_UART0->PSELCTS = PN_UART_CTS;
pathfindr 37:505ef618f06c 36 NRF_UART0->PSELRTS = PN_UART_RTS;
pathfindr 37:505ef618f06c 37 NRF_UART0->CONFIG = (UART_CONFIG_PARITY_Excluded << UART_CONFIG_PARITY_Pos) | UART_CONFIG_HWFC_Enabled;
pathfindr 37:505ef618f06c 38 NRF_UART0->BAUDRATE = NRF_UART_BAUDRATE_115200;
pathfindr 37:505ef618f06c 39 NRF_UART0->ENABLE = UART_ENABLE_ENABLE_Enabled;
pathfindr 37:505ef618f06c 40 NRF_UART0->EVENTS_RXDRDY = 0;
pathfindr 37:505ef618f06c 41 NRF_UART0->EVENTS_TXDRDY = 0;
pathfindr 37:505ef618f06c 42 NRF_UART0->EVENTS_ERROR = 0;
pathfindr 37:505ef618f06c 43 NRF_UART0->EVENTS_TXDRDY = 0;
pathfindr 37:505ef618f06c 44 NRF_UART0->TASKS_STARTRX = 1;
pathfindr 37:505ef618f06c 45 NRF_UART0->TASKS_STARTTX = 1;
pathfindr 37:505ef618f06c 46 //NRF_UART0->INTENCLR = 0xffffffffUL;
pathfindr 37:505ef618f06c 47 //NRF_UART0->INTENSET = UART_INTENSET_RXDRDY_Msk; //or
pathfindr 51:9078e6928412 48 //NRF_UART0->INTENSET = (UART_INTENSET_RXDRDY_Set << UART_INTENSET_RXDRDY_Pos) |
pathfindr 51:9078e6928412 49 // (UART_INTENSET_TXDRDY_Set << UART_INTENSET_TXDRDY_Pos) |
pathfindr 51:9078e6928412 50 // (UART_INTENSET_ERROR_Set << UART_INTENSET_ERROR_Pos);
pathfindr 37:505ef618f06c 51 //NVIC_ClearPendingIRQ(UART0_IRQn);
pathfindr 37:505ef618f06c 52 //NVIC_SetPriority(UART0_IRQn, 1); //3
pathfindr 37:505ef618f06c 53 //NVIC_EnableIRQ(UART0_IRQn);
pathfindr 37:505ef618f06c 54 //NVIC_SetVector(UART0_IRQn, (uint32_t) UART0_IRQHandler);
pathfindr 37:505ef618f06c 55 }
pathfindr 36:8e359069192b 56 };
pathfindr 36:8e359069192b 57 void NRFuart_uninit() {
pathfindr 36:8e359069192b 58 if (NRF_UART0->ENABLE == UART_ENABLE_ENABLE_Enabled) {
pathfindr 36:8e359069192b 59 NVIC_DisableIRQ(UART0_IRQn);
pathfindr 36:8e359069192b 60 NRF_UART0->INTENCLR = 0xffffffffUL;
pathfindr 36:8e359069192b 61 NRF_UART0->TASKS_STOPRX = 1;
pathfindr 36:8e359069192b 62 NRF_UART0->TASKS_STOPTX = 1;
pathfindr 36:8e359069192b 63 NRF_UART0->ENABLE = UART_ENABLE_ENABLE_Disabled;
pathfindr 36:8e359069192b 64 NRF_UART0->PSELTXD = 0xFFFFFFFF;
pathfindr 36:8e359069192b 65 NRF_UART0->PSELRXD = 0xFFFFFFFF;
pathfindr 36:8e359069192b 66 NRF_UART0->PSELRTS = 0xFFFFFFFF;
pathfindr 36:8e359069192b 67 NRF_UART0->PSELCTS = 0xFFFFFFFF;
pathfindr 36:8e359069192b 68 }
pathfindr 36:8e359069192b 69 };
pathfindr 36:8e359069192b 70 void NRFuart_putc(char byte) {
pathfindr 36:8e359069192b 71 if (!NRF_UART0->ENABLE) NRFuart_init_nohwfc();
pathfindr 36:8e359069192b 72 NRF_UART0->TXD = byte;
pathfindr 36:8e359069192b 73 uint32_t safetycounter = 0;
pathfindr 36:8e359069192b 74 while(NRF_UART0->EVENTS_TXDRDY != 1 && safetycounter < 10000) {
pathfindr 36:8e359069192b 75 safetycounter ++; // Wait for the current TXD data to be sent.
pathfindr 36:8e359069192b 76 }
pathfindr 36:8e359069192b 77 NRF_UART0->EVENTS_TXDRDY = 0;
pathfindr 36:8e359069192b 78 };
pathfindr 36:8e359069192b 79 void NRFuart_puts(char* bytes) {
pathfindr 36:8e359069192b 80 if (!NRF_UART0->ENABLE) NRFuart_init_nohwfc();
pathfindr 37:505ef618f06c 81 uint32_t safetycounter = 0;
pathfindr 37:505ef618f06c 82 for(int i = 0; bytes[i] != 0x00; i++) {
pathfindr 36:8e359069192b 83 NRFuart_putc(bytes[i]);
pathfindr 37:505ef618f06c 84 safetycounter ++;
pathfindr 37:505ef618f06c 85 if (safetycounter > 10000) break;
pathfindr 36:8e359069192b 86 }
pathfindr 36:8e359069192b 87 };
pathfindr 36:8e359069192b 88 void NRFuart_puts_debug(char* bytes) {
pathfindr 36:8e359069192b 89 if (!NRF_UART0->ENABLE) NRFuart_init_nohwfc();
pathfindr 37:505ef618f06c 90 uint32_t safetycounter = 0;
pathfindr 37:505ef618f06c 91 for(int i = 0; bytes[i] != 0x00; i++) {
pathfindr 36:8e359069192b 92 NRFuart_putc(bytes[i]);
pathfindr 37:505ef618f06c 93 safetycounter ++;
pathfindr 37:505ef618f06c 94 if (safetycounter > 10000) break;
pathfindr 36:8e359069192b 95 }
pathfindr 36:8e359069192b 96 NRFuart_putc('\n');
pathfindr 36:8e359069192b 97 };
pathfindr 36:8e359069192b 98 void debug_prep(){
pathfindr 37:505ef618f06c 99 memset(GLOBAL_debug_buffer, 0x00, sizeof(GLOBAL_debug_buffer));
pathfindr 36:8e359069192b 100 }
pathfindr 36:8e359069192b 101 void debug_exe(){
pathfindr 36:8e359069192b 102 NRFuart_puts_debug(GLOBAL_debug_buffer);
pathfindr 36:8e359069192b 103 }
pathfindr 36:8e359069192b 104 char NRFuart_getc() {
pathfindr 36:8e359069192b 105 if (!NRF_UART0->ENABLE) NRFuart_init_nohwfc();
pathfindr 36:8e359069192b 106 uint32_t safetycounter = 0;
pathfindr 36:8e359069192b 107 while(NRF_UART0->EVENTS_RXDRDY != 1 && safetycounter < 10000){
pathfindr 36:8e359069192b 108 safetycounter ++;
pathfindr 36:8e359069192b 109 }
pathfindr 36:8e359069192b 110 NRF_UART0->EVENTS_RXDRDY = 0;
pathfindr 36:8e359069192b 111 return (uint8_t)NRF_UART0->RXD;
pathfindr 36:8e359069192b 112 };
pathfindr 36:8e359069192b 113 char* NRFuart_gets(char terminator) {
pathfindr 36:8e359069192b 114 if (!NRF_UART0->ENABLE) NRFuart_init_nohwfc();
pathfindr 36:8e359069192b 115 static char buffer[200];
pathfindr 36:8e359069192b 116 int charindex = 0;
pathfindr 36:8e359069192b 117 memset(buffer,0x00,sizeof(buffer));
pathfindr 37:505ef618f06c 118 uint32_t safetycounter = 0;
pathfindr 37:505ef618f06c 119 while(1 && safetycounter < 10000) {
pathfindr 36:8e359069192b 120 if (NRF_UART0->EVENTS_RXDRDY == 0) {
pathfindr 37:505ef618f06c 121 safetycounter ++;
pathfindr 36:8e359069192b 122 //Nothing available from the UART.
pathfindr 36:8e359069192b 123 continue;
pathfindr 36:8e359069192b 124 } else {
pathfindr 36:8e359069192b 125 char inbyte = NRFuart_getc();
pathfindr 36:8e359069192b 126 if (inbyte == terminator) {
pathfindr 36:8e359069192b 127 break;
pathfindr 36:8e359069192b 128 } else {
pathfindr 36:8e359069192b 129 buffer[charindex] = inbyte;
pathfindr 36:8e359069192b 130 charindex++;
pathfindr 36:8e359069192b 131 }
pathfindr 36:8e359069192b 132 }
pathfindr 36:8e359069192b 133 }
pathfindr 36:8e359069192b 134 buffer[charindex] = '\n'; //make sure we end with whitespace lf
pathfindr 36:8e359069192b 135 return buffer;
pathfindr 36:8e359069192b 136 };
pathfindr 36:8e359069192b 137 void NRFuart_flush() {
pathfindr 36:8e359069192b 138 if (!NRF_UART0->ENABLE) NRFuart_init_nohwfc();
pathfindr 36:8e359069192b 139 uint32_t safetycounter = 0;
pathfindr 36:8e359069192b 140 while (NRFuart_readable() && safetycounter < 10000) {
pathfindr 36:8e359069192b 141 safetycounter ++;
pathfindr 51:9078e6928412 142 char char1 = NRFuart_getc();
pathfindr 36:8e359069192b 143 }
pathfindr 36:8e359069192b 144 };
pathfindr 36:8e359069192b 145 bool NRFuart_readable() {
pathfindr 36:8e359069192b 146 if (!NRF_UART0->ENABLE) NRFuart_init_nohwfc();
pathfindr 36:8e359069192b 147 return (NRF_UART0->EVENTS_RXDRDY == 1);
pathfindr 36:8e359069192b 148 };