This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
我想将多个数据从 CANA 传输到 CANB、但 CANB 无法捕获。我的代码是否出错? P.S 我可以传输一个数据
//###################################################################################################################### //说明: //! \addtogroup F2833x_example_list //!eCAN 背对背(eCAN-back2back)
//! //! 此示例通过高速背对背传输数据来测试 eCAN //! 而不是停止。 已验证接收到的数据。 任何错误都会被标记。 //! MBX0发送到 MBX16、MBX1发送到 MBX17、依此类推... n //! 此程序说明了自检模式 //! //! 此示例使用 CAN 模块的自检模式。 即 //! 在模块本身内部发生传输/接收(甚至是所需 的//! ACKnowldege 在模块内部生成)。 因此、没有 //! 需要一个 CAN 收发器来运行这个特定的测试用例并且没有活动 //! 将出现在 CAN 引脚/总线中。 因为所有内容都是内部的、所以有 //! 无需120 Ω 终端电阻器。 请注意、现实世界可以 //! 应用在两端都需要一个 CAN 收发器和端接电阻 器//! 总线的电流。 //! //! b 监视\b 变量\n //! -密码// ! -错误计数 //! -MessageReceivedCount // // //////################################################################################################################ //$TI 发布:F2833x/F2823x 头文件和外设示例 V142 $ //$发布 日期:2016年11月1日$ //$版权:版权所有(C) 2007-2016德州仪器(TI)公司- // http://www.ti.com/ 保留所有权利$ //############################################################################################################ #include "DSP28x_Project.h" //设备头文件和示例包括文件 //此文件中找到的函数的原型语句。 void mailbox_check (int32 t1、int32 t2、int32 t3); void mailbox_read (int16 i); void canb_config (void); //此示例的全局变量 uint32 ErrorCount; uint32 PassCount; uint32 MessageReceivedCount; long loopcount = 0; uint32 TestMbox1 = 0; uint32 TestMbox2 = 0; uint32 TestMbox3 = 0; uint32 Speed=0、rpm_1=0、rpm_2=0; uint32 WaterTemp=0、Temp_Sign_Value=0、Room _Temp=0、Fuel =0; uint32 、MaxSpeed=0、Myeepage;uint32=0 uint32 all_parameter_1=0、all_parameter_2=0、all_parameter_3=0、all_parameter_4=0; int switch1=0; void main (void) { uint16 j; // 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 中断 //服务例程(service routinese, ISR)的指针初始化 PIE 矢量表。 //这将填充整个表,即使在 本示例中未使用中断//也是如此。 这对于调试很有用。 //可以在 DSP2833x_DefaultIsr.c 中找到 shell ISR 例程 //此函数可在 DSP2833x_PieVect.c 中找到 InitPieVectTable(); InitECan(); //步骤4. 初始化所有器件外设: //此函数可在 DSP2833x_InitPeripherals.c 中找到// InitPeripherals ();//此示例不需要 //步骤5。 特定于用户的代码、启用中断: MessageReceivedCount = 0; 错误计数= 0; PassCount = 0; //邮箱一次可以写入16位或32位 //写入发送邮箱 MBOX0 - 15的 MSGID 字段 ECANaMboxs.MBOX0.MSGID.ALL = 0x00040000; ECANaMboxs.MBOX1.MSGID.ALL = 0x00080001; ECANaMboxs.MBOX2.MSGID.ALL = 0x000F0002; ECANaMboxs.MBOX3.MSGID.ALL = 0x00100003; ECANaMboxs.MBOX4.MSGID.ALL = 0x00140004; ECANaMboxs.MBOX5.MSGID.ALL = 0x00180005; ECANaMboxs.MBOX6.MSGID.ALL = 0x001F0006; ECANaMboxs.MBOX7.MSGID.ALL = 0x00000007; ECANaMboxs.MBOX8.MSGID.ALL = 0x00000008; ECANaMboxs.MBOX9.MSGID.ALL = 0x00000009; ECANaMboxs.MBOX10.MSGID.ALL = 0x0000000A; ECANaMboxs.MBOX11.MSGID.ALL = 0x0000000B; ECANaMboxs.MBOX12.MSGID.ALL = 0x0000000C; ECANaMboxs.MBOX13.MSGID.ALL = 0x0000000D; ECANaMboxs.MBOX14.MSGID.ALL = 0x0000000E; ECANaMboxs.MBOX15.MSGID.ALL = 0x0000000F; //将邮箱0-15配置为 Tx,将16-31配置为 Rx //因为该写入是对整个寄存器(而不是位)的 //字段)不需要影子寄存器。 ECanaRegs.CANMD.ALL = 0xFFFFFF0000;// 0-15tx 16-31rx //启用所有邮箱*/ //因为该写入是对整个寄存器(而不是位)的 //字段)不需要影子寄存器。 ECANaRegs.CANME.ALL = 0x0000FFFF; //指定将发送/接收8位 ECANaMboxs.MBOX0.MSGCTRL.bit.DLC = 1; ECANaMboxs.MBOX1.MSGCTRL.bit.DLC = 5; ECANaMboxs.MBOX2.MSGCTRL.bit.DLC = 5; ECANaMboxs.MBOX3.MSGCTRL.bit.DLC = 5; ECANaMboxs.MBOX4.MSGCTRL.bit.DLC = 2; ECANaMboxs.MBOX5.MSGCTRL.bit.DLC = 7; ECANaMboxs.MBOX6.MSGCTRL.bit.DLC = 8; ECANaMboxs.MBOX7.MSGCTRL.bit.DLC = 8; ECANaMboxs.MBOX8.MSGCTRL.bit.DLC = 8; ECANaMboxs.MBOX9.MSGCTRL.bit.DLC = 8; ECANaMboxs.MBOX10.MSGCTRL.bit.DLC = 8; ECANaMboxs.MBOX11.MSGCTRL.bit.DLC = 8; ECANaMboxs.MBOX12.MSGCTRL.bit.DLC = 8; ECANaMboxs.MBOX13.MSGCTRL.bit.DLC = 8; ECANaMboxs.MBOX14.MSGCTRL.bit.DLC = 8; ECANaMboxs.MBOX15.MSGCTRL.bit.DLC = 8; //写入 MBOX0 - 15的邮箱 RAM 字段 ECANaMboxs.MBOX0.MDL.ALL = 0xFFFFFFFF; ECANaMboxs.MBOX0.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX1.MDL.ALL = 0x6F6464; ECANaMboxs.MBOX1.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX2.MDL.ALL = 0x00000000; ECANaMboxs.MBOX2.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX3.MDL.ALL = 0x00000000; ECANaMboxs.MBOX3.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX4.MDL.ALL = 0x00000000; ECANaMboxs.MBOX4.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX5.MDL.ALL = 0x00000000; ECANaMboxs.MBOX5.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX6.MDL.ALL = 0x00000000; ECANaMboxs.MBOX6.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX7.MDL.ALL = 0x00000000; ECANaMboxs.MBOX7.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX8.MDL.ALL = 0x00000000; ECANaMboxs.MBOX8.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX9.MDL.ALL = 0x9555AAA9; ECANaMboxs.MBOX9.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX10.MDL.ALL = 0x9555AAAA; ECANaMboxs.MBOX10.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX11.MDL.ALL = 0x9555AAAB; ECANaMboxs.MBOX11.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX12.MDL.ALL = 0x9555AAAC; ECANaMboxs.MBOX12.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX13.MDL.ALL = 0x9555AAAD; ECANaMboxs.MBOX13.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX14.MDL.ALL = 0x9555AAAE; ECANaMboxs.MBOX14.MDH.ALL = 0x89ABCDEF; ECANaMboxs.MBOX15.MDL.ALL = 0x9555AAAF; ECANaMboxs.MBOX15.MDH.ALL = 0x89ABCDEF; //因为该写入是对整个寄存器(而不是位)的 //字段)不需要影子寄存器。 EALLOW; ECANaRegs.CANMIM.ALL = 0x0000FFFF; ECANbRegs.CANMIM.ALL = 0xFFFFFF0000; EDIS; //将 eCAN 配置为自检模式 //启用 eCAN 的增强功能。 /*EALLOW; ECanaShady.CANMC.ALL = ECanaRegs.CANMC.ALL; ECANaShady.CANMC.bit.STM = 0;//将 CAN 配置为自检模式 ECanaRegs.CANMC.ALL = ECanaShadure.CANMC.ALL; EDIS;* CANb_CONFIG (); //开始传输 for (;;) { if (switch1==1){ all_parameter_1=(速度<<<24)+(rpm_1<16)+(rpm_2<8); all_parameter_2=(WaterTemp<<24)+(Temp_Sign_Value<16)+(Room _Temp<8)+(Fuel); all_parameter_3=(Milee_1<<24)+(Milee_2<<16)+(Milee_3<8)+(MaxSpeed); //all_parameter_4=() //all_parameter_5= //all_parameter_6=; ECANaMboxs.MBOX1.MDL.all = all_parameter_1; ECANaMboxs.MBOX2.MDL.all = all_parameter_2; ECANaMboxs.MBOX2.MDH.ALL =(电池<24); ECANaMboxs.MBOX3.MDL.all = all_parameter_3; ECANaMboxs.MBOX3.MDH.ALL =(AveSpeed<<24); //ECanaMboxs.MBOX4.MDL.all = all_parameter_4; //ECanaMboxs.MBOX5.MDL.all = all_parameter_5; ECANaRegs.CANTRS.ALL = 0x0000FFFF;//为所有发送邮箱设置 TRS while (ECanaRegs.Canta.all!= 0x0000FFFF){}//等待所有 Tan 位被置位。 ECanaRegs.Canta.all = 0x0000FFFF;//清除所有 Tan MessageReceivedCount++; //从接收邮箱读取并开始检查数据*/ for (j=16;j<32;j++) //读取并检查16个邮箱 { mailbox_read (j); //此 func 读取指定的邮箱数据 Mailbox_check (TestMbox1、TestMbox2、TestMbox3);//检查接收到的数据 } }switch1=0; } _asm (" ESTOP0");//在此处停止 } //此函数通过 邮箱号(MBXnbr)读取所示//的内容。 void mailbox_read (Int16 MBXnbr) { volatile struct MBOX *邮箱; Mailbox =&ECanaMboxs.MBOX0 + MBXnbr; TestMbox1 = Mailbox->MDL.all;//= 0x9555AAAn (n 是 MBX 编号) TestMbox2 = Mailbox->MDH.all; //= 0x89ABCDEF (常量) TestMbox3 = Mailbox->MSGID.all;//= 0x9555AAAn (n 是 MBX 编号) }// rcv MBX 的 MSGID 作为 MDL 数据进行传输。 void mailbox_check (int32 T1、int32 T2、int32 T3) { if ((T1!= T3)||(T2!= 0x89ABCDEF)) { 错误计数++; } 其他 { PassCount++; } } void canb_config (void){ struct eCAN-regs ECanbShadow; //写入接收邮箱 MBOX16 - 31的 MSGID 字段 ECANbMboxs.MBOX16.MSGID.ALL = 0x00000000; ECANbMboxs.MBOX17.MSGID.ALL = 0x00080001; ECANbMboxs.MBOX18.MSGID.ALL = 0x000F0002; ECANbMboxs.MBOX19.MSGID.ALL = 0x00100003; ECANbMboxs.MBOX20.MSGID.ALL = 0x00140004; ECANbMboxs.MBOX21.MSGID.ALL = 0x00180005; ECANbMboxs.MBOX22.MSGID.ALL = 0x001F0006; ECANbMboxs.MBOX23.MSGID.ALL = 0x00000007; ECANbMboxs.MBOX24.MSGID.ALL = 0x00000008; ECANbMboxs.MBOX25.MSGID.ALL = 0x00000009; ECANbMboxs.MBOX26.MSGID.ALL = 0x0000000A; ECANbMboxs.MBOX27.MSGID.ALL = 0x0000000B; ECANbMboxs.MBOX28.MSGID.ALL = 0x0000000C; ECANbMboxs.MBOX29.MSGID.ALL = 0x0000000D; ECANbMboxs.MBOX30.MSGID.ALL = 0x0000000E; ECANbMboxs.MBOX31.MSGID.ALL = 0x0000000F; ECANbRegs.CANME.ALL = 0xFFFFFF0000; ECanbRegs.CANMD.ALL = 0xFFFFFF0000;// 0-15tx 16-31rx ECANbMboxs.MBOX16.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX17.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX18.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX19.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX20.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX21.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX22.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX23.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX24.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX25.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX26.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX27.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX28.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX29.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX30.MSGCTRL.bit.DLC = 8; ECANbMboxs.MBOX31.MSGCTRL.bit.DLC = 8; } //==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== //不再需要。 //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
请下载我的应用报告 http://www.ti.com/lit/spra876 。 它有许多经过测试的示例。 我还敦促您查看提供的调试提示。
请下载 SPRA876并查看 CAN_ECHO-AB