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
大家好、
我正在尝试使用 F28335实验套件的 CAN 模块。 问题是我无法连续通信(无限循环)。
数据只传输一次、然后停止传输。 变速器 LED 将亮起1秒钟并停止。 我在此附上正在使用的代码。
我试了1) for (;)
2) while (1)
如果要对代码进行任何更改、请建议我。
// TI 文件$Revision:/main/2 $ //签入$Date:2009年7月30日18:44:22 $ //################################################################################################ //文件名:Example_28xECAN_A_TO_B_Xmit.c // 说明:eCAN-A 至 eCAN-B TXLOOP -发送循环 // 假设: // //此程序需要 DSP2833x 头文件。 // /// 2833x DSP 的两个 CAN 端口需要相互连接 //(通过 CAN 收发器) // eCANA 位于 GPIO31 (CANTXA)和 // GPIO30 (CANRXA) // // eCANB 位于 GPIO8 (CANTXB)和 // GPIO10 (CANRXB) // //根据提供的信息,此项目被配置为“引导至 SARAM” //操作。 2833x 引导模式表如下所示。 //有关配置 eZdsp 引导模式的信息, //请参阅 eZdsp 附带的文档, // $Boot_Table: // // GPIO87 GPIO86 GPIO85 GPIO84 // XA15 XA14. XA13. XA12 // PU PU PU PU // ================================================================================ // 1 1 1 1跳转至闪存 // 1 1 1 0 SCI-A 引导 // 1 1 0 1个 SPI-A 引导 // 1 1 0 0 I2C-A 引导 // 1 0 1 1 eCAN-A 引导 // 1 0 1 0 McBSP-A 引导 // 1 0 0 1跳转至 XINTF x16 // 1 0 0 0跳转至 XINTF x32 // 0 1 1 1跳转至 OTP // 0 1 1 0并行 GPIO I/O 引导 // 0 1 0 1个并行 XINTF 引导 // 0 1 0 0跳转至 SARAM<-"boot to SARAM" // 0 0 1 1分支以检查引导模式 // 0 0 1 0引导至闪存、旁路 ADC 校准 // 0 0 0 1引导至 SARAM、旁路 ADC 校准 // 0 0 0 0引导至 SCI-A、旁路 ADC 校准 // BOOT_Table_END$ // 说明: // //此示例使用 MAILBOX5将数据传输到另一个 CAN 模块 //此程序可以永久循环或传输"n"次数, //其中"n"为 TXCOUNT 值。 // //此示例可用于检查 CAN-A 和 CAN-B 由于 CAN-B 在 DSP2833x_eCAN-c 中被//初始化、它将确认 运行此代码的节点发送的所有帧//。 // 2833x DSP 的两个 CAN 端口需要相互连接(通过 CAN 收发器) // //################################################################################## //原始作者:HJ // //$TI 发行版:2833x/2823x 头文件 v1.32 $ //$发行 日期:2010年6月28日$ //################################################################## #include "DSP28x_Project.h" //设备头文件和示例包括文件 #define TXCOUNT 100 //传输将发生(TXCOUNT)次。 // 此示例 long 的 Globals I; 长循环计数= 0; void main() { //为 CAN 控制寄存器创建影子寄存器结构。 这是必需的、因为只允许对这些寄存器进行32位访问。 对 这些寄存器的16位访问可能会破坏寄存器内容。 当写入位16 - 31 */ struct ECAN_REGS 的位(或位组)时尤其如此; //步骤1。 初始化系统控制: // PLL、看门狗、启用外设时钟 //此示例函数位于 DSP2833x_sysctrl.c 文件中。 InitSysCtrl(); //步骤2。 初始化 GPIO: //此示例函数位于 DSP2833x_GPIO.c 文件中, //说明了如何将 GPIO 设置为其默认状态。 // InitGpio ();//针对此示例跳过 //针对此示例只初始化 eCAN 引脚 //此函数位于 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(); //此示例中使用的中断被重新映射到 这个文件中的// ISR 函数。 //此示例中未使用中断。 //步骤4. 初始化所有器件外设: //此函数位于 DSP2833x_InitPeripherals.c // InitPeripherals ();//此示例不需要 //在本例中仅初始化 eCAN-A 和 eCAN-B //此函数位于 DSP2833x_eCAN-c InitECan ()中; //步骤5。 用户特定代码: //写入 MSGID 字段*/ ECANaMboxs.MBOX25.MSGID.ALL = 0x95555555;//扩展标识 符//将 邮箱配置为发送邮箱*/ ECANaMD. CANMD.ALL = ECANaRegs.CANMD.ALL;ECANaME CANMME.bit.ECANA Shadow = ECANAN.0*= ECANA CANCANA REGN.CAN.CAN.CAN.CANA REGL.ALL;ECANCAN.CANA CAN.CAN.CANA CAN.CAN.CAN.CANA CAN.CAN.CAN.CAN.CANA CAN.CAN.CAN.CAN.CAN.CAN.CAN.REGANGL.ALL = En = ECANA CAN.CAN.CAN.CAN.CAN.CAN.CAN.CAN.CAN.CAN.CAN.CANA CAN.CAN.CAN.CAN.CAN /*写入主控寄存器中的 DLC 字段*/ ECANaMboxs.MBOX25.MSGCTRL.bit.DLC = 8; //写入邮箱 RAM 字段*/ ECANaMboxs.MBOX25.MDL.all = 0x55555555; ECANaMboxs.MBOX25.MDH.ALL = 0x555555 ; //开始传输时* ECanaShady.CANTRS.ALL = 0; ECanaShady.CANTRS.bit.TRS25 = 1; //为待测试的邮箱设置 TRS ECANaRegs.CANTRS.ALL = ECANaShady.CANTRS.ALL; /*执行 { ECanaShady.Canta.all = ECanaRegs.Canta.all; } while (ECANaShady.CANTa.bit.TA25 =0);*///等待 TA5位被置位。 ECanaShading.Canta.all = 0; ECanaShading.Canta.bit.TA25 = 1;//清除 TA5 ECanaRegs.Canta.all = ECanaShady.Canta.all; 循环计数++; } asm (" ESTOP0");//在此处停止 }
您好!
您为什么评论了 do while 循环?
此致、
Gautam
Gautham 您好!
我刚才评论了它以便进行调试、我也尝试使用 DO while 循环、但我遇到了相同的问题。