W601裸机配置串口1可以发送数据但是不能接受数据

发布于 2022-09-23 16:16:35

下面是我写的代码,初始化后可以发送数据,但是一直不进接受中断
`void uart1_init(u32 bound)
{

u32 bd;
u32 apbclk;
tls_sys_clk sysclk;

/* 1.配置IO */
wm_uart1_tx_config(WM_IO_PB_12);
wm_uart2_rx_config(WM_IO_PB_11);

/* 2.波特率设置:
    ubdiv = (apbclk / (16 * bound) - 1)
    ubdiv_frac = ((apbclk % (bound * 16)) / (bound)) */
tls_sys_clk_get(&sysclk);
apbclk = sysclk.apbclk * 1000000;
bd = (apbclk / (16 * bound) - 1) | (((apbclk % (bound * 16)) / (bound)) << 16);
tls_reg_write32(HR_UART0_BAUD_RATE_CTRL, bd);

/* 2.串口参数设置:8位数据位/1位停止位/无奇偶校验位/发送使能/接收使能 */
tls_reg_write32(HR_UART1_LINE_CTRL, ULCON_WL8 | ULCON_TX_EN | ULCON_RX_EN);
/* 3.硬件流控关闭 */
tls_reg_write32(HR_UART1_FLOW_CTRL, 0);
/* 3.不使能DMA */
tls_reg_write32(HR_UART1_DMA_CTRL, 0);
/* 4.FIFO触发设置:1个字节 */
tls_reg_write32(HR_UART1_FIFO_CTRL, 0);
/* 5.开启RX中断:接收触发中断和接收超时中断*/
tls_reg_write32(HR_UART1_INT_MASK, 0xFF & (~(UIS_RX_FIFO | UIS_RX_FIFO_TIMEOUT)));

/* 6.串口接收中断配置 */
NVIC_ClearPendingIRQ(UART1_IRQn);

NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = UART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 7;
NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
    

}
void UART1_IRQHandler(void)
{

tls_reg_write32(HR_UART1_TX_WIN,'1');
tls_reg_write32(HR_UART1_TX_WIN,'\r');
tls_reg_write32(HR_UART1_TX_WIN,'\n');

if(tls_reg_read32(HR_UART1_INT_SRC) & UIS_RX_FIFO)    //接收到数据
{
     USART1_RX_BUF[USART1_RX_STA] =  (u8)tls_reg_read32(HR_UART1_RX_WIN);
     USART1_RX_STA++;
    tls_reg_write32(HR_UART1_INT_SRC, UIS_RX_FIFO);        //清除状态标志位
}    

}
`

查看更多

关注者
0
被浏览
1.9k
ZYQ
ZYQ 2022-09-25
我已不再支持W80X任何相关问题的回复,请大家不要私信,有问题找 isme 谢谢

没搞明白你为什么这样做
image.png

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览