Microchip
直播中

刘娟

7年用户 672经验值
私信 关注
[问答]

请问dsPIC33EP256MU806 CAN怎么操作?

XC16(v1.26)我已经在PIC18F和PIC24FJ微控制器上使用了CAN总线,但是我被dsPIC33EP256MU806实现难住了。我使用来自家庭参考CAN文档(DS70353)的代码作为起点,但是它根本不给我带来任何乐趣。我不确定是否有一个主启用位在一个SFR,我错过了。我的Tx管脚是RF4(RP100),Rx是RG7(RPI119),但是考虑到帧从不离开发送缓冲区,我不认为问题在I/O管脚配置中。我对设置罐缓冲区地址的高低字的行感到困惑。在文档中使用以下行:DMA1STAL=(unsigned int)&can_buffers;DMA1STAH=(unsigned int)&can_buffers;这对我来说似乎是错误的,但是即使我使用另一个实现,也不会得到任何要发送的帧。我正在设置发送请求位,并等待请求位清除,但它从不这样做。没有任何错误指示,根本没有中断。DMA1STAL=((unsigned int)(&can_buffers)&0xffff;DMA1STAH=((unsigned int)(&can_buffers)>>16)&0xff;以上两行是我试图使用的,但是没有区别。编译器抱怨>>16行,但是它确实编译了。我会附上我的代码,但是它或多或少是直接从CAN家族文档来的。如果有人在DSPIC33 EP上使用CAN的经验,我想看看我在文档中读到的是什么。

回帖(8)

李戈

2019-10-28 06:54:57
我试图进一步诊断这个问题,根据DMA,使用DSADR地址来查看DMA控制器最后做了什么,但是它的000个,所以从来没有提出过DMA请求。我再次读取CAN信息,并且设置发送请求位应该发起DMA请求。我会继续寻找,我会错过一个地方。
举报

李戈

2019-10-28 07:00:22
在阅读DMA系列数据表时,我选择了一行:u eds_unsigned int can_buffer s[NUM_CAN_BUFFERS][8]_.((eds,space(dma));这意味着将缓冲区放在DPSRAM中,但它将缓冲区放在地址0x7e00。根据DSPIC33 EP256MU806的数据表,该数据表不在DPSRAM地址空间中?
举报

李戈

2019-10-28 07:15:06
我在这里抓着稻草,据我所见,从Microchip项目中使用了Demo代码,DMA& LT;-& G.;ECAN外设接口不起作用。有人在DSPIC33上使用了很多可以让它工作。我已经就这个问题打开了一个支持请求,但到目前为止还没有解决方案。
举报

张百玲

2019-10-28 07:21:35
我不知道这是否会有帮助,但是我确信微型计算机上的ECAN模块是相似的吗?我做了一些关于dsPic33FJ微操作系统的Ecan Lib的工作。它仍然在进行中,但是90%还在那里。我有一个使用Explorer 16板和使用该库的dsPic33FJ256GP710 PIM的工作项目。附件是包含文件和源代码文件目录。该项目太大,不能作为附件添加。但是如果您为dsPic33FJ256GP710微创建了一个项目,并且包括了所有文件,那么它应该编译并运行正常。也许您可以使用一些代码。我没有使用任何MCP库代码,因为最终该代码必须是MISRA兼容的。zip文件,删除.txt
举报

更多回帖

发帖
×
20
完善资料,
赚取积分