File tree Expand file tree Collapse file tree 1 file changed +20
-0
lines changed
targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver Expand file tree Collapse file tree 1 file changed +20
-0
lines changed Original file line number Diff line number Diff line change @@ -419,6 +419,7 @@ uint32_t CAN_SetBaudRate(CAN_T *tCAN, uint32_t u32BaudRate)
419
419
420
420
SystemCoreClockUpdate ();
421
421
422
+ #if 0 // original implementation got 5% inaccuracy.
422
423
u32Value = SystemCoreClock ;
423
424
424
425
if (u32BaudRate * 8 < (u32Value /2 )) {
@@ -428,7 +429,26 @@ uint32_t CAN_SetBaudRate(CAN_T *tCAN, uint32_t u32BaudRate)
428
429
u8Tseg1 = 2 ;
429
430
u8Tseg2 = 1 ;
430
431
}
432
+ #else
433
+ u32Value = SystemCoreClock / u32BaudRate ;
434
+ /* Fix for most standard baud rates, include 125K */
435
+
436
+ u8Tseg1 = 3 ;
437
+ u8Tseg2 = 2 ;
438
+ while (1 )
439
+ {
440
+ if (((u32Value % (u8Tseg1 + u8Tseg2 + 3 )) == 0 ) | (u8Tseg1 >= 15 ))
441
+ break ;
442
+
443
+ u8Tseg1 ++ ;
431
444
445
+ if ((u32Value % (u8Tseg1 + u8Tseg2 + 3 )) == 0 )
446
+ break ;
447
+
448
+ if (u8Tseg2 < 7 )
449
+ u8Tseg2 ++ ;
450
+ }
451
+ #endif
432
452
u32Brp = SystemCoreClock /(u32BaudRate ) / (u8Tseg1 + u8Tseg2 + 3 ) - 1 ;
433
453
434
454
u32Value = ((uint32_t )u8Tseg2 << CAN_BTIME_TSEG2_Pos ) | ((uint32_t )u8Tseg1 << CAN_BTIME_TSEG1_Pos ) |
You can’t perform that action at this time.
0 commit comments