Mouse code for the MacroRat

Dependencies:   ITG3200 QEI

Committer:
sahilmgandhi
Date:
Sat Jun 03 00:22:44 2017 +0000
Revision:
46:b156ef445742
Parent:
18:6a4db94011d3
Final code for internal battlebot competition.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sahilmgandhi 18:6a4db94011d3 1 /* mbed Microcontroller Library
sahilmgandhi 18:6a4db94011d3 2 * Copyright (c) 2013 Nordic Semiconductor
sahilmgandhi 18:6a4db94011d3 3 *
sahilmgandhi 18:6a4db94011d3 4 * Licensed under the Apache License, Version 2.0 (the "License");
sahilmgandhi 18:6a4db94011d3 5 * you may not use this file except in compliance with the License.
sahilmgandhi 18:6a4db94011d3 6 * You may obtain a copy of the License at
sahilmgandhi 18:6a4db94011d3 7 *
sahilmgandhi 18:6a4db94011d3 8 * http://www.apache.org/licenses/LICENSE-2.0
sahilmgandhi 18:6a4db94011d3 9 *
sahilmgandhi 18:6a4db94011d3 10 * Unless required by applicable law or agreed to in writing, software
sahilmgandhi 18:6a4db94011d3 11 * distributed under the License is distributed on an "AS IS" BASIS,
sahilmgandhi 18:6a4db94011d3 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
sahilmgandhi 18:6a4db94011d3 13 * See the License for the specific language governing permissions and
sahilmgandhi 18:6a4db94011d3 14 * limitations under the License.
sahilmgandhi 18:6a4db94011d3 15 */
sahilmgandhi 18:6a4db94011d3 16 // math.h required for floating point operations for baud rate calculation
sahilmgandhi 18:6a4db94011d3 17 //#include <math.h>
sahilmgandhi 18:6a4db94011d3 18 #include <string.h>
sahilmgandhi 18:6a4db94011d3 19 #include "mbed_assert.h"
sahilmgandhi 18:6a4db94011d3 20
sahilmgandhi 18:6a4db94011d3 21 #include "serial_api.h"
sahilmgandhi 18:6a4db94011d3 22 #include "cmsis.h"
sahilmgandhi 18:6a4db94011d3 23 #include "pinmap.h"
sahilmgandhi 18:6a4db94011d3 24
sahilmgandhi 18:6a4db94011d3 25 /******************************************************************************
sahilmgandhi 18:6a4db94011d3 26 * INITIALIZATION
sahilmgandhi 18:6a4db94011d3 27 ******************************************************************************/
sahilmgandhi 18:6a4db94011d3 28 #define UART_NUM 1
sahilmgandhi 18:6a4db94011d3 29
sahilmgandhi 18:6a4db94011d3 30 static uint32_t serial_irq_ids[UART_NUM] = {0};
sahilmgandhi 18:6a4db94011d3 31 static uart_irq_handler irq_handler;
sahilmgandhi 18:6a4db94011d3 32 static const int acceptedSpeeds[18][2] = {
sahilmgandhi 18:6a4db94011d3 33 {1200, UART_BAUDRATE_BAUDRATE_Baud1200},
sahilmgandhi 18:6a4db94011d3 34 {2400, UART_BAUDRATE_BAUDRATE_Baud2400},
sahilmgandhi 18:6a4db94011d3 35 {4800, UART_BAUDRATE_BAUDRATE_Baud4800},
sahilmgandhi 18:6a4db94011d3 36 {9600, UART_BAUDRATE_BAUDRATE_Baud9600},
sahilmgandhi 18:6a4db94011d3 37 {14400, UART_BAUDRATE_BAUDRATE_Baud14400},
sahilmgandhi 18:6a4db94011d3 38 {19200, UART_BAUDRATE_BAUDRATE_Baud19200},
sahilmgandhi 18:6a4db94011d3 39 {28800, UART_BAUDRATE_BAUDRATE_Baud28800},
sahilmgandhi 18:6a4db94011d3 40 {31250, (0x00800000UL) /* 31250 baud */},
sahilmgandhi 18:6a4db94011d3 41 {38400, UART_BAUDRATE_BAUDRATE_Baud38400},
sahilmgandhi 18:6a4db94011d3 42 {56000, (0x00E51000UL) /* 56000 baud */},
sahilmgandhi 18:6a4db94011d3 43 {57600, UART_BAUDRATE_BAUDRATE_Baud57600},
sahilmgandhi 18:6a4db94011d3 44 {76800, UART_BAUDRATE_BAUDRATE_Baud76800},
sahilmgandhi 18:6a4db94011d3 45 {115200, UART_BAUDRATE_BAUDRATE_Baud115200},
sahilmgandhi 18:6a4db94011d3 46 {230400, UART_BAUDRATE_BAUDRATE_Baud230400},
sahilmgandhi 18:6a4db94011d3 47 {250000, UART_BAUDRATE_BAUDRATE_Baud250000},
sahilmgandhi 18:6a4db94011d3 48 {460800, UART_BAUDRATE_BAUDRATE_Baud460800},
sahilmgandhi 18:6a4db94011d3 49 {921600, UART_BAUDRATE_BAUDRATE_Baud921600},
sahilmgandhi 18:6a4db94011d3 50 {1000000, UART_BAUDRATE_BAUDRATE_Baud1M}
sahilmgandhi 18:6a4db94011d3 51 };
sahilmgandhi 18:6a4db94011d3 52
sahilmgandhi 18:6a4db94011d3 53 int stdio_uart_inited = 0;
sahilmgandhi 18:6a4db94011d3 54 serial_t stdio_uart;
sahilmgandhi 18:6a4db94011d3 55
sahilmgandhi 18:6a4db94011d3 56
sahilmgandhi 18:6a4db94011d3 57 void serial_init(serial_t *obj, PinName tx, PinName rx) {
sahilmgandhi 18:6a4db94011d3 58 UARTName uart = UART_0;
sahilmgandhi 18:6a4db94011d3 59 obj->uart = (NRF_UART_Type *)uart;
sahilmgandhi 18:6a4db94011d3 60
sahilmgandhi 18:6a4db94011d3 61 //pin configurations --
sahilmgandhi 18:6a4db94011d3 62 NRF_GPIO->OUT |= (1 << tx);
sahilmgandhi 18:6a4db94011d3 63 NRF_GPIO->OUT |= (1 << RTS_PIN_NUMBER);
sahilmgandhi 18:6a4db94011d3 64 NRF_GPIO->DIR |= (1 << tx); //TX_PIN_NUMBER);
sahilmgandhi 18:6a4db94011d3 65 NRF_GPIO->DIR |= (1 << RTS_PIN_NUMBER);
sahilmgandhi 18:6a4db94011d3 66
sahilmgandhi 18:6a4db94011d3 67 NRF_GPIO->DIR &= ~(1 << rx); //RX_PIN_NUMBER);
sahilmgandhi 18:6a4db94011d3 68 NRF_GPIO->DIR &= ~(1 << CTS_PIN_NUMBER);
sahilmgandhi 18:6a4db94011d3 69
sahilmgandhi 18:6a4db94011d3 70
sahilmgandhi 18:6a4db94011d3 71 // set default baud rate and format
sahilmgandhi 18:6a4db94011d3 72 serial_baud (obj, 9600);
sahilmgandhi 18:6a4db94011d3 73 serial_format(obj, 8, ParityNone, 1);
sahilmgandhi 18:6a4db94011d3 74
sahilmgandhi 18:6a4db94011d3 75 obj->uart->ENABLE = (UART_ENABLE_ENABLE_Enabled << UART_ENABLE_ENABLE_Pos);
sahilmgandhi 18:6a4db94011d3 76 obj->uart->TASKS_STARTTX = 1;
sahilmgandhi 18:6a4db94011d3 77 obj->uart->TASKS_STARTRX = 1;
sahilmgandhi 18:6a4db94011d3 78 obj->uart->EVENTS_RXDRDY = 0;
sahilmgandhi 18:6a4db94011d3 79 // dummy write needed or TXDRDY trails write rather than leads write.
sahilmgandhi 18:6a4db94011d3 80 // pins are disconnected so nothing is physically transmitted on the wire
sahilmgandhi 18:6a4db94011d3 81 obj->uart->PSELTXD = 0xFFFFFFFF;
sahilmgandhi 18:6a4db94011d3 82 obj->uart->EVENTS_TXDRDY = 0;
sahilmgandhi 18:6a4db94011d3 83 obj->uart->TXD = 0;
sahilmgandhi 18:6a4db94011d3 84 while (obj->uart->EVENTS_TXDRDY != 1);
sahilmgandhi 18:6a4db94011d3 85
sahilmgandhi 18:6a4db94011d3 86 obj->index = 0;
sahilmgandhi 18:6a4db94011d3 87
sahilmgandhi 18:6a4db94011d3 88 obj->uart->PSELRTS = RTS_PIN_NUMBER;
sahilmgandhi 18:6a4db94011d3 89 obj->uart->PSELTXD = tx; //TX_PIN_NUMBER;
sahilmgandhi 18:6a4db94011d3 90 obj->uart->PSELCTS = CTS_PIN_NUMBER;
sahilmgandhi 18:6a4db94011d3 91 obj->uart->PSELRXD = rx; //RX_PIN_NUMBER;
sahilmgandhi 18:6a4db94011d3 92
sahilmgandhi 18:6a4db94011d3 93 // set rx/tx pins in PullUp mode
sahilmgandhi 18:6a4db94011d3 94 if (tx != NC) {
sahilmgandhi 18:6a4db94011d3 95 pin_mode(tx, PullUp);
sahilmgandhi 18:6a4db94011d3 96 }
sahilmgandhi 18:6a4db94011d3 97 if (rx != NC) {
sahilmgandhi 18:6a4db94011d3 98 pin_mode(rx, PullUp);
sahilmgandhi 18:6a4db94011d3 99 }
sahilmgandhi 18:6a4db94011d3 100
sahilmgandhi 18:6a4db94011d3 101 if (uart == STDIO_UART) {
sahilmgandhi 18:6a4db94011d3 102 stdio_uart_inited = 1;
sahilmgandhi 18:6a4db94011d3 103 memcpy(&stdio_uart, obj, sizeof(serial_t));
sahilmgandhi 18:6a4db94011d3 104 }
sahilmgandhi 18:6a4db94011d3 105 }
sahilmgandhi 18:6a4db94011d3 106
sahilmgandhi 18:6a4db94011d3 107 void serial_free(serial_t *obj)
sahilmgandhi 18:6a4db94011d3 108 {
sahilmgandhi 18:6a4db94011d3 109 serial_irq_ids[obj->index] = 0;
sahilmgandhi 18:6a4db94011d3 110 }
sahilmgandhi 18:6a4db94011d3 111
sahilmgandhi 18:6a4db94011d3 112 // serial_baud
sahilmgandhi 18:6a4db94011d3 113 // set the baud rate, taking in to account the current SystemFrequency
sahilmgandhi 18:6a4db94011d3 114 void serial_baud(serial_t *obj, int baudrate)
sahilmgandhi 18:6a4db94011d3 115 {
sahilmgandhi 18:6a4db94011d3 116 if (baudrate<=1200) {
sahilmgandhi 18:6a4db94011d3 117 obj->uart->BAUDRATE = UART_BAUDRATE_BAUDRATE_Baud1200;
sahilmgandhi 18:6a4db94011d3 118 return;
sahilmgandhi 18:6a4db94011d3 119 }
sahilmgandhi 18:6a4db94011d3 120
sahilmgandhi 18:6a4db94011d3 121 for (int i = 1; i<17; i++) {
sahilmgandhi 18:6a4db94011d3 122 if (baudrate<acceptedSpeeds[i][0]) {
sahilmgandhi 18:6a4db94011d3 123 obj->uart->BAUDRATE = acceptedSpeeds[i - 1][1];
sahilmgandhi 18:6a4db94011d3 124 return;
sahilmgandhi 18:6a4db94011d3 125 }
sahilmgandhi 18:6a4db94011d3 126 }
sahilmgandhi 18:6a4db94011d3 127 obj->uart->BAUDRATE = UART_BAUDRATE_BAUDRATE_Baud1M;
sahilmgandhi 18:6a4db94011d3 128 }
sahilmgandhi 18:6a4db94011d3 129
sahilmgandhi 18:6a4db94011d3 130 void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits)
sahilmgandhi 18:6a4db94011d3 131 {
sahilmgandhi 18:6a4db94011d3 132 // 0: 1 stop bits, 1: 2 stop bits
sahilmgandhi 18:6a4db94011d3 133 // int parity_enable, parity_select;
sahilmgandhi 18:6a4db94011d3 134 switch (parity) {
sahilmgandhi 18:6a4db94011d3 135 case ParityNone:
sahilmgandhi 18:6a4db94011d3 136 obj->uart->CONFIG = 0;
sahilmgandhi 18:6a4db94011d3 137 break;
sahilmgandhi 18:6a4db94011d3 138 default:
sahilmgandhi 18:6a4db94011d3 139 obj->uart->CONFIG = (UART_CONFIG_PARITY_Included << UART_CONFIG_PARITY_Pos);
sahilmgandhi 18:6a4db94011d3 140 return;
sahilmgandhi 18:6a4db94011d3 141 }
sahilmgandhi 18:6a4db94011d3 142 //no Flow Control
sahilmgandhi 18:6a4db94011d3 143 }
sahilmgandhi 18:6a4db94011d3 144
sahilmgandhi 18:6a4db94011d3 145 //******************************************************************************
sahilmgandhi 18:6a4db94011d3 146 // * INTERRUPT HANDLING
sahilmgandhi 18:6a4db94011d3 147 //******************************************************************************
sahilmgandhi 18:6a4db94011d3 148 static inline void uart_irq(uint32_t iir, uint32_t index)
sahilmgandhi 18:6a4db94011d3 149 {
sahilmgandhi 18:6a4db94011d3 150 SerialIrq irq_type;
sahilmgandhi 18:6a4db94011d3 151 switch (iir) {
sahilmgandhi 18:6a4db94011d3 152 case 1:
sahilmgandhi 18:6a4db94011d3 153 irq_type = TxIrq;
sahilmgandhi 18:6a4db94011d3 154 break;
sahilmgandhi 18:6a4db94011d3 155 case 2:
sahilmgandhi 18:6a4db94011d3 156 irq_type = RxIrq;
sahilmgandhi 18:6a4db94011d3 157 break;
sahilmgandhi 18:6a4db94011d3 158
sahilmgandhi 18:6a4db94011d3 159 default:
sahilmgandhi 18:6a4db94011d3 160 return;
sahilmgandhi 18:6a4db94011d3 161 }
sahilmgandhi 18:6a4db94011d3 162
sahilmgandhi 18:6a4db94011d3 163 if (serial_irq_ids[index] != 0) {
sahilmgandhi 18:6a4db94011d3 164 irq_handler(serial_irq_ids[index], irq_type);
sahilmgandhi 18:6a4db94011d3 165 }
sahilmgandhi 18:6a4db94011d3 166 }
sahilmgandhi 18:6a4db94011d3 167
sahilmgandhi 18:6a4db94011d3 168 #ifdef __cplusplus
sahilmgandhi 18:6a4db94011d3 169 extern "C" {
sahilmgandhi 18:6a4db94011d3 170 #endif
sahilmgandhi 18:6a4db94011d3 171 void UART0_IRQHandler()
sahilmgandhi 18:6a4db94011d3 172 {
sahilmgandhi 18:6a4db94011d3 173 uint32_t irtype = 0;
sahilmgandhi 18:6a4db94011d3 174
sahilmgandhi 18:6a4db94011d3 175 if((NRF_UART0->INTENSET & 0x80) && NRF_UART0->EVENTS_TXDRDY) {
sahilmgandhi 18:6a4db94011d3 176 irtype = 1;
sahilmgandhi 18:6a4db94011d3 177 } else if((NRF_UART0->INTENSET & 0x04) && NRF_UART0->EVENTS_RXDRDY) {
sahilmgandhi 18:6a4db94011d3 178 irtype = 2;
sahilmgandhi 18:6a4db94011d3 179 }
sahilmgandhi 18:6a4db94011d3 180 uart_irq(irtype, 0);
sahilmgandhi 18:6a4db94011d3 181 }
sahilmgandhi 18:6a4db94011d3 182
sahilmgandhi 18:6a4db94011d3 183 #ifdef __cplusplus
sahilmgandhi 18:6a4db94011d3 184 }
sahilmgandhi 18:6a4db94011d3 185 #endif
sahilmgandhi 18:6a4db94011d3 186 void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id)
sahilmgandhi 18:6a4db94011d3 187 {
sahilmgandhi 18:6a4db94011d3 188 irq_handler = handler;
sahilmgandhi 18:6a4db94011d3 189 serial_irq_ids[obj->index] = id;
sahilmgandhi 18:6a4db94011d3 190 }
sahilmgandhi 18:6a4db94011d3 191
sahilmgandhi 18:6a4db94011d3 192 void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable)
sahilmgandhi 18:6a4db94011d3 193 {
sahilmgandhi 18:6a4db94011d3 194 IRQn_Type irq_n = (IRQn_Type)0;
sahilmgandhi 18:6a4db94011d3 195
sahilmgandhi 18:6a4db94011d3 196 switch ((int)obj->uart) {
sahilmgandhi 18:6a4db94011d3 197 case UART_0:
sahilmgandhi 18:6a4db94011d3 198 irq_n = UART0_IRQn;
sahilmgandhi 18:6a4db94011d3 199 break;
sahilmgandhi 18:6a4db94011d3 200 }
sahilmgandhi 18:6a4db94011d3 201
sahilmgandhi 18:6a4db94011d3 202 if (enable) {
sahilmgandhi 18:6a4db94011d3 203 switch (irq) {
sahilmgandhi 18:6a4db94011d3 204 case RxIrq:
sahilmgandhi 18:6a4db94011d3 205 obj->uart->INTENSET = (UART_INTENSET_RXDRDY_Msk);
sahilmgandhi 18:6a4db94011d3 206 break;
sahilmgandhi 18:6a4db94011d3 207 case TxIrq:
sahilmgandhi 18:6a4db94011d3 208 obj->uart->INTENSET = (UART_INTENSET_TXDRDY_Msk);
sahilmgandhi 18:6a4db94011d3 209 break;
sahilmgandhi 18:6a4db94011d3 210 }
sahilmgandhi 18:6a4db94011d3 211 NVIC_SetPriority(irq_n, 3);
sahilmgandhi 18:6a4db94011d3 212 NVIC_EnableIRQ(irq_n);
sahilmgandhi 18:6a4db94011d3 213 } else { // disable
sahilmgandhi 18:6a4db94011d3 214 // maseked writes to INTENSET dont disable and masked writes to
sahilmgandhi 18:6a4db94011d3 215 // INTENCLR seemed to clear the entire register, not bits.
sahilmgandhi 18:6a4db94011d3 216 // Added INTEN to memory map and seems to allow set and clearing of specific bits as desired
sahilmgandhi 18:6a4db94011d3 217 int all_disabled = 0;
sahilmgandhi 18:6a4db94011d3 218 switch (irq) {
sahilmgandhi 18:6a4db94011d3 219 case RxIrq:
sahilmgandhi 18:6a4db94011d3 220 obj->uart->INTENCLR = (UART_INTENCLR_RXDRDY_Msk);
sahilmgandhi 18:6a4db94011d3 221 all_disabled = (obj->uart->INTENCLR & (UART_INTENCLR_TXDRDY_Msk)) == 0;
sahilmgandhi 18:6a4db94011d3 222 break;
sahilmgandhi 18:6a4db94011d3 223 case TxIrq:
sahilmgandhi 18:6a4db94011d3 224 obj->uart->INTENCLR = (UART_INTENCLR_TXDRDY_Msk);
sahilmgandhi 18:6a4db94011d3 225 all_disabled = (obj->uart->INTENCLR & (UART_INTENCLR_RXDRDY_Msk)) == 0;
sahilmgandhi 18:6a4db94011d3 226 break;
sahilmgandhi 18:6a4db94011d3 227 }
sahilmgandhi 18:6a4db94011d3 228
sahilmgandhi 18:6a4db94011d3 229 if (all_disabled) {
sahilmgandhi 18:6a4db94011d3 230 NVIC_DisableIRQ(irq_n);
sahilmgandhi 18:6a4db94011d3 231 }
sahilmgandhi 18:6a4db94011d3 232 }
sahilmgandhi 18:6a4db94011d3 233 }
sahilmgandhi 18:6a4db94011d3 234
sahilmgandhi 18:6a4db94011d3 235 //******************************************************************************
sahilmgandhi 18:6a4db94011d3 236 //* READ/WRITE
sahilmgandhi 18:6a4db94011d3 237 //******************************************************************************
sahilmgandhi 18:6a4db94011d3 238 int serial_getc(serial_t *obj)
sahilmgandhi 18:6a4db94011d3 239 {
sahilmgandhi 18:6a4db94011d3 240 while (!serial_readable(obj)) {
sahilmgandhi 18:6a4db94011d3 241 }
sahilmgandhi 18:6a4db94011d3 242
sahilmgandhi 18:6a4db94011d3 243 obj->uart->EVENTS_RXDRDY = 0;
sahilmgandhi 18:6a4db94011d3 244
sahilmgandhi 18:6a4db94011d3 245 return (uint8_t)obj->uart->RXD;
sahilmgandhi 18:6a4db94011d3 246 }
sahilmgandhi 18:6a4db94011d3 247
sahilmgandhi 18:6a4db94011d3 248 void serial_putc(serial_t *obj, int c)
sahilmgandhi 18:6a4db94011d3 249 {
sahilmgandhi 18:6a4db94011d3 250 while (!serial_writable(obj)) {
sahilmgandhi 18:6a4db94011d3 251 }
sahilmgandhi 18:6a4db94011d3 252
sahilmgandhi 18:6a4db94011d3 253 obj->uart->EVENTS_TXDRDY = 0;
sahilmgandhi 18:6a4db94011d3 254 obj->uart->TXD = (uint8_t)c;
sahilmgandhi 18:6a4db94011d3 255 }
sahilmgandhi 18:6a4db94011d3 256
sahilmgandhi 18:6a4db94011d3 257 int serial_readable(serial_t *obj)
sahilmgandhi 18:6a4db94011d3 258 {
sahilmgandhi 18:6a4db94011d3 259 return (obj->uart->EVENTS_RXDRDY == 1);
sahilmgandhi 18:6a4db94011d3 260 }
sahilmgandhi 18:6a4db94011d3 261
sahilmgandhi 18:6a4db94011d3 262 int serial_writable(serial_t *obj)
sahilmgandhi 18:6a4db94011d3 263 {
sahilmgandhi 18:6a4db94011d3 264 return (obj->uart->EVENTS_TXDRDY == 1);
sahilmgandhi 18:6a4db94011d3 265 }
sahilmgandhi 18:6a4db94011d3 266
sahilmgandhi 18:6a4db94011d3 267 void serial_break_set(serial_t *obj)
sahilmgandhi 18:6a4db94011d3 268 {
sahilmgandhi 18:6a4db94011d3 269 obj->uart->TASKS_SUSPEND = 1;
sahilmgandhi 18:6a4db94011d3 270 }
sahilmgandhi 18:6a4db94011d3 271
sahilmgandhi 18:6a4db94011d3 272 void serial_break_clear(serial_t *obj)
sahilmgandhi 18:6a4db94011d3 273 {
sahilmgandhi 18:6a4db94011d3 274 obj->uart->TASKS_STARTTX = 1;
sahilmgandhi 18:6a4db94011d3 275 obj->uart->TASKS_STARTRX = 1;
sahilmgandhi 18:6a4db94011d3 276 }
sahilmgandhi 18:6a4db94011d3 277
sahilmgandhi 18:6a4db94011d3 278 void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, PinName txflow)
sahilmgandhi 18:6a4db94011d3 279 {
sahilmgandhi 18:6a4db94011d3 280
sahilmgandhi 18:6a4db94011d3 281 if (type == FlowControlRTSCTS || type == FlowControlRTS) {
sahilmgandhi 18:6a4db94011d3 282 NRF_GPIO->DIR |= (1<<rxflow);
sahilmgandhi 18:6a4db94011d3 283 pin_mode(rxflow, PullUp);
sahilmgandhi 18:6a4db94011d3 284 obj->uart->PSELRTS = rxflow;
sahilmgandhi 18:6a4db94011d3 285
sahilmgandhi 18:6a4db94011d3 286 obj->uart->CONFIG |= 0x01; // Enable HWFC
sahilmgandhi 18:6a4db94011d3 287 }
sahilmgandhi 18:6a4db94011d3 288
sahilmgandhi 18:6a4db94011d3 289 if (type == FlowControlRTSCTS || type == FlowControlCTS) {
sahilmgandhi 18:6a4db94011d3 290 NRF_GPIO->DIR &= ~(1<<txflow);
sahilmgandhi 18:6a4db94011d3 291 pin_mode(txflow, PullUp);
sahilmgandhi 18:6a4db94011d3 292 obj->uart->PSELCTS = txflow;
sahilmgandhi 18:6a4db94011d3 293
sahilmgandhi 18:6a4db94011d3 294 obj->uart->CONFIG |= 0x01; // Enable HWFC;
sahilmgandhi 18:6a4db94011d3 295 }
sahilmgandhi 18:6a4db94011d3 296
sahilmgandhi 18:6a4db94011d3 297 if (type == FlowControlNone) {
sahilmgandhi 18:6a4db94011d3 298 obj->uart->PSELRTS = 0xFFFFFFFF; // Disable RTS
sahilmgandhi 18:6a4db94011d3 299 obj->uart->PSELCTS = 0xFFFFFFFF; // Disable CTS
sahilmgandhi 18:6a4db94011d3 300
sahilmgandhi 18:6a4db94011d3 301 obj->uart->CONFIG &= ~0x01; // Enable HWFC;
sahilmgandhi 18:6a4db94011d3 302 }
sahilmgandhi 18:6a4db94011d3 303 }
sahilmgandhi 18:6a4db94011d3 304
sahilmgandhi 18:6a4db94011d3 305 void serial_clear(serial_t *obj) {
sahilmgandhi 18:6a4db94011d3 306 }