zxcv1973 发表于 2024-4-24 12:05:03

写发送缓冲区用汇编的话大概能到4us以内(32MHz主频),不能用官方提供的例程

神农鼎 发表于 2024-4-24 12:47:33

大家帮忙下楼主


明开会,STC32G96K256:
2组CAN-FD兼容CAN, 全部改成 DMA支持 CAN-FD,再P2P,
外设直接到外设/CAN-FD2<==>CAN-FD1, 让 CPU干其他事去
XFR 全部移到 edata

采果农 发表于 2024-4-24 13:46:13

神农鼎 发表于 2024-4-24 12:47
大家帮忙下楼主




加油,等你们的新型号,毕竟你们是最牛逼的51单片机

LAOXU 发表于 2024-4-24 13:50:02

zxcv1973 发表于 2024-4-24 11:41
XFR寄存器不支持字操作,并且CAN模块操作效率确实很低,这种外挂模块连地址自动增1都不支持 ...

KeilC251 有缺陷, 不支持 XFR寄存器 字操作, 但 汇编支持.

LAOXU 发表于 2024-4-24 15:25:59

zxcv1973 发表于 2024-4-24 11:41
XFR寄存器不支持字操作,并且CAN模块操作效率确实很低,这种外挂模块连地址自动增1都不支持 ...

刚才实测了一下, c251 支持 XFR寄存器字操作(不支持SFR寄存器字操作).

zxcv1973 发表于 2024-4-24 15:52:09

LAOXU 发表于 2024-4-24 15:25
刚才实测了一下, c251 支持 XFR寄存器字操作(不支持SFR寄存器字操作).

你怎么测的,我以前用汇编测过,字操作能执行,但执行结果不对,不过当时还是用的beta版测试的

zxcv1973 发表于 2024-4-24 15:55:29

CAN写发送数据用C语言也能在4us以内(32MHz主频),还是不能用官方例程

神农鼎 发表于 2024-4-24 16:31:44

帮楼主用 STC32G8K64-42I-LQFP48/32 算下,
42MHz, 2个包之间要间隔多久

zhx 发表于 2024-4-24 17:25:49

LAOXU 发表于 2024-4-24 06:50
我不知楼主的转换程序格式, 估计是这样写的,
CAN2接收中断 --> CAN2接收到的帧 --> 读入+转换 --> 写入 CA ...

他这个问题,我也遇到过:
接收1帧的时间是固定的,因为速率固定
1.   CAN2接收到中断 --> CAN2接收到的帧 --> 读入+转换 --> 写入 buff 缓冲区
接收第1帧+6.4us 接收第2帧+6.4us

2.   CAN1发送完中断 --> buff 缓冲区 ---> CAN1发送帧 --> 启动发送
发送第1帧+16us,发送第2帧+16us
这样的话,肯定溢出,问题是CAN没有发完,buffer不能装下一个数据
如果 改成
发送第1帧(buffer1) 同时装buffer2 + 发送第2帧(buffer2) 同时装入buffer1
利用发送的同时,准备数据,发送的时间是远大于 装入时间的,把发送和装入同时进行

采果农 发表于 2024-4-24 18:45:09

zhx 发表于 2024-4-24 17:25
他这个问题,我也遇到过:
接收1帧的时间是固定的,因为速率固定
1.   CAN2接收到中断 --> CAN2接收到的帧 - ...

只有你是懂我的,所以现在他们能解决的方案,就是想尽办法减少写入buffer的时间,但是我觉得在发送完到响应中断就得有几us的时间,加上写入buf的时间估计还是来不及
页: 1 2 3 [4] 5 6 7 8 9
查看完整版本: STC32G的2组CAN模块的缓冲区读写不够快,后续CAN-FD新品建议优化提升