一步步点亮LED3_从零开始手写汇编点亮LED

1、GPxCON、GPxDAT寄存器分析
GPJ0端口一共有8个引脚,分别记作:GPJ0_0 ~ GPJ0_7,相关重要寄存器就是GPJ0CON和GPJ0DAT
GPJ0CON寄存器中设置8个引脚的工作模式(32/8=4,每个引脚可以分到4位,譬如GPJ0_0对应的bit位为0 ~ 3bit,GPJ0_3对应的位为bit12 ~ bit15。工作方法是:给相应的寄存器位写入相应的值,该引脚硬件就会按照相应的模式去工作。譬如给bit12 ~ bit15写入0b0001,GPJ0_3引脚就成为输出模式了)
2、从零开始写代码操作寄存器
需要那些先决条件才能写呢?
(1)、硬件接法和引脚:GPJ0_3、GPJ0_4、GPJ0_5低电平亮/高电平灭
(2)、GPJ0CON 地址(0xE020024)寄存器和GPJ0DAT(0xE0200244)寄存器
(3)、工程管理:Makefile、mkv210_image.c、write2sd、说明。
根据以上分析,我们就知道代码的写法了,代码所要完成的动作就是:把相应的配置数据写入相应的寄存器即可。
注:看数据手册GPJ0CON有8个引脚,每个引脚占4位,这4位可以设置8种模式。其实我们只关心的是第3,4、5这三个引脚。在此根据朱老师讲的设置GPJ0CON时,用十六进制(1位表示4位2进制数)写入的是0x11111111,把8个引脚全部设置为输出模式。
GPJ0DAT查数据手册有8个bit位可设置。对应GPJ0CON的8个引脚。在此根据朱老师设置是把这8个位全部设置为0(即把0x0设置到GPJ0DAT),即输出低电平。

/*
*	文件名:led.S
*	作者:  张军
*	描述:	 这是我们一步步点亮LED教程自己写的第一个裸机程序
*/

_start:         //_start:是标号,以这开头是写汇编的规则

		//第一步:把0x11111111写入0xE0200240(GPJ0CON)位置
	ldr r0, =0x11111111	//从后面的=可以看出用的是ldr是伪指令,因为需要编译器来判断这个
	ldr r1, =0xE0200240	//是否是合法立即数,一搬写代码都用ldr伪指令。ldr既是伪指令又是指令。区分看后面是=还是#号
	str r0, [r1]	        //寄存器间接寻址。功能是把r0中的数写入到r1中数为地址的内存中去

	//第二步:把0x0写入0xE0200244(GPJ0DAT)位置
	ldr r0, =0x0
	ldr r1, =0xE0200244
	str r0, [r1]            //把0写入到GPJ0DAT寄存器中,引脚即输出低电平,LED点亮


flag:
	b flag                  //这两行写了一个死循环。因为裸机程序是直接在CPU上运行的,CPU
			       //逐行运行裸机程序直到CPU断电关机。如果我们的程序所有代码都
			       //执行完了CPU就会跑飞(跑飞后是未定义的,所以千万不要让CPU跑飞)
                              //不让CPU跑飞的办法就是在整个程序执行完添加死循环。

版权声明:本文为qq_41680432原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。