在上一篇文章中提到SD卡的裸机开发环境的搭建以及OK6410的启动设置,这章开始进入LED灯的闪烁控制。

1、首先打开OK6410的开发板原理图,找到LED等控制的原理图部分,如下图1所示。

wKiom1ck2dLi84vGAAB3zB129Fg191.png

                    图1 LED灯控制原理图    

 由图1可知,控制LED灯的CPU管脚为NLED1~NLED4,NLED1~NLED4对应的CPU管脚名称为GPM0~GPM3(CPU原理图未给出)。

2、编写程序LED.s,下面直接给出LED.s的源码。

.globl _start

_start:

    /* 硬件相关的设置 */

     ldr r0, =0x70000000

     orr r0, r0, #0x13

     mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-0x7fffffff)

    

    /* 关看门狗 */

    /* 往WTCON(0x7E004000)写0 */

    ldr r0, =0x7E004000

    mov r1, #0

    str r1, [r0]

    /* 设置GPMCON让GPM0/1/2/3作为输出引脚 */

    ldr r1, =0x7F008820

    ldr r0, =0x1111

    str r0, [r1]

    

    /* 设置GPMDAT */

    ldr r1, =0x7F008824

    loop:

     /*设置GPMDAT让GPM0/1/2/3作为输出高电平1,LED灯全灭*/

    mov r0, #0x0f

    str r0, [r1]

     /* 延时 */

    bl delay

      /*设置GPMDAT让GPM0/1/2/3作为输出高电平0,LED灯全亮*/

    mov r0,#0

    str r0, [r1]

      /* 延时 */

    bl delay

      /* 死循环*/

    b loop

    

    /* 延时子程序*/

    delay:

    ldr r2, =0xffffff

    delay_loop:

    sub r2, r2, #1

    cmp r2, #0

    bne delay_loop

    mov pc, lr

3、CP15协处理器指令说明

 wKiom1cmGbKDzx7yAAESU7cNDzc489.png 

arm11把memory和Peripheral接口分开了,上面的红色划线代码在初始化是告诉CPU外设寄存器的基地址和地址空

  寄存器格式:

wKiom1cmHC_AH9OZAAA-T7T-MJA439.png

 查看SC6410的芯片手册可知外设地址的base address为0x70000000,如下图所示:

wKioL1cmHrWAbVeuAADEaoX-1XM643.png

4、GPIO指令说明

 LED使用的GPIO口为GPM0~GPM3,查看芯片手册,和GPM有关的寄存器主要下面三个寄存器,如下图所示;

wKiom1cmHsvAVRfxAAEwOcPju-Y919.png

 GPMCON为端口模式寄存器,这里需要将端口模式设置为输出模式;

 GPMDAT寄存器为IO数据寄存器,每一位对应相应的IO口,LED闪烁功能只需要在间隔固定时间对该寄存器写0或写1;

5、程序编译makefile

 Makefile文件入下:

CC = arm-linux-gcc

LD = arm-linux-ld

OBJCOPY = arm-linux-objcopy

 

CFLAGS  = -c -o 

LDFLAGS = -e _start -Ttext 0x0c000000 -o 


led.bin:led.elf

$(OBJCOPY) -O binary $< $@

led.elf: start.o

$(LD) $(LDFLAGS) $@ $<


start.o : start.S

$(CC) $(CFLAGS) $@ $<


clean:

rm *.o led.elf led.bin

 输入make,编译生成led.bin烧写文件

6、程序烧写

 将上一步操作生成的Led.bin文件拷贝到windows环境下,使用winhex软件进行程序烧写。

 a.打开winhex软件,这里使用的版本为WinHex 15.1 SR-8,同时插入SD卡,软件打开界面如下图所示:

wKioL1cmJAOSOYKIAADdyEmYkuQ542.png

 b.打开SD卡,操作如下图所示:

wKioL1cmJMfTDmx3AAE5pzpiUuM236.png

 c.打开led.bin文件,如下图所示:

wKiom1cmJPOQPEdrAAEh_BsAOCQ665.png

 d.将复制的内容写入到指定的SD卡的位置,步骤如下:

wKiom1cmJfzz_nmzAAGErAtNcZc872.png

 e.完成之后,将SD卡插入开发板的SD卡槽,然后上电,这里LED将会不停的闪烁。