2026/4/18 10:29:18
网站建设
项目流程
国外免费推广网站,徐州百度运营中心,seo的中文是什么,南充免费推广网站目录
目标 串口接收中断中记录接收到的数据并置位标志#xff0c; 主循环检测该标志后#xff0c;将接收到的消息统一发送出去。 BD main.cpp
#include xparameters.h
#include xuartps.h
#include xscugic.h
#include xil_exce…目录目标串口接收中断中记录接收到的数据并置位标志主循环检测该标志后将接收到的消息统一发送出去。BDmain.cpp#includexparameters.h#includexuartps.h#includexscugic.h#includexil_exception.h#includexil_printf.h#includesleep.h#includestring.h/* 配置 */#defineUART_DEVICE_IDXPAR_XUARTPS_0_DEVICE_ID#defineUART_INTR_IDXPAR_XUARTPS_0_INTR#defineGIC_DEVICE_IDXPAR_PS7_SCUGIC_0_DEVICE_ID#defineRX_BUF_SIZE64/* 全局对象 */staticXUartPs UartPs;staticXScuGic Intc;/* RX 缓冲 标志 */staticvolatileintrx_ready0;staticvolatileu32 rx_len0;staticu8 rx_buf[RX_BUF_SIZE];/* BSP 风格发送接口 */voidBspUartWrite(uint8_t*buf,uint32_tlen){uint32_tsent0;while(sentlen){sentXUartPs_Send(UartPs,bufsent,len-sent);}}/* UART RX 中断回调 */staticvoidUartHandler(void*CallBackRef,u32 Event,unsignedintEventData){if((EventXUARTPS_EVENT_RECV_DATA)||(EventXUARTPS_EVENT_RECV_TOUT)){if(EventData0rx_ready0){rx_lenEventData;rx_ready1;/* 只置标志不发送 */}/* 重新启动接收 */XUartPs_Recv(UartPs,rx_buf,RX_BUF_SIZE);}}/* UART 初始化 */staticintBspUartInit(void){intStatus;XUartPs_Config*Config;ConfigXUartPs_LookupConfig(UART_DEVICE_ID);if(!Config)returnXST_FAILURE;StatusXUartPs_CfgInitialize(UartPs,Config,Config-BaseAddress);if(Status!XST_SUCCESS)returnStatus;XUartPs_SelfTest(UartPs);XUartPs_SetBaudRate(UartPs,115200);XUartPs_SetOperMode(UartPs,XUARTPS_OPER_MODE_NORMAL);XUartPs_SetHandler(UartPs,UartHandler,UartPs);XUartPs_SetInterruptMask(UartPs,XUARTPS_IXR_RXFULL|XUARTPS_IXR_RXOVR|XUARTPS_IXR_TOUT);XUartPs_SetRecvTimeout(UartPs,8);XUartPs_Recv(UartPs,rx_buf,RX_BUF_SIZE);returnXST_SUCCESS;}/* GIC 初始化 */staticintGicInit(void){intStatus;XScuGic_Config*Cfg;CfgXScuGic_LookupConfig(GIC_DEVICE_ID);if(!Cfg)returnXST_FAILURE;StatusXScuGic_CfgInitialize(Intc,Cfg,Cfg-CpuBaseAddress);if(Status!XST_SUCCESS)returnStatus;Xil_ExceptionInit();Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,(Xil_ExceptionHandler)XScuGic_InterruptHandler,Intc);StatusXScuGic_Connect(Intc,UART_INTR_ID,(Xil_ExceptionHandler)XUartPs_InterruptHandler,UartPs);if(Status!XST_SUCCESS)returnStatus;XScuGic_Enable(Intc,UART_INTR_ID);Xil_ExceptionEnable();returnXST_SUCCESS;}/* main */intmain(void){intStatus;xil_printf(UART RX interrupt flag echo test\r\n);StatusBspUartInit();if(Status!XST_SUCCESS){xil_printf(UART init failed\r\n);while(1);}StatusGicInit();if(Status!XST_SUCCESS){xil_printf(GIC init failed\r\n);while(1);}constchar*msgType something, main loop will echo.\r\n;BspUartWrite((uint8_t*)msg,strlen(msg));while(1){if(rx_ready){/* 主循环里发送 */BspUartWrite(rx_buf,rx_len);/* 清标志 */rx_ready0;rx_len0;}}return0;}