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.

[参考译文] 编译器/TMS320F2812:当我从调试开始设置 H/W 断点时、外部中断引脚工作、但如果我不#39;t 设置断点、则不工作

Guru**** 2341440 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/589387/compiler-tms320f2812-external-interrupt-pin-works-when-i-set-h-w-breakpoint-from-the-start-of-the-debug-but-does-not-work-if-i-don-t-set-breakpoints

器件型号: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中获取更多信息


  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Raghu、
    断点不应影响代码的执行路径,至少不应从静态角度影响。 如果您停止处理器、是否设置了 XINT1中断标志? 是否启用了中断? 您是否已尝试从 RAM 完全运行代码? 您需要将代码归结为一些简单的操作才能进行调试。 我们很高兴澄清模块的任何位/寄存器/功能的行为。 请继续调试您的代码并使用论坛提出具体问题。