Zynq 7000 纯寄存器操作点亮LED
Zynq 7000 纯寄存器操作点亮LED
经过整整一天的研究,终于掌握了如何从数据手册看GPIO的寄存器地址。通过三种寄存器成功点亮了LED。
查看数据手册
想要点亮LED,首先要先了解点亮LED需要哪些寄存器,然后掌握这些寄存器的地址,最后就是往寄存器中写数据。
通过查看原理图得知,开发板上的两个LED灯分别连在PS端的MIO_50和MIO_51脚。查看数据手册可以看到这两个引脚是在BANK1。
知道了物理连接的位置,接下来就是要查找可以控制GPIO是用作输入还是输出,也就是方向寄存器。
上图就是Bank1 控制GPIO输入输出方向的寄存器 22位,控制MIO[53:32]。每一个bit位控制一个mio
这里给给出了DIRM_1的地址0xe000a244. 1是输出,0是输入。
接下来查找使能GPIO的寄存器 然后找到OEN_1的地址
能使MIO_50 MIO_51 高电平使能 0X000C0000
最后找到控制GPIO输出数据的寄存器 找到该寄存器的地址
三个寄存器的地址都找到了,接下来就可以写代码控制这些寄存器
/**************************************
* Project : MIO_Test
* Author : Gunner
* Description : Register control LED (MIO_50,MIO_51)
*/
#define DATA_1 ((unsigned int *)(0xE000A00C)) //Bank 1 GPIO write register address
#define DIRM_1 ((unsigned int *)(0XE000A244)) //Bank1 direction register address
#define OEN_1 ((unsigned int *)(0XE000A248)) //Bank1 enable register address
int main()
{
//MIO_50,MIO_51 output DIRM_1 MIO[53:32] 22 bits
*DIRM_1=0X000C0000;
//Enable MIO_50,MIO_51
//*OEN_1=0X000C0000;
*OEN_1=((1<<18)|(1<<19)); //0X000C0000 = ((1<<18)|(1<<19))
while(1)
{
*DATA_1=0X00000001; //MIO_51,MIO_50 output 1
}
return 0;
}
亲测可用