DSP28335的CAN通信接收程序
时间: 2023-08-14 22:05:42 浏览: 447
实现DSP28335的canA与canB之间的相互发送接收.zip
5星 · 资源好评率100%
以下是DSP28335的CAN通信接收程序的基本步骤:
1. 配置CAN控制器:设置波特率、CAN控制器模式、接收中断使能等。
2. 配置CAN接收邮箱:设置接收邮箱的标识符、数据长度、数据格式等。
3. 编写中断服务程序:在CAN接收中断服务程序中处理接收到的数据,可以将数据存储到缓冲区或者进行其他操作。
4. 启用CAN控制器中断:使能CAN控制器的中断,以便在接收到数据时触发中断服务程序。
下面是一个简单的DSP28335 CAN通信接收程序的示例:
```
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
// 定义CAN接收邮箱的标识符和数据长度
#define CAN_RX_MSG_ID 0x100
#define CAN_RX_MSG_DLC 8
// 定义接收缓冲区
Uint16 can_rx_buffer[CAN_RX_MSG_DLC];
// CAN接收中断服务程序
interrupt void can_rx_isr(void)
{
// 读取CAN接收邮箱中的数据
if (ECanaRegs.CANRMP.bit.RMP0 == 1)
{
ECanaRegs.CANRMP.bit.RMP0 = 1; //清除接收邮箱0非空标志位
ECanaRegs.CANME.bit.ME0 = 0; //禁用接收邮箱0
ECanaRegs.CANME.bit.ME0 = 1; //重新使能接收邮箱0
// 将接收到的数据存储到缓冲区中
can_rx_buffer[0] = ECanaMboxes.MBOX0.MDL.all;
can_rx_buffer[1] = ECanaMboxes.MBOX0.MDH.all;
}
// 清除中断标志位
ECanaRegs.CANGIF0.all = 0xFFFFFFFF;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP9; //清除PIEACK寄存器
}
void main(void)
{
// 初始化系统时钟和GPIO等
InitSysCtrl();
InitGpio();
// 配置CAN控制器
EALLOW;
ECanaRegs.CANMC.bit.CCR = 1; //进入配置模式
ECanaRegs.CANMC.bit.SRES = 1; //软件复位CAN控制器
ECanaRegs.CANMC.bit.DBO = 1; //禁用CAN总线输出
ECanaRegs.CANMC.bit.ABO = 0; //禁用自动总线占用
ECanaRegs.CANMC.bit.TTC = 0; //禁用时间触发通信
ECanaRegs.CANMC.bit.TXCC = 0; //禁用发送中止
ECanaRegs.CANMC.bit.RM = 0; //禁用自动回复模式
ECanaRegs.CANMC.bit.STM = 0; //禁用自发自收模式
ECanaRegs.CANMC.bit.AFM = 0; //禁用帧过滤模式
ECanaRegs.CANMC.bit.WUBA = 0; //禁用唤醒模式
ECanaRegs.CANMC.bit.PDR = 0; //禁用处理器延时补偿
ECanaRegs.CANMC.bit.CCR = 0; //退出配置模式
ECanaRegs.CANMC.bit.SCB = 1; //使能基本模式
// 配置CAN接收邮箱0
ECanaRegs.CANME.all = 0x00000001; //使能接收邮箱0
ECanaRegs.CANMD.all = 0x00000000; //设置接收邮箱0为接收模式
ECanaMboxes.MBOX0.MSGID.all = CAN_RX_MSG_ID; //设置接收邮箱0标识符
ECanaMboxes.MBOX0.MSGCTRL.bit.DLC = CAN_RX_MSG_DLC; //设置接收邮箱0数据长度
// 配置CAN控制器中断
PieCtrlRegs.PIEIER9.bit.INTx5 = 1; //使能CAN接收中断
IER |= M_INT9; //使能中断向量9
EINT; //使能全局中断
// 启动CAN控制器
ECanaRegs.CANMC.bit.STM = 1; //使能自发自收模式
ECanaRegs.CANMC.bit.SCB = 0; //禁用基本模式
while (1)
{
// 主程序循环
}
}
```
以上是一个简单的DSP28335 CAN通信接收程序的示例,仅供参考。实际应用中,需要根据具体的应用场景进行相应的配置和优化。
阅读全文