大家好,欢迎来到IT知识分享网。
资料ID:PG144
文档查找软件:DocNav,在安装vivado时可以选择一并安装
Vivado中的GPIO模块框图如下。
下表展示了AXI GPIO的寄存器和相对于基地址的地址偏移值。
这些寄存器是否可用取决于一些配置参数的值。若某个寄存器是不可用的,一个写信号对该寄存器没有效果;当尝试读取该寄存器的值时,将会得到全零值。决定寄存器是否可用的参数如下表。
如上表所示,当Enable Interrupt参数为0时,与中断相关的三个寄存器GIER、IP IER、IP ISR是不可使用的,而对其余寄存器是没有影响的。同理,当使能双通道(Enable Dual Channel)这个参数为0时,通道2的数据寄存器和三态寄存器是不可用的。
Register Space
由于通道1和通道2的数据寄存器与三态寄存器是相同的,所以这里仅介绍五个寄存器。GPIOx_DATA表示通道x的数据寄存器。
GPIOx_DATA
GPIOx_TRI
Interrupts
GIER
IPIER
IPISR
示例程序:GPIO做为输出控制LED,GPIO2做为输入产生中断
在利用Vivado搭建硬件平台的时候已经对GPIO进行了相关设置,程序里首先验证这些设置是否会对相关寄存器进行初始化,如是否会将GPIO2所对应的4个端口全部设置为输入。实验结果表明,寄存器必须由软件初始化。
#include "xil_printf.h" #include "sleep.h" #define GPIOBaADDr 0x #define DATA1OffSet 0x0 #define TRI1OffSet 0x4 #define DATA2OffSet 0x8 #define TRI2OffSet 0xC #define GIEROffSet 0x11C #define IPIEROffSet 0x128 #define IPISROffSet 0x120 #define GETX(x) (*(volatile int *)(GPIOBaADDr + x)) int main() {
/*initialize GPIO*/ if((GETX(TRI1OffSet) & 0xf) == 0x0) {
print("GPIO1 already set to output by hardware platform\r\n"); } else {
print("GPIO1 will set to output by software\r\n"); GETX(TRI1OffSet) &= 0x0; } if((GETX(TRI2OffSet) & 0xf) == 0xf) {
print("GPIO2 already set to input by hardware platform\r\n"); } else {
print("GPIO2 will set to input by software\r\n"); GETX(TRI2OffSet) |= 0xf; } if((GETX(GIEROffSet) & 0x) == 0x) {
print("Global Interrupt Enable by hardware platform\r\n"); } else {
print("Global Interrupt Enable by software\r\n"); GETX(GIEROffSet) |= 0x; } if((GETX(IPIEROffSet) & 0x2) == 0x2) {
print("channel2 interrupt enable by hardware platform\r\n"); } else {
print("channel2 interrupt enable by software\r\n"); GETX(IPIEROffSet) |= 0x2; } /*/ /GPIO control led*/ //The four LEDs are lit in turn every one second for(int i = 0; i < 100; i++) {
GETX(DATA1OffSet) |= (0x1 << (i % 4)); sleep(1); GETX(DATA1OffSet) &= 0x0; } /*/ /GPIO2 generate interrupt*/ while(1) {
if((GETX(IPISROffSet) & 0x2) == 0x2) {
print("GPIO2 Generate interrupt\r\n"); GETX(IPISROffSet) |= 0x2;//clear interrupt by TOW } } / / }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/115414.html


