microblaze之uartlite收发控制
来源:互联网 发布:python 跨平台 编辑:程序博客网 时间:2024/06/06 18:58
在XPS中提供的UART IP只有Lite(精简版)可用,兼容16550模式的UART IP是要付费的。Lite模式的UART比较简单,但是使用时也带来诸多问题,比如中断只有一种模式,即收发都会触发中断并且无法区分,这个确实比较让人恼火。还好在大多数应用场合影响不大。
UART的收发控制有两种方式,一种是查询方式(polled),另一种是中断方式(Interrupt)。查询方式比较简单,不断查询状态寄存器即可。比较常用的是中断方式,ok,来看一段代码吧:
#include "xparameters.h"
#include "xgpio.h"
#include "xutil.h"
#include "xintc.h"
#include "xuartlite.h"
#include "xuartlite_l.h"
//首先定义中断函数
void uart_rev_handler(void)
{
while(!XUartLite_mIsReceiveEmpty(XPAR_RS232_UART_BASEADDR))
{
buff =XUartLite_RecvByte(XPAR_RS232_UART_BASEADDR);
XUartLite_SendByte(XPAR_RS232_UART_BASEADDR, buff);
}
}
int main()
{
xil_printf("--start the program test---\r\n");
XUartLite_Initialize(&RS232_Uart, XPAR_RS232_UART_DEVICE_ID);
//must enable mb_enable bit
microblaze_enable_interrupts();
XUartLite_EnableInterrupt(&RS232_Uart);
//register the isr
XIntc_RegisterHandler(XPAR_INTC_0_BASEADDR, \
XPAR_XPS_INTC_0_RS232_UART_INTERRUPT_INTR,\
(XInterruptHandler)uart_rev_handler,\
(void *)0);
//must enable XIntc_mMasterEnable
XIntc_mMasterEnable(XPAR_INTC_0_BASEADDR);
//must enable specific interrupt(s) in the interrupt controller.
XIntc_mEnableIntr(XPAR_INTC_0_BASEADDR, \
XPAR_PUSH_BUTTONS_POSITION_IP2INTC_IRPT_MASK\
|XPAR_DIP_SWITCHES_8BIT_IP2INTC_IRPT_MASK\
|XPAR_RS232_UART_INTERRUPT_MASK);
while(1);
return 0;
}
可以看出,在UART中断函数中我们只做了一件事情,就是看接收FIFO中是否有数,如果有数的话就读出来。而不对发送产生的中断做出响应。
需要注意的是,要慎用XPS给出的API驱动函数,因为有些函数在调用的时候当条件不满足时会停下来等待,使得整个程序被挂起。
让我比较困惑的一个问题是:XPS驱动给出的API驱动中有两个函数分别是void XUartLite_SetRecvHandler(XUartLite * InstancePtr, XUartLite_Handler FuncPtr, void * CallBackRef)和void XUartLite_SetSendHandler(XUartLite * InstancePtr, XUartLite_Handler FuncPtr, void * CallBackRef),看介绍是说设置中断函数当中断发生的时候被调用。但是在用这个两个函数的时候却无法正常调用UART中断函数,而且看这两个函数就很奇怪,因为我在系统中用了中断管理模块,所有的中断必须连接到中断管理模块上,但是这两个函数明显没有这个接口,那就不是这么用的!或许是当系统中只有UART中断时直接接到processor上的。Maybe, who konws?
- microblaze之uartlite收发控制
- 脉冲控制收发
- 实验--无线收发控制LED
- xilinx 的4个 HDMI的IPCORE, 用一个 Microblaze控制。
- FPGA学习之基于MicroBlaze软核的推箱子游戏设计
- 控制短信猫收发短信 (调用WebServices)
- GPS卫星定位、短信收发控制、系统集成
- 通过sim900短信收发控制stm32设备
- windows udp网络数据包收发控制
- java收发邮件之javamail
- java收发邮件之socket
- winsocket 之收发数据出问题
- 【BLE】CC2541之串口收发
- 【BLE】CC2541之串口收发
- lwip之数据收发流程
- lwip之数据收发流程
- AXI Uartlite学习(二)UART LOOP
- MicroBlaze Core Architecture
- 解决Win7缺失MSVCR120.DLL问题
- 控制语句
- c#操作注册表
- 【运维】VMware vSphere简单了解
- 我的mqtt协议和emqttd开源项目个人理解(9)
- microblaze之uartlite收发控制
- 【BZOJ】1305 [CQOI2009]dance跳舞 网络流
- Mask R-CNN-论文笔记-理解
- 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- jdbcTemplate在执行插入操作的时候如何判断是否插入成功?
- Java BigDecimal详解 运算
- CentOs 设置IP/HostName 方法
- (ssl 1597 洛谷 1880)石子合并
- 数据结构总结之sort(排序)