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.

[参考译文] TMS320F28068M:尝试了解示例 external_interupt

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/810002/tms320f28068m-trying-to-understand-example-external_interupt

器件型号:TMS320F28068M
在示例 C:\ti\c2000Ware_1_00_06_00\device_support\f28066\examples\c28\external_interrupt 中 

在某个部分中、它们"使用中断4和5将 XINT1和 XINT2连接到组1"。 由于有96个可用的中断源、我知道这些中断源应该被多路复用为12个可用的 CPU 中断。
每个 CPU 中断都是一个由八个中断组成的"组"。 但是 XINT1和 XINT2如何连接到组1 INT4和 INT5 (它们刚刚被启用)? 为什么 XINT1和 XINT PieVectTables 直接连接到中断函数?
我无法使用相应的代码完全跟踪该案例? 示例中似乎缺少了一些代码、因此真正有意义?提前感谢您。

EALLOW;//这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.XINT1 =&XINT1_ISR;
PieVectTable.XINT2 =&XINT2_ISR;
EDIS;//这是禁止写入 EALLOW 受保护寄存器所必需的 

//
//在 PIE 中启用 XINT1和 XINT2:组1中断4和5
//启用连接到 WAKEINT 的 INT1
//
PieCtrlRegs.PIECTRL.bit.ENPIE = 1; //启用 PIE 块
PieCtrlRegs.PIEIER1.bit.INTx4 = 1; //启用 PIE 组1 int4
PieCtrlRegs.PIEIER1.bit.INTx5 = 1; //启用 PIE 组1 INT5
IER |= M_INT1; //启用 CPU INT1
EINT; 

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

    我认为您已正确理解、代码正确。

    在 C28x 上、中断源硬连线到特定的 PIE 中断。 对于 F2806x、来自 XINT1和 XINT2的中断分别出现在 PIE 组1上;INT1.4和 INT1.5上。 这些行启用 PIE 级别的中断:

    PieCtrlRegs.PIEIER1.bit.INTx4 = 1;
    PieCtrlRegs.PIEIER1.bit.INTx5 = 1;

    ...然后此行启用内核级中断:
    IER |= M_INT1;

    这将启用全局中断屏蔽:
    EINT;

    当内核产生中断时、PC 分支到 RAM 中 PIE 矢量表中包含的地址。 这个表被载入"PieVectTable"结构中的地址;并且这两个中断的 ISR 地址被载入以下行中:

    PieVectTable.XINT1 =&XINT1_ISR;
    PieVectTable.XINT2 =&XINT2_ISR;

    该结构位于文件 F2806x_PieVect.h 中、并在器件配置期间加载默认地址。 以上两行将覆盖用户 ISR 的默认地址。

    您只需在该器件上配置 XINT 中断即可。 随附的幻灯片摘自 F2806x 多日技术讲座、可能会有所帮助。

    此致、

    Richard

    e2e.ti.com/.../C28xm04.pdf