您好!
我在我的代码中设置一个 SCI 中断、如下 所示:
EALLOW; //这是写入 EALLOW 受保护寄存器所必需的
PieVectTable.SCIRXINTA =&sciaRxFifoIsr;
EDIS; //这是禁止写入 EALLOW 受保护寄存器所必需的
scia_fifo_init (); //初始化 SCI-A
void scia_fifo_init()
{
SciaRegs.SCICCR.all =0x0007; // 1停止位, 无回路
//无奇偶校验,8个字符位,
//异步模式,空闲线协议
SciaRegs.SCICTL1.all =0x0003; //启用 TX、RX、内部 SCICLK、
//禁用 RX ERR、睡眠、TXWAKE
SciaRegs.SCICTL2.bit.TXINTENA=1;
SciaRegs.SCICTL2.bit.RXBKINTENA=1;
SciaRegs.SCIHBAUD = 0x0000;
SciaRegs.SCILBAUD = 0xC4;//14400
SciaRegs.SCIFFTX.All=0xC022;
SciaRegs.SCIFFRX.All=0x0022;
SciaRegs.SCIFFCT.All=0x00;
SciaRegs.SCICTL1.all =0x0023; //从复位中撤回 SCI
SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;
SciaRegs.SCIFFRX.bit.RXFIFORESET=1;
}
这是我的 ISR:
_interrupt void sciaRxFifoIsr (void)
{
GpioDataRegs.GPBTOGGLE.bit.GPIO39=1;
if (SciaRegs.SCIRXST.bit.RXERROR){
SciaRegs.SCICTL1.bit.SWRESET=0;//将低电平有效复位。
SciaRegs.SCICTL1.bit.SWRESET=1;
}
SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1; //清除溢出标志
SciaRegs.SCIFFRX.bit.RXFFINTCLR=1; //清除中断标志
PieCtrlRegs.PIEACX.All|=0x100; //发出 PIE ACK
}
我注意到、当我使用 PC 键盘发送字符或数字(来自 Terra Term)时、我必须按两次所选键盘按钮才能获得中断。 我在调试器中检查了它、也使用了 LED。 仅当我发送两次字符时、LED 才会切换。
这个 SCI 接口是如何在这个芯片上工作的?