zynq7020不使用xSDK的简单开发

本文主要介绍如何在不使用sdk的情况下进行zynq7020的编程。本实验为点亮一盏LED灯,使用MIO0引脚。

废话不多说,开始正题。
本文使用正点原子启明星zynq7020开发板进行开发。
开发环境为Ubuntu。

一、相关寄存器介绍

zynq7020不使用xSDK的简单开发_第1张图片
要使用GPIO点亮LED灯,第一步当然是设置GPIO的引脚。将MIO0映射到GPIO上。因此要对SLCR寄存器编程。编程之前先要对SLCR进行写使能。
把0xDF0D写入SLCR_UNLOCK寄存器中,地址为0xF8000008。
zynq7020不使用xSDK的简单开发_第2张图片
zynq7020不使用xSDK的简单开发_第3张图片
引脚输出属性设置,在本实验中GPIO为输出模式,故输入缓冲使能(DisableRcvr位置1),不使用上拉电阻(PULLUP位置0),led电压为3.3V(IO_Type位设置001),缓的CMOS边沿(Speed位置0),MIO0映射到GPIO上(7-1位设置为0000000),三态使能(TRI_ENABLE位置0)。
把0x2600写入MIO_PIN_00寄存器中,地址为0xF8000700。
zynq7020不使用xSDK的简单开发_第4张图片
该寄存器控制输出的高低电平,0为低电平,1为高电平。本实验led点亮为高电平,因此将第0位(MIO0)设置为1。
zynq7020不使用xSDK的简单开发_第5张图片
该寄存器0为输入,1为输出。MIO0用作GPIO输出。第0位(MIO0)设置为1,。
zynq7020不使用xSDK的简单开发_第6张图片
zynq7020不使用xSDK的简单开发_第7张图片
该寄存器控制输出是否使能,0为不是能,1为使能。因此将第0位(MIO0)设置为1。

二、编写程序

在Ubuntu下新建文件夹test。在文件夹里新建文件start.S。
敲入代码:

.text
.global _start
_start:
	//设置堆栈指针
	ldr sp,=0x30000

	/*
	解锁slcr寄存器为
	*/
	ldr r0,=0xF8000008
	ldr r1,=0xDF0D
	str r1,[r0]

	/*
	设置MIO0为GPIO输出
	*/
	ldr r0,=0xF8000700
	ldr r1,=0x2600
	str r1,[r0]

	/*
	设置GPIO0为输出模式
	*/
	ldr r0,=0xE000A204
	ldr r1,=1
	str r1,[r0]

	/*
	设置GPIO0输出使能
	*/
	ldr r0,=0xE000A208
	ldr r1,=1
	str r1,[r0]


	/*
	设置GPIO0输出高电平
	*/
	ldr r0,=0xE000A040
	ldr r1,=1
	str r1,[r0]
loop:
	b loop

新建文件zynq.lds,此文件为连接脚本。

SECTIONS
{
    ._start 0x00000000:
    {
        * (.text)
    }
}

编译start.S,Ubuntu下预先装了xsdk,这里使用xsdk自带的交叉编译器。设置环境变量。在shell执行如下命令

source /opt/sdk/SDK/2018.3/settings64.sh
arm-none-eabi-gcc -c start.S
arm-none-eabi-ld -o led.elf -Tzynq.lds start.o

至此,可执行文件led.elf文件已经生成,接下来使用bootgen工具把他转换为bin文件放入sd卡中。
新建文件zynq.bif,内容为

myboot:
{
	[bootloader]led.elf
}

在shell执行如下命令

bootgen -image zynq.bif -o BOOT.bin

最后把BOOT.bin文件放进sd卡中,开发板设置为sd卡启动,插入sd卡,上电,大功告成,led亮了。

你可能感兴趣的:(zynq7020不使用xSDK的简单开发)