本帖最后由 lvben5d 于 2020-12-21 10:19 编辑
我把我中断处理发给你看下 你注意下跟库相关的 我这个是GD32E103芯片的库 中断标志位分 接收 发送结束 和溢出 3大类
void USART0_IRQHandler(void)
{
if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE))
{
TIMER_CNT(TIMER1) = 0; //因为我向上计数 所以清0就好. 只能靠超时截包
......
TIMER_CTL0(TIMER1) |= 0x00000001;
}
if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_TBE))
{
if(user_usb_info.usart_txbuf_ctr < user_usb_info.usart_txbuf_len[user_usb_info.usart_txbuf_index])
{......
}
else //发送完
{
//查看是否还有下次要发送的数据包
if(user_usb_info.usart_txbuf_len[user_usb_info.usart_txbuf_index]>0)
{
usart_data_transmit(USART0 , user_usb_info.usart_tx_buf[user_usb_info.usart_txbuf_index][0]);
user_usb_info.usart_txbuf_ctr = 1;
}
else //没有 就休息
{
user_usb_info.usart_txbuf_busy = BUS_IDLE;
usart_interrupt_disable(USART0, USART_INT_TBE); //关闭
}
}
}
if(RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_ERR_ORERR))
{
usart_interrupt_flag_clear(USART0, USART_INT_FLAG_ERR_ORERR);
Sysinfo.Decode_year = usart_data_receive(USART0); //这个变量值反正没啥用
}
}
|