Part6——点亮指路灯

LED是因为前面学习的bootlooder和内核都不能显示出结果,哪怕错了也不知道,所以我们要加入调试的手段,就是LED灯来调试
1、找出底板上的LED原理图
二极管导通就是需要让二极管上承担一定的电压差


在核心板原理图上 以nLED_1为例,问题就转化为GPK4输出高低的问题
GPIO为通用输入/输出引脚,对于许多结果比较简单的外部设备,GPIO更合适,如果用USB串口这种高级的接口反而不合适

2440有130个引脚,他们被分为八组,从A到J
以A为例,

控制寄存器: 如果为0是输出,为1是功能引脚

数据寄存器: 每一位对应一个引脚,输出为0或1

6410




2、思维导图

2440
#define GPBCON 0x560000000
#define GPBDAT 0x560000014
light_led:
ldr r0,=GPBCON
ldr r1,#0x15400 //前面是高位的,最后是0位,但是前面的0不用管
str r1,[r0]
ldr r0,=GPBCON
ldr r1,#0x6bf //同理,按照位数配置
str r1,[r0]
启动辅助程序,首先格式化,然后选择download u-boot
6410
#define GPKCON 0x7f008800
#define GPKDAT 0x7f008808
light_led:
ldr r0,=GPKCON
ldr r1,#0x11110000
str r1,[r0]
ldr r0,=GPKCON
ldr r1,#0xa0
str r1,[r0]
mov pc,lr
同样格式化,写入u-boot.bin,然后建立USB连接
/home/dnw ./gboot.bin 0x50000000
启动 //但是这里6410不能工作,原因是没有对外设初始化,详情看前面的架构图
外设初始化:

在这里找到外设设置
实际上就是这里第一个


这里我们的基地址选择
set_peri_port:
ldr r0,=#0x70000000 //先设置基地址,后面几位被忽略了
orr r0,r0,#0x13 //再加上大小设置为256M
mcr p15,0,r0,c15,c2,4 //再写回原地址
mov pc,lr //54min

浙公网安备 33010602011771号