多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
` `zynq生成的工程中,串口一般用于将数据传输到电脑显示,但是有时候我们需要将数据从电脑利用串口将数据发送到zynq的PS端,为了实现这个功能,且不使用中断,这里使用FIFO来接收串口的数据。 ` `编写如下接收函数: ``` /** * 调试标准串口输入检测函数 * 要求出口发送过来的数据以s为头,数字为数据,e为结束符 * 如:s123e 数字部分为u32型的数据,注意不要越界 * 该函数请尽量放在主函数的循环体中 * *p的值为转换后的数据 * 返回值:当接收到的数据满足格式要求,且接收完毕,返回1 ,否则返回0 */ u32 scan_in(u32 *p) { char c=0; u8 m_idx = 0; u32 state = 0; static u32 uart_rt = 0; static u32 ls_data = 0; while(XUartPs_IsReceiveData(STDIN_BASEADDRESS)) { c = XUartPs_ReadReg(STDIN_BASEADDRESS, XUARTPS_FIFO_OFFSET); if(c == 's') { uart_rt = 0; } else if(c == 'e') { state = 1; ls_data = uart_rt; } else { uart_rt = uart_rt*10 + (c - '0'); } } *p = ls_data; return state; } ``` ` `这样就实现发送一个u32型的数据到zynq。 使用方法: ``` int std_uart_recv_test() { u32 data =0; while(1) { usleep(10); //printf("num:%u",data); if(scan_in(&data)) { printf("串口发送的数据为:%u\r\n",data); } } ``` 效果如下所示: ![](https://img.kancloud.cn/e4/3a/e43afe5f7fbe2dc2634d7148f9dfdfb6_947x700.png) ![](https://img.kancloud.cn/0f/56/0f56e1c3db0990b141af83d9db372be8_955x699.png) ![](https://img.kancloud.cn/8f/00/8f003e6ffa645c59af26bf3abc8809b7_953x695.png)