找回密码
 立即注册

QQ登录

只需一步,快速开始

打印 上一主题 下一主题
开启左侧

请教NUVOTON的CANFD遵循帧率的计算公式是什么?

[复制链接]
跳转到指定楼层
楼主
匿名  发表于 2024-6-28 10:16:18 |只看大图 回帖奖励 |倒序浏览 |阅读模式
仲裁阶段的波特率 CAN FD Freq / (Sync_Seg + Pro_Seg + Phase_Seg1 + Phase_Seg2)数据阶段的波特率 CAN FD Freq / (Sync_Seg + Pro_Seg + Phase_Seg1 + Phase_Seg2)

这样计算有什么问题吗?为何这样配置M467的公式不对呢?

CLK_SetModuleClock(CANFD0_MODULE, CLK_CLKSEL0_CANFD0SEL_HCLK, CLK_CLKDIV5_CANFD0(10));
20MHz时钟,那么单位Tq就是50ns。

下面的计算是:1M/10M?
    psCanfd->NBTP = (3 << 25) +                 // NSJW  = 3+1 =4 CLK
                    (10 << 16) +                // NBRP  = 0+10 =10       // prescaler = 10
                    (13 << 8) +                 // NTSG1 = 13+1 =14 CLK
                    (5 - 1) ;                   // NTSG2 = 5 CLK        // One bit = 1+14+5 = 20 CLK

    // Date rate is configured as following.   If CAN frame, following code is void

    psCanfd->DBTP = ((4 - 1) << 16) +           // DBRP  = 4 prescaler
                    ((17 - 1) << 8) +           // DTSG1 = 17 CLK
                    ((3 - 1) << 4) +            // DTSG2 = 3 CLK      // One bit = 17+3 = 20 CLK
                    (3 - 1) ;                   // DSJW  = 3 CLK







分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 顶 踩
回复

使用道具

沙发
匿名  发表于 2024-6-28 10:33:17
{                                               // CANFD_CLk = 200M                        
    psCanfd->NBTP = (3 << 25) +                 // NSJW  = 3+1 =4 CLK
                    (10 << 16) +                // NBRP  = 0+10 =10       // prescaler = 10
                    (13 << 8) +                 // NTSG1 = 13+1 =14 CLK
                    (5 - 1) ;                   // NTSG2 = 5 CLK        // One bit = 1+14+5 = 20 CLK

    // Date rate is configured as following.   If CAN frame, following code is void

    psCanfd->DBTP = ((4 - 1) << 16) +           // DBRP  = 4 prescaler
                    ((17 - 1) << 8) +           // DTSG1 = 17 CLK
                    ((3 - 1) << 4) +            // DTSG2 = 3 CLK      // One bit = 17+3 = 20 CLK
                    (3 - 1) ;                   // DSJW  = 3 CLK

感觉写的稀里糊涂的?
回复 支持 反对

使用道具

板凳
匿名  发表于 2024-6-28 15:19:30
如果我借助CANFD的工具,计算各个配置,
配合上面的代码,该如何进行计算?
范例中的代码,一会儿加1,一会儿减1的,就不能写一个变量然后封装成一个标准的范例?


CANFD1.png (18.93 KB, 下载次数: 176)

CANFD1.png
回复 支持 反对

使用道具

地板
chrishu 发表于 2024-7-1 11:03:09 | 只看该作者
位时间=Sync_Seg + Pro_Seg + Phase_Seg1 + Phase_Seg2
Sync_Seg =1
Pro_Seg + Phase_Seg1 = NTSG1 + 1
Phase_Seg2 = NTSG2+1


所以位时间 = NTSG1 + NTSG2 + 3
寄存器里设置的个数换算成实际个数都要 +1



回复 支持 反对

使用道具 举报

5#
匿名  发表于 2024-7-1 17:13:11
chrishu 发表于 2024-7-1 11:03
位时间=Sync_Seg + Pro_Seg + Phase_Seg1 + Phase_Seg2
Sync_Seg =1
Pro_Seg + Phase_Seg1 = NTSG1 + 1

感谢老师指点!
回复 支持 反对

使用道具

高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

新唐MCU