我原来一直用普通串口作为通讯端口在调试,今天换了高速串口1调试,监视ARM中的变量发现接受到的串口数据不正确。测试硬件信号也读正常。
串口1初始化代码如下:
void UART1_Init (void)
{
HSU1_IIR = 0x39; /* 清零中断标志 */
/*
*设置波特率
*/
HSU1_RATE = 0x07; /*13M/(7+1)/14=116071.43(115200)*/
/*
* 使能接收中断,设置时钟偏移量和收发触发深度
*/
//HSU1_CTRL = 0x00011E4a;
HSU1_CTRL = (0x02 <<0) | //选择发送FIFO的触发深度为8
(0x05 <<2) | //接受FIFO的触发深度为48
(0x00 <<5) | //禁止发送中断
(0x01 <<6) | //使能接受中断
(0x0f <<9) | //偏移15个时钟
(0x01 <<16); //4个字符时间后 置位超时标志
/*
* 初始化UART VIC 中断接口,高电平触发
*/
vicIrqFuncSet(VIC_CHANNEL_IIR1,INT_EDGE_TYPE_UP,(unsigned int)IRQ_UART1);
}
后来我用3250开发板来测试,用杜邦线把P1的RXD1 TXD1分别接到JP12的RXD5 TXD5,再接上串口测试,发现用原例程,ARM发送过来的数据是正确的,而用串口调试工具发给ARM的数据有时不正确。光盘上例程的串口1初始化代码为
void UART1_Init (void)
{
UART_LOOP = 0; /* 禁止UART的回写模式 */
MIC_ER = 0xC0000003; /* 开子中断 */
HSU1_IIR = 0x39; /* 清零中断标志 */
/*
*设置波特率
*/
HSU1_RATE = 0x07;
/*
* 使能接收中断,设置时钟偏移量和收发触发深度
*/
HSU1_CTRL = 0x00011E48;
/*
* 初始化UART VIC 中断接口,高电平触发
*/
micIrqFuncSet(UART1_INT, 1, (unsigned int)IRQ_UART1);
}
请各位大侠帮我看看是哪里出了问题。
串口调试工具配置如下:
此主题相关图片如下未命名.jpg:
|