片上电子信息系统,基于EDA的FPGA,串口通信及串口中断 联系客服

发布时间 : 星期二 文章片上电子信息系统,基于EDA的FPGA,串口通信及串口中断更新完毕开始阅读2cbd6a4ee45c3b3567ec8bd2

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