工具/软件:TI-RTOS
我需要 TI 的回复。
目前,我有两个 EK-TM4C1294XL 用于在9位模式下试用 UART。
EK1是主设备、而 EK2是外设。
您能解释一下如何在主器件和外设中设置 UART9BitAddrSend 和 UART9BitAddrSet、以便在9位模式下 EK1和 EK2之间实现双向通信。 我想看到9位地址匹配中断在 EK1和 EK2中发生。 请使用 EK1和 EK2的数字示例。
谢谢、
Priya
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI-RTOS
我需要 TI 的回复。
目前,我有两个 EK-TM4C1294XL 用于在9位模式下试用 UART。
EK1是主设备、而 EK2是外设。
您能解释一下如何在主器件和外设中设置 UART9BitAddrSend 和 UART9BitAddrSet、以便在9位模式下 EK1和 EK2之间实现双向通信。 我想看到9位地址匹配中断在 EK1和 EK2中发生。 请使用 EK1和 EK2的数字示例。
谢谢、
Priya
以下是代码部分:
EK1 (主设备)
内部
main (空)
{
ROM_UARTEnable (UART5_BASE);
ROM_UARTFIFODisable (UART5_BASE);
ROM_UART9BitEnable (UART5_BASE);
ROM_UART9BitAddrSet (UART5_BASE、0x43、0xFF);//x43是 EK2的虚拟外设地址。
ROM_UART9BitAddrSend (UART5_BASE、0x43);
//
//启用 UART 中断。
//
ROM_IntEnable (INT_UART5);
ROM_UARTIntEnable (UART5_BASE、UART_INT_9BIT | UART_INT_RX | UART_INT_RT);
无效
UARTIntHandler (空)
{
uint32_t ui32Status;
//
//获取中断状态。
//
ui32Status = UARTIntStatus (UART5_BASE、TRUE);
//
//清除已发出的中断。
//
ROM_UARTIntClear (UART5_BASE、ui32Status);
if ((UART_INT_RT 和 ui32Status)=UART_INT_RT){
while (ROM_UARTBusy (UART5_BASE))
{
//执行 nothng
}
}
if (((UART_INT_RX 和 ui32Status)== UART_INT_RX)){
IF (GPIOPinRead (GPIO_PORTN_BASE、GPIO_PIN_1))
{
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、0);
}
其他
{
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、2);
}
}
if (((UART_INT_9BIT & ui32Status)=UART_INT_9BIT){
//接收 UART 字符
while (ROM_UARTCharsAvail (UART5_BASE))
{
//
//从 UART 读取下一个字符并将其写回 UART。
//
ROM_UARTCharGetNonBlocking (UART5_BASE);
//uint32_t c = UARTCharGet (UART5_BASE);
//
//闪烁 LED 以显示字符传输正在发生。
//
IF (GPIOPinRead (GPIO_PORTN_BASE、GPIO_PIN_1))
{
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、0);
}
其他
{
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、2);
}
}
}
}
EK2 (外设)
内部
main (空)
{
ROM_UARTEnable (UART5_BASE);
ROM_UART9BitEnable (UART5_BASE);
ROM_UART9BitAddrSet (UART5_BASE、0x21、0xFF);
//0x21主机 EK1的虚拟地址
ROM_UART9BitAddrSend (UART5_BASE、0x21);
ROM_UARTFIFODisable (UART5_BASE);
//
//启用 UART 中断。
//
ROM_IntEnable (INT_UART5);
ROM_UARTIntEnable (UART5_BASE、UART_INT_RT | UART_INT_RX | UART_INT_9BIT);
无效
UARTIntHandler (空)
{
uint32_t ui32Status;
//
//获取中断状态。
//
ui32Status = UARTIntStatus (UART5_BASE、TRUE);
//
//
//清除已发出的中断。
//
ROM_UARTIntClear (UART5_BASE、ui32Status);
if ((UART_INT_RT 和 ui32Status)=UART_INT_RT){
while (ROM_UARTBusy (UART5_BASE))
{
//执行 nothng
}
}
if (((UART_INT_RX 和 ui32Status)== UART_INT_RX)){
IF (GPIOPinRead (GPIO_PORTN_BASE、GPIO_PIN_1))
{
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、0);
}
其他
{
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、2);
}
}
if (((UART_INT_9BIT & ui32Status)=UART_INT_9BIT)){
//接收 UART 字符
while (ROM_UARTCharsAvail (UART5_BASE))
{
//
//从 UART 读取下一个字符 //
ROM_UARTCharGetNonBlocking (UART5_BASE);
}
IF (GPIOPinRead (GPIO_PORTN_BASE、GPIO_PIN_1))
{
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、0);
}
其他
{
GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、2);
}
RxComplete = 1;
}
}
设置图片(EK1和 EK2单独供电)。
谢谢、
Priya
我看到两个直接的问题
if ((UART_INT_RT 和 ui32Status)=UART_INT_RT){ while (ROM_UARTBusy (UART5_BASE)) { //进行通知 } }
您没有对接收超时做出任何响应。 因此、接收到的任何未超过接收阈值的数据都将丢失。
if (((UART_INT_9BIT & ui32Status)=UART_INT_9BIT){ //接收 UART 字符 while (ROM_UARTCharsAvail (UART5_BASE)) { // //从 UART 读取下一个字符并将其写回 UART。 // ROM_UARTCharGetNonBlocking (UART5_BASE); //uint32_t c = UARTCharGet (UART5_BASE); // //闪烁 LED 以显示字符传输正在发生。 // IF (GPIOPinRead (GPIO_PORTN_BASE、GPIO_PIN_1)) { GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、0); } 其他 { GPIOPinWrite (GPIO_PORTN_BASE、GPIO_PIN_1、2); } }
您尝试在9位中断响应中读取一个字符。 首先、您不会在9位1之后发送任何字符。 其次、即使您这样做、也不会有时间完全接收一个数据并在 FIFO 中进行读取。
Robert