Zynq 7000 纯寄存器操作点亮LED

Zynq 7000 纯寄存器操作点亮LED

经过整整一天的研究,终于掌握了如何从数据手册看GPIO的寄存器地址。通过三种寄存器成功点亮了LED。

查看数据手册
想要点亮LED,首先要先了解点亮LED需要哪些寄存器,然后掌握这些寄存器的地址,最后就是往寄存器中写数据。
通过查看原理图得知,开发板上的两个LED灯分别连在PS端的MIO_50和MIO_51脚。查看数据手册可以看到这两个引脚是在BANK1。
知道了物理连接的位置,接下来就是要查找可以控制GPIO是用作输入还是输出,也就是方向寄存器。111在这里插入图片描述
上图就是Bank1 控制GPIO输入输出方向的寄存器 22位,控制MIO[53:32]。每一个bit位控制一个mio
Zynq 7000 纯寄存器操作点亮LED_第1张图片
这里给给出了DIRM_1的地址0xe000a244. 1是输出,0是输入。
接下来查找使能GPIO的寄存器
在这里插入图片描述 然后找到OEN_1的地址
Zynq 7000 纯寄存器操作点亮LED_第2张图片 能使MIO_50 MIO_51 高电平使能 0X000C0000
最后找到控制GPIO输出数据的寄存器
在这里插入图片描述 找到该寄存器的地址
Zynq 7000 纯寄存器操作点亮LED_第3张图片 三个寄存器的地址都找到了,接下来就可以写代码控制这些寄存器

/**************************************
 * 	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;

}

亲测可用

你可能感兴趣的:(zynq)