280025上的 SCI 似乎与上述 SCI、2407、28069、28388略有不同。
我有一段代码、在过去30年中、我已经为我的发送中断例程运行过。 已经在 Z80、8031、6502和上面提到的其他 TI DSP 上使用过它。
非常基本的东西 设置一个非 FIFO 串行端口。 在缓冲器中传输消息。 在中断之外发送一个字符以"灌注泵"。 一旦 TXBUF 为空、就会发生中断、加载下一个字符、确认中断并离开。
这将一直运行、直到达到 EOF 字符(在我的例子中为0xff)。
280025不是这样。 我加载第一个字符、中断发生两次、然后再也不会中断。
_interrupt void SCITXINTA_ISR (void)
{
asm (" CLRC INTM");/*启用全局中断*
if (通信标志.xming=1)
{
if ((TXBUF[IntTXPTR]!= 0xFF)&&(IntTXPTR <=XMITBufLen))//需要 xmit/
{
//SCI_writeCharBlockingNonFIFO (SCIA_BASE、TXBUF[IntTXPTR]);
SCI_writeCharNonBlocking (SCIA_BASE、TXBUF[IntTXPTR]);
IntTXPTR++;
}
否则//xmit 已完成
{
对于(xser=0;xser < XMITBufLen;xser++)//填充具有0ff 的缓冲区以"清除"
{
TXBUF[xser]= 0xFF;
XMITString[xser]= 0;
}
通信 Flags.xming=0;
GPIO_writePin (DEVICE_GPIO_PIN_485_ENA、0);//关闭485发送器
SCI_writeCharNonBlocking (SCIA_BASE、255U);//发送换字符行。
}//结束其他
}//end if xming
else//this is here because the xmit register is ready for another character.(其他//因为 xmit 寄存器已准备好接收另一个
//但最后一个字符是
{
GPIO_writePin (DEVICE_GPIO_PIN_485_ENA、0);
// GpioDataRegs.GPBDAT.bit.GPIO50 = 0;//关闭发送器&=~0x0004;//was 0x0004
}
INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group9);
返回;
}//end if ti
表扬? 绝妙的创意?