请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F2812 工具/软件:TI C/C++编译器
您好!
我正在 TI DSP 上运行 EtherCAT 从站代码、目前这与 EtherCAT 中的分布式时钟有关。 我有一个背面 ET1100 EtherCAT 板、它通过 SPI 引脚连接到我的 TI DSP。 一旦我的主器件(PC)发送直流时钟信号、ET1100就会将其转换为脉冲(同步脉冲)、并通过我的外部中断(配置的 XINT1)将其发送到我的 TI DSP。
当我在调试开始时设置断点时、我看到代码命中 XINT1 ISR、但当我在调试开始时未设置断点时(我在稍后阶段设置断点、以确保 ISR 已命中) 则永远不会到达 ISR (HIT)。 我不确定这种奇怪的行为。 我还在使用 BIOS.tcf 来配置 ISR。
中断初始化和 ISR 代码的下面附加。
/*------------------ ;初始化处理器 ;------------------------------------------------------- */ void cpu_init (void) { InitSysCtrl(); //初始化 CPU (文件:sysctrl.c) //将 PIE 控制寄存器初始化为默认状态。 //默认状态为禁用所有 PIE 中断和标志 //被清除。 InitPieCtrl(); // FAST_CODE_RAM 加载开始和加载结束可以相等,因为 // FAST_CODE_MEM 段可以映射到闪存 memcpy (&LNK_FAST_CODE_ram_run_start、 &LNK_FAST_CODE_RAM_LOAD_START、&LNK_FAST_CODE_RAM_LOAD_END -&LNK_FAST_CODE_RAM_LOAD_START); memcpy (&LNK_SECURE_CODE_ram_run_start、 &LNK_SECURE_CODE_RAM_LOAD_START、&LNK_SECURE_CODE_RAM_LOAD_END -&LNK_SECURE_CODE_RAM_LOAD_START); # if (!CFG_HW_MATCK_GMxxx) // LED,移动到 LED.h ????? // XF,P4.17 EALLOW; //启用受保护的寄存器访问 GpioMuxRegs.GPFMUX.bit.XF_GPIOF14=0; // XF 引脚被禁用(eZdsp 上的 LED) GpioMuxRegs.GPFDIR.bit.GPIOF14=1; // 1:输出 GPIOF14 GpioDataRegs.GPFDAT.bit.GPIOF14=0; // 0:清除 GPIOF14 (关闭 LED) EDIS; # endif //初始化 XINTF 区域6和区域7时序 //请参阅 CodeRunFromXintfontF2812EzDSP.cmd 文件。 XINTF_zone6and7_timing (); //初始化闪存 InitFlash(); #ifdef EtherCAT_code external_int_initialize (); #endif } #ifdef EtherCAT_code /* EtherCAT 代码启动*/ /* EtherCAT 特定函数*/ void external_int_initialize (void) { EALLOW;//需要此操作来写入 EALLOW 受保护的寄存 器 PieVectTable.XINT1 =&XINT1_ISR; / PieVect2 =&XINT2_ISR;/ PieT2_ //禁用对 EALLOW 受保护寄存器的写入需要此操作 //在 PIE 中启用 XINT1和 XINT2:组1中断4和5 //启用连接到 WAKEINT 的 INT1: PieCtrlRegs.PIECRTL.bit.ENPIE = 1; //启用 PIE 块 PieCtrlRegs.PIEIER1.bit.INTx4 = 1; //启用 PIE 组1 INT4 // PieCtrlRegs.PIEIER1.bit.INTx5 = 1; //启用 PIE 组1 INT5 IER |= 0x0001; //启用 CPU INT1 EINT; //配置 XINT1 XIntrauptRegs.XINT1CR.bit.Polarity = 0; //下降沿中断 // XIntruptRegs.XINT2CR.bit.Polarity = 1; //上升沿中断 //启用 XINT1和 XINT2 XIntrauptRegs.XINT1CR.bit.ENABLE = 1; //启用 XINT1 // XIntruptRegs.XINT2CR.bit.ENABLE = 1; //启用 XINT2 } 中断空 XINT1_ISR (空) { //EtherCAT_TASK (); // AX_EtherCAT_JETBAR_UPDATE_4kHz (AX_JETBAR * self); //确认此中断以从组1 PieCtrlRegs.PIEACK.all = PIECAT_Groupf*获取更多信息;//确认此中断以从组1中获取更多信息