主题中讨论的其他器件:HALCOGEN
我已经编写了从串行端口接收数据的代码、用于相同的目的。Halcogen 设置如下


代码写入接收如下所示:
空 sci3高 LEVELInterrupt (空)
{
uint32 vec = sciREG3->intvecT0;
uint8字节;
/*用户代码开始(37)*/
/*用户代码结束*/
开关(VEC)
{
案例1U:
sciNotification (sciREG3、(uint32) SCI_WAKE_INT);
中断;
案例3U:
sciNotification (sciREG3、(uint32) SCI_PE_INT);
中断;
案例6U:
sciNotification (sciREG3、(uint32) SCI_FE_INT);
中断;
案例7U:
sciNotification (sciREG3、(uint32) SCI_break_INT);
中断;
案例9U:
sciNotification (sciREG3、(uint32) SCI_OE_INT);
中断;
案例11U:
/*接收*/
字节=(uint8)(sciREG3->RD & 0x000000FFU);
xResult = xEventGroupSetBitsFromISR (Tsk_eventhandler, RS232ISREVT,&xHigherPriorityTaskWokon);
/*我在这里设置事件位*/
/* if (g_sciTransfer_t[2U].rx_length >0U)
{
*g_sciTransfer_t[2U].rx_data =字节;
G_sciTransfer_t[2U].rx_data++;
g_sciTransfer_t[2U].rx_length--;
if (g_sciTransfer_t[2U].rx_length == 0U)
{
sciNotification (sciREG3、(uint32) SCI_RX_INT);
}
}*/
中断;
案例12U:
/*发送*/
/*SAFETYMCUSW 30 S MR:12.2、12.3 "用于发送/接收轮询和中断模式下的数据计数"*/
-g_sciTransfer_t[2U].TX_length;
if (g_sciTransfer_t[2U].TX_length > 0U)
{
uint8 txdata =* g_sciTransfer_t[2U].TX_data;
sciREG3->TD =(uint32) txdata;
G_sciTransfer_t[2U].TX_DATA++;
}
其他
{
sciREG3->CLEARINT =(uint32) SCI_TX_INT;
sciNotification (sciREG3、(uint32) SCI_TX_INT);
}
中断;
默认值:
/*幻象中断、清除标志并返回*/
sciREG3->FLR = sciREG3->SETINTLVL & 0x07000303U;
中断;
}
/*用户代码开始(38)*/
/*用户代码结束*/
}
接收功能的代码如下图所示:


代码目标:
1)未接收串行端口上指定的所有字节:
示例:给定的字符串-> InputStringonSCI3port
观察到的输入: 读取后缺少随机的几个字节
2)在收到数据后等待 while 循环:

3)为了避免在 while 循环中等待、我使用了 API uint32 sciIsRxReady (sciBASE-t * sci)来检查中断
->未获得中断 SCI_RX_INT 始终为低电平。


