|
用LPC1788和单片机485串口通信,在单片机发给LPC时如果连续发同一个数据则接收正确。但是我单步调试的情况下,在单片机端发一个数据,在LPC中断程序中不能马上进去,要等到我单片机再发送一次数据,然后进入LPC中断,先是线接收中断,然后是接收中断,接收的数据也是不对的。这时为何呢?
//3.配置UART参数
UART_ConfigStructInit(&UARTConfigStruct);
// UARTConfigStruct.Baud_rate = 4800; //修改默认配置的波特率
//4.初始化UART
UART_Init(UART_3, &UARTConfigStruct);
//5.配置FIFO
UART_FIFOConfigStructInit(&UARTFIFOConfigStruct);//FIFO默认值配置
// UARTFIFOConfigStruct.FIFO_Level = UART_FIFO_TRGLEV2;//更改默认配置 FIFO触发深度8字符
//6.初始化FIFO
UART_FIFOConfig(UART_3, &UARTFIFOConfigStruct);//FIFO初始化
//7.使能UART
UART_TxCmd(UART_3, ENABLE);
//8.使能UART RX 中断(先不使能发送中断)
UART_IntConfig(UART_3, UART_INTCFG_RBR, ENABLE);
// UART_IntConfig(UART_3,UART_INTCFG_THRE,ENABLE);
//9.使能UART 线状态 中断
UART_IntConfig(UART_3, UART_INTCFG_RLS, ENABLE/*DISABLE*/);
//10.设置中断优先级 抢占式1 子优先级1
NVIC_SetPriority(UART3_IRQn, ((0x01<<3)|0x01));
//11.使能各中断
NVIC_EnableIRQ(UART3_IRQn);//使能中断
中断子程序:
void UART3_IRQHandler(void)
{
uint32_t int_src, temp, temp1;
// OSIntEnter();
//1.确定中断源
int_src = UART_GetIntId(UART_3);
temp = int_src & UART_IIR_INTID_MASK; //中断标识
//2.接收线 中断
if(temp==UART_IIR_INTID_RLS)
{
//2.1 检查线状态
temp1 = UART_GetLineStatus(UART_3);//读取LSR时中断会被清除
temp1 &= (UART_LSR_OE | UART_LSR_PE | UART_LSR_FE | UART_LSR_BI | UART_LSR_RXFE);
//2.2 处理错误
if(temp1)
{
}
}
//3. 接收或者超时中断
if ((temp == UART_IIR_INTID_RDA) || (temp == UART_IIR_INTID_CTI))
{
UART_Int_Receive();
}
//4. 发送中断(FIFO为空)
if (temp == UART_IIR_INTID_THRE)
{
// UART_Int_Transmit(0XF7,0XF7,5,(uint8_t *)RUN);
}
// OSIntExit();
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|