init

Dependencies:   aconno_I2C Lis2dh12 WatchdogTimer

Committer:
pathfindr
Date:
Tue Jan 15 11:19:41 2019 +0000
Revision:
36:8e359069192b
Child:
37:505ef618f06c
update

Who changed what in which revision?

UserRevisionLine numberNew 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 };