@@ -344,64 +344,47 @@ void serial_free(serial_t *obj)
344
344
}
345
345
}
346
346
347
- static nrf_uart_baudrate_t baud_translate ( int rate )
347
+ void serial_baud ( serial_t * obj , int baudrate )
348
348
{
349
- nrf_uart_baudrate_t baud ;
350
-
351
- if (rate < 57600 ) {
352
- if (rate < 14400 ) {
353
- if (rate < 2400 ) {
354
- baud = NRF_UART_BAUDRATE_1200 ;
355
- } else if (rate < 4800 ) {
356
- baud = NRF_UART_BAUDRATE_2400 ;
357
- } else if (rate < 9600 ) {
358
- baud = NRF_UART_BAUDRATE_4800 ;
359
- } else {
360
- baud = NRF_UART_BAUDRATE_9600 ;
361
- }
362
- } else {
363
- if (rate < 19200 ) {
364
- baud = NRF_UART_BAUDRATE_14400 ;
365
- } else if (rate < 28800 ) {
366
- baud = NRF_UART_BAUDRATE_19200 ;
367
- } else if (rate < 38400 ) {
368
- baud = NRF_UART_BAUDRATE_28800 ;
369
- } else {
370
- baud = NRF_UART_BAUDRATE_38400 ;
371
- }
372
- }
373
- } else {
374
- if (rate < 250000 ) {
375
- if (rate < 76800 ) {
376
- baud = NRF_UART_BAUDRATE_57600 ;
377
- } else if (rate < 115200 ) {
378
- baud = NRF_UART_BAUDRATE_76800 ;
379
- } else if (rate < 230400 ) {
380
- baud = NRF_UART_BAUDRATE_115200 ;
381
- } else {
382
- baud = NRF_UART_BAUDRATE_230400 ;
383
- }
384
- } else {
385
- if (rate < 460800 ) {
386
- baud = NRF_UART_BAUDRATE_250000 ;
387
- } else if (rate < 921600 ) {
388
- baud = NRF_UART_BAUDRATE_460800 ;
389
- } else if (rate < 1000000 ) {
390
- baud = NRF_UART_BAUDRATE_921600 ;
391
- } else {
392
- baud = NRF_UART_BAUDRATE_1000000 ;
393
- }
349
+ // nrf_uart_baudrate_set() is not used here (registers are accessed
350
+ // directly) to make it possible to set special baud rates like 56000
351
+ // or 31250.
352
+
353
+ static uint32_t const acceptedSpeeds [][2 ] = {
354
+ { 1200 , UART_BAUDRATE_BAUDRATE_Baud1200 },
355
+ { 2400 , UART_BAUDRATE_BAUDRATE_Baud2400 },
356
+ { 4800 , UART_BAUDRATE_BAUDRATE_Baud4800 },
357
+ { 9600 , UART_BAUDRATE_BAUDRATE_Baud9600 },
358
+ { 14400 , UART_BAUDRATE_BAUDRATE_Baud14400 },
359
+ { 19200 , UART_BAUDRATE_BAUDRATE_Baud19200 },
360
+ { 28800 , UART_BAUDRATE_BAUDRATE_Baud28800 },
361
+ { 31250 , (0x00800000UL ) /* 31250 baud */ },
362
+ { 38400 , UART_BAUDRATE_BAUDRATE_Baud38400 },
363
+ { 56000 , (0x00E51000UL ) /* 56000 baud */ },
364
+ { 57600 , UART_BAUDRATE_BAUDRATE_Baud57600 },
365
+ { 76800 , UART_BAUDRATE_BAUDRATE_Baud76800 },
366
+ { 115200 , UART_BAUDRATE_BAUDRATE_Baud115200 },
367
+ { 230400 , UART_BAUDRATE_BAUDRATE_Baud230400 },
368
+ { 250000 , UART_BAUDRATE_BAUDRATE_Baud250000 },
369
+ { 460800 , UART_BAUDRATE_BAUDRATE_Baud460800 },
370
+ { 921600 , UART_BAUDRATE_BAUDRATE_Baud921600 },
371
+ { 1000000 , UART_BAUDRATE_BAUDRATE_Baud1M }
372
+ };
373
+
374
+ if (baudrate <= 1200 ) {
375
+ UART_INSTANCE -> BAUDRATE = UART_BAUDRATE_BAUDRATE_Baud1200 ;
376
+ return ;
377
+ }
378
+
379
+ int const item_cnt = sizeof (acceptedSpeeds )/sizeof (acceptedSpeeds [0 ]);
380
+ for (int i = 1 ; i < item_cnt ; i ++ ) {
381
+ if ((uint32_t )baudrate < acceptedSpeeds [i ][0 ]) {
382
+ UART_INSTANCE -> BAUDRATE = acceptedSpeeds [i - 1 ][1 ];
383
+ return ;
394
384
}
395
385
}
396
- return baud ;
397
- }
398
- void serial_baud (serial_t * obj , int baudrate )
399
- {
400
- (void )obj ;
401
- UART_CB .baudrate = baud_translate (baudrate );
402
386
403
- // Reconfigure UART peripheral.
404
- nrf_uart_baudrate_set (UART_INSTANCE , UART_CB .baudrate );
387
+ UART_INSTANCE -> BAUDRATE = UART_BAUDRATE_BAUDRATE_Baud1M ;
405
388
}
406
389
407
390
void serial_format (serial_t * obj ,
0 commit comments