工具/软件:Code Composer Studio
您好!
我想将 F28335的控制套件 eCAN 示例更改为通过 CAN 总线连续发送消息。 我已按照以下所述修改了该程序。 但我看不到 CAN 引脚上有任何变化(即 eCANA 31和30)。
基本上、我想要一个程序、通过 CAN 发送按摩、并接受一些相同的按摩。
如果我们现在没有使用任何 CAN 收发器与控制器一起使用、还有一个问题是可以通过示波器查看控制器 CAN 引脚的信号变化。(在传输模式下)
此致、
Vishal
脚本如下所示:
#include "DSP28x_Project.h"//器件头文件和示例 include 文件
uint32传递计数=0;
void main (void)
{
// eCAN 控制寄存器要求使用32位进行读/写访问。 因此、我们
//将为此示例创建一组影子寄存器。 阴影
//将使用寄存器来确保访问是32位而不是16位。
struct eCAN-regs ECanaShadow;
//步骤1. 初始化系统控制:
// PLL、安全装置、启用外设时钟
//此示例函数位于 DSP2833x_SYSCTRL.c 文件中。
InitSysCtrl();
//步骤2. 初始化 GPIO:
//此示例函数位于 DSP2833x_GPIO.c 文件和中
//说明了如何将 GPIO 设置为其默认状态。
// InitGpio();//针对此示例跳过
//对于此示例、使用此处的 GPIO 寄存器配置 CAN 引脚
//此函数位于 DSP2833x_eCAN-c 中
InitECanGpio();
//步骤3. 清除所有中断并初始化 PIE 矢量表:
//禁用 CPU 中断
Dint;
//将 PIE 控制寄存器初始化为默认状态。
//默认状态为禁用所有 PIE 中断和标志
//被清除。
//此函数位于 DSP2833x_PIECTRL.c 文件中。
InitPieCtrl();
//禁用 CPU 中断并清除所有 CPU 中断标志:
IER = 0x0000;
IFR = 0x0000;
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//这将填充整个表,即使是中断也是如此
//在本例中未使用。 这对于调试很有用。
//可以在 DSP2833x_DefaultIsr.c 中找到 shell ISR 例程
//此函数可在 DSP2833x_PieVect.c 中找到
InitPieVectTable();
//步骤4. 初始化所有器件外设:
//此函数位于 DSP2833x_InitPeripherals.c 中
// InitPeripherals ();//此示例不需要
//步骤5. 特定于用户的代码、启用中断:
InitECANa();//初始化 eCAN-A 模块
//邮箱一次可以写入16位或32位
//写入发送邮箱 MBOX0 - 15的 MSGID 字段
ECANaMboxs.MBOX0.MSGID.ALL = 0x9555AAA0;
//写入接收邮箱 MBOX16 - 31的 MSGID 字段
//将邮箱0-15配置为 Tx,将16-31配置为 Rx
//因为该写入是对整个寄存器(而不是位)的
//字段)不需要影子寄存器。
ECANaRegs.CANMD.ALL = 0xFFFFFF0000;
//启用所有邮箱*/
//因为该写入是对整个寄存器(而不是位)的
//字段)不需要影子寄存器。
ECANaRegs.CANME.ALL = 0xFFFFFFFF;
//指定将发送/接收8位
ECANaMboxs.MBOX0.MSGCTRL.bit.DLC = 8;
//写入 MBOX0 - 15的邮箱 RAM 字段
ECANaMboxs.MBOX0.MDL.ALL = 0x9555AAA0;
ECANaMboxs.MBOX0.MDH.ALL = 0x89ABCDEF;
//因为该写入是对整个寄存器(而不是位)的
//字段)不需要影子寄存器。
EALLOW;
ECANaRegs.CANMIM.ALL = 0xFFFFFFFF;
//将 eCAN 配置为自检模式
//启用 eCAN 的增强功能。
EALLOW;
ECanaShady.CANMC.ALL = ECanaRegs.CANMC.ALL;
ECANaShady.CANMC.bit.STM = 0;//将 CAN 配置为自检模式
ECanaRegs.CANMC.ALL = ECanaShadure.CANMC.ALL;
EDIS;
//开始传输
for (;;)
{
PassCount++;
ECANaRegs.CANTRS.ALL = 0x00000001;//为所有发送邮箱设置 TRS
while (ECanaRegs.Canta.all!= 0x00000001){}//等待所有 Tan 位被置位。
ECanaRegs.Canta.all = 0x00000001;//清除所有 Tan
//从接收邮箱读取并开始检查数据*/
}
}