请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28379D 工具/软件:Code Composer Studio
我想使用一个接收中断来执行 example_2837xDSCi_Echoback.c。
我尝试了以下设置
InitPieCtrl();
//
禁用 CPU __interrupts 并清除所有 CPU __interrupt 标志:
//
IER = 0x0000;
IFR = 0x0000;
//
使用指向 shell 中断
//服务例程(ISR)的指针初始化 PIE 矢量表。
//这将填充整个表,即使在
本示例中未使用__interrupt //也是如此。 这对于调试很有用。
//可以在 F2837xD_DefaultIsr.c 中找到 shell ISR 例程
InitPieVectTable();
EALLOW;
PieVectTable.SCIA_RX_INT =&sciaRxFifoIsr;
EDIS;
scia_fifo_init(); //初始化 SCI FIFO
scia_echoback_init ();//初始化用于 echoback
PieCtrlRegs.PIECTRL.bit.ENPIE 的 SCI = 1;//启用 PIE 块
PieCtrlRegs.PIEIER9.bit.INTx1 = 1;// PIE 组9、INT1
PieIER9
= 0x100;// PIE 组9 = 0x2 INIER9;PIE 组= 1 //启用 CPU INT
;
void scia_echoback_init ()
{
SciaRegs.SCICCR.all = 0x0007;
SciaRegs.SCICTL1.all = 0x0003;
SciaRegs.SCICTL2.all = 0x0003;
SciaRegs.SCICTL2.bit.TXINTENA=1;
SciaRegs.SCICTL2.bit.RXBKINTENA=1;
SciaRegs.SCIHBAUD.ALL = 0x0000;
SciaRegs.SCILBAUD.ALL = 0x00C2;
SciaRegs.SCICTL1.all = 0x0023;
}
中断 void sciaRxFifoIsr (void)
{
uint16 i;
i=SciaRegs.SCIRXBUF.all;//读取数据
scia_xmit (i);
SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1;
SciaRegs.SCIRXST.bit.RXRDY=1;
PieCtrlRegs.PIEACX.ALL = PIEACK_group9;
}
void scia_fifo_init()
{
SciaRegs.SCIFFTX.ALL = 0xE040;
SciaRegs.SCIFFRX.ALL = 0x2044;
SciaRegs.SCIFFCT.all = 0x0;
}
它应该是一个接受 uint16并回波的简单代码。
根据上述设置、当通过 COM 端口发送字符时、不会触发中断子例程本身。