我使用的是 HALCOGEN 和 FreeRTOS 提供的 SCI 驱动程序。 我使用 GIO 向外部 RS485收发器发送使能线路。 当我需要传输时、我升高 GIO 并进行传输。 我的问题是、传输完成后、我需要清除 GIO。 当 TX_LENGTH 为零时,我尝试清除 linHighLevelInterrupt()中的 GIO,但 GIO 太早清除,收发器不会发送最后一个字节。 在 TX 移位寄存器发送完所有位之前、我似乎得到了 TX 就绪中断。 当传输真正完成时、如何获得中断? 以下是我对 linHighLevelInterrupt()开关案例12的修改:
案例12U:
/*发送*/
/*SAFETYMCUSW 30 S MR:12.2、12.3 "用于发送/接收轮询和中断模式下的数据计数"*/
-g_sciTransfer_t.TX_length;
如果((g_sciTransfer_t.TX_length)> 0U)
{
uint8 txdata =* g_sciTransfer_t.TX_data;
scilinREG->TD =(uint32)(txdata);
/*SAFETYMCUSW 567 S MR:17.1,17.4 "需要指针增量"*/
G_sciTransfer_t.TX_DATA++;
}
其他
{
scilinREG->CLEARINT = SCI_TX_INT;
sciNotification (scilinREG、(uint32) SCI_TX_INT);
//如果 TX 发送 reg 为空,则我们可以
//关闭使能线
gioSetBit (gioPORTA、LIN_EN、false);
}
中断;