赞
踩
目录
利用 UART IP 以及 AXI Interrupt Contriller IP 实现通过串口发送数据产生中断,控制器接收到中断并将串口发送出来的数据重新通过串口打印出来。
实验框图比较简单,相比较 hello world 的实验,只添加了一个中断 AXI Interrupt Contriller IP,用于实现接收串口的中断,并反馈给控制器。
将原有的 Hello World 实验工程另存为,命名为 uart_intr 保存
打开 block design,添加中断 AXI Interrupt Contriller IP,并将 uart IP 中的中断信号接到中断IP上,其余自动连线即可。
最后重新 Generate Output Products 并生成顶层文件,约束文件保持不变。
重新生成比特流文件,并导入到 SDK,启动 SDK 进行软件部分的设计。
进入到 SDK 的开发界面中,新建一个工程文件,命名为 uart_intr,并在工程中新建一个设计文件命名为main.c。
在.c文件中将以下代码拷贝进去。
程序的大致过程为:
- #include "xil_exception.h"
- #include "xdebug.h"
- #include "xparameters.h"
- #include "xintc.h"
- #include "xuartlite.h"
- #include "xuartlite_l.h"
-
- #define UART_DEVICE_ID XPAR_UARTLITE_0_DEVICE_ID //串口器件 ID
- #define UART_INTR_ID XPAR_INTC_0_UARTLITE_0_VEC_ID //串口中断 ID
- #define INTC_ID XPAR_INTC_0_DEVICE_ID //中断控制器 ID
-
- #define RX_NOEMPTY XUL_SR_RX_FIFO_VALID_DATA // 接收 FIFO 非空
-
- static XIntc Intc; //中断控制器实例
- static XUartLite Uart; //串口实例
-
- void uart_handler(void *CallbackRef);
-
- int main(void){
- //初始化串口设备
- XUartLite_Initialize(&Uart , UART_DEVICE_ID);
- //初始化中断控制器
- XIntc_Initialize(&Intc, INTC_ID);
- //关联处理函数
- XIntc_Connect(&Intc, UART_INTR_ID,(XInterruptHandler)uart_handler,&Uart);
- //使能串口
- XUartLite_EnableInterrupt(&Uart);
- //打开中断控制器
- XIntc_Start(&Intc, XIN_REAL_MODE);
- //使能中断控制器
- XIntc_Enable(&Intc,UART_INTR_ID);
- //设置并打开中断异常处理功能
- Xil_ExceptionInit();
- Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
- (Xil_ExceptionHandler)XIntc_InterruptHandler , &Intc);
- Xil_ExceptionEnable();
- while(1);
- }
-
- void uart_handler(void *CallbackRef)//中断处理函数
- {
- u8 Read_data;
- u32 isr_status;
- XUartLite *InstancePtr= (XUartLite *)CallbackRef;
-
- //读取状态寄存器
- isr_status = XUartLite_ReadReg(InstancePtr->RegBaseAddress ,
- XUL_STATUS_REG_OFFSET);
- if(isr_status & RX_NOEMPTY){ //接收 FIFO 中有数据
- //读取数据
- Read_data=XUartLite_ReadReg(InstancePtr->RegBaseAddress ,
- XUL_RX_FIFO_OFFSET);
- //发送数据
- XUartLite_WriteReg(InstancePtr->RegBaseAddress ,
- XUL_TX_FIFO_OFFSET, Read_data);
- }
- }
- //代码源于正点原子
最后连接到开发板,将程序烧录进去,在串口助手连接好之后(选对端口并配置波特率为115200),在串口发送hello world,可以看到串口可以接收到hello world,表示实验成功!
【Xilinx AX7103 MicroBalze学习笔记1】MicroBlaze介绍
【Xilinx AX7103 MicroBalze学习笔记2】MicroBlaze 串口发送 Hello World 实验
【Xilinx AX7103 MicroBalze学习笔记3】MicroBlaze 利用 AXI GPIO 控制 LED 灯
【Xilinx AX7103 MicroBalze学习笔记4】MicroBlaze 按键中断实验
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。