前言
大家好,非常感谢电子发烧友与中科昊芯提供的DSC280025C开发板,这是一款DSP的开发板,基于RISC-V指令架构。
非常抱歉,前段时间一直在忙活其他的事情,导致有半个多月没有调试这个板子。
本次主要调试的是CAN外设。
硬件连接
还是基于上一次的BSP框架,总之,就是官方的代码,我一个字母都不改动。搭建自己一道基于应用开放的框架代码,所以很多的外设,我这边都是需要自己进行代码调试。
首先通过选型手册看到,当前我们这个芯片只有1路CAN外设,

通过数据手册上能看到,GPIO32->CANA-TX GPIO33->CANA-RX

实际上CANA-TX 和CANA-RX 也有其他的引脚,但是我为什么特意就选择了这两个引脚?主要原因还是我偷了一个懒(原因是:官方的代码库里面也是用的这个两个引脚)。
至于硬件连接嘛,由于我们测试的电路板时没有CAN收发器电路,所以我利用手上的隔离CAN模块CTM1051。按照如下连接

手搓代码
手搓代码不是说完全的从0开始,还是需要借鉴官方的 DSC280025C\HXS320F280025CEDD\Core_DSC280025C\HX_DSC280025_CAN_EXTERNAL 代码例程。
同时查看参考手册,争取我们在自己抄写官方的代码的时候,能否明白每一句的是什么意思,实现了怎样的功能。
我这里就展示我自己已经封装好了的代码。
首先:外设初始化

在初始化的代码中,设置的了波特率为500K,设置了中断发送;另外配置了2个接收邮箱,一个是用来接收标准帧的,另外一个是用来接收拓展帧的。
注意:针对这款DSP的CAN外设,共计有32个邮箱。这些邮箱可以设置为发送邮箱,也可以设置为接收邮箱。
对于发送邮箱来说,我是固定将1号邮箱作为自己的发送邮箱。每次发送,我都会对1号邮箱进行配置。设置帧类型、发送帧报文ID、以及数据区长度和内容。
其次:是数据帧的发送。发送我编写了两个函数,一个时发送标准帧,一个发送拓展帧。


最后:是数据帧接收了。至于收到的数据帧解析和处理,不在本次的考虑范围。
数据帧接收,采用中断的方式,通过初始化的两个接收邮箱来接收数据。

在中断函数中,做了一些判断。可以分为三类。总线故障状态判断,发送中断,接收中断。
主函数程序调用:

主函数实现,间隔200Ms,主动发送一个CAN报文
调试与验证
我使用周立功的CAN盒进行数据数据收发通讯:

可以看到发报文的发送时正常的,间隔时间也是200Ms
接线来打入断点,通过上位机发送CAN报文,让设备进行接收

当前发送帧ID=0x0000的报文,任意长度,能都进入对应的中断。
所以发送和接收都是正常的。
关于总结
其实DSP的CAN外设的使用方式与我们单片机的CAN外设使用还是有些区别,主要是感觉是架构的上的差异,导致我们的软件开发还是有一定的不习惯。
另外一个,本次的代码对CAN报文接收过滤,感觉还是没有完全弄明白。对配置为接收邮箱时,数据长度好像就是可有可无,设置1,并不是表示只接收一个字节的报文。
另外,报文的过滤机制还是需要进一步的深入学习,假设,我需要接收任意报文,我的邮箱应该怎么配置。所以,这将是我下一步的学习方向。
*附件:HX280025C_BSP.rar