当前位置:首页 > 片上电子信息系统,基于EDA的FPGA,串口通信及串口中断
2.4 任务四 2.4.1 实验目的
在程序的主循环中使LED灯闪烁。同时监听串口中断,如果串口上有接收数据,则把数据转发回PC机串口。需要使用Microblaze中断方式。
2.4.2 实验内容
建立一个包含下列IP的处理器系统: 1、新建硬件环境
2、添加.c文件
2.4.3 实验步骤及程序
1、新建硬件环境
在IP Catalog中从Clock,Reset and Interrupt部分添加XPS Interrupt Controller, 添加和连接中断控制器
29
设置 intc 的地址。
在PORT下,将RS232实例的interrupt端口设为New Connection, 出现信号名字
RS232_Interrupt.通过选择New Connection,为microblaze_0实例的INTERRUPT(外部中断请求)端口生成一个新的连接。这样就创建一个叫microblaze_0_ INTERRUPT的信号。
使用microblaze_0_INTERRUPT网络,连接intc实例的中断输出端口Irq到Microblaze中断输入端口。点击intc域的intr域,来打开Interrupt Connection 对话框。点击左侧的RS232_Interrupt,并且点击符号添加Connected Interrupts域,点击OK按钮。
30
选择Hardware->Generate Netlist。
选择Hardware->Generate Bitstream
31
2、修改.c文件
#include \#include \#include \
#include \#include \
#define XPAR_RS232_BASEADDR 0x84000000
char buff;
void uart0_int_handler(void) {
XGpio leds_out;//指向GPIO
XGpio_Initialize (&leds_out, XPAR_LEDS_DEVICE_ID);////
//对象的指针 ;deviceid是Xgpio控制的唯一识别号
XGpio_SetDataDirection (&leds_out, 1, 0x00);////此函数用于说明指针的方向,DirectionMask是离散输出输入标志0 in,1 out
while(!XUartLite_mIsReceiveEmpty(XPAR_RS232_BASEADDR)) //判断串口不为空
//判断UART的数据是否读空。参数为UART地址。返回值1表示已经读空。 {
buff =XUartLite_RecvByte(XPAR_RS232_BASEADDR); XUartLite_SendByte(XPAR_RS232_BASEADDR, buff); switch(buff) {
case 0x31: XGpio_DiscreteWrite(&leds_out, 1, 0x01); break; case 0x32: XGpio_DiscreteWrite(&leds_out, 1, 0x02); break; case 0x33: XGpio_DiscreteWrite(&leds_out, 1, 0x04); break; case 0x34: XGpio_DiscreteWrite(&leds_out, 1, 0x08); break; case 0x35: XGpio_DiscreteWrite(&leds_out, 1, 0x10); break; case 0x36: XGpio_DiscreteWrite(&leds_out, 1, 0x20); break;
32
共分享92篇相关文档