您的位置:首页 > 编程语言

tiny6410裸机实验第2章--------------点亮LED灯(原理和代码分析)

2014-02-23 21:51 344 查看
【说明】

               首先我们要打开TINY6410的LED部分,弄清楚点灯的原理,查看到底是哪个引脚去控制LED的量和灭,再来写代码,由于点亮LED比较简单,所以原理和代码就放一篇博文里记录吧。

 

【原理】

              1】LED原理图

                    


                           显然,当引脚输出低电平时,由于VDD_IO的存在,LED将被点亮,反之熄灭

               2】相连的引脚

                          在核心板的原理图上有标明

                          


               3】 如何控制引脚

                            在6410手册中搜索GPK,阅读后发现下面几个寄存器

                           


                             寄存器的说明

                            


                            


                              显然GPKCON0是用来配置引脚功能的,上边截图是一部分,4位控制一个引脚,32位一共控制8个引脚,加上GPKCON1的8个刚好是16个,我们只要设置LED对应的那几个就可以了。

                              GPKDAT就是每一位控制一个引脚的输出,或者表示一个引脚的输入状态,显然我们要输出,直接往相应位清0就可以点亮LED

 

【代码分析】

                     

//汇编

.global _start

_start:

        // 把外设的基地址告诉CPU

    ldr r0, =0x70000000                                      //对于6410来说,内存(0x00000000~0x60000000),外设(0x70000000-0x7fffffff)

    orr r0, r0, #0x13                                        //外设大小:256M

    mcr p15,0,r0,c15,c2,4                               //把r0的值(包括了外设基地址+外设大小)告诉cpu

   

        // 关看门狗

        ldr r0, =0x7E004000

        mov r1, #0

        str r1, [r0]

        // 设置GPKCON0

        ldr r1, =0x7F008800

        ldr r0, =0x11110000                                   

        str r0, [r1]

        mov r2, #0x1000

led_blink:

        // 设置GPKDAT,使GPK_4/5/6/7引脚输出低电平,LED亮

        ldr r1, =0x7F008808

        mov r0, #0

        str r0, [r1]

        // 延时

        bl delay

        // 设置GPKDAT,使GPK_4/5/6/7引脚输出高电平,LED灭

        ldr r1, =0x7F008808

        mov r0, #0xf0

        str r0, [r1]

        // 延时

        bl delay

        sub r2, r2, #1

        cmp r2,#0

        bne led_blink

halt:

        b halt

delay:

        mov r0, #0x1000000

delay_loop:

        cmp r0, #0

        sub r0, r0, #1

        bne delay_loop

        mov pc, lr

【makefile】                    #makefile

led.bin: start.o

        #链接命令,虚拟地址从0开始

        arm-linux-ld -Ttext 0 -o led.elf $^

        #提出指令和数据部分

        arm-linux-objcopy -O binary led.elf led.bin

        #反汇编,便于调试

        arm-linux-objdump -D led.elf > led_elf.dis

%.o : %.S

        arm-linux-gcc -o $@ $< -c

%.o : %.c

        arm-linux-gcc -o $@ $< -c

clean:

        rm *.o *.elf *.bin *.dis  -rf

  【烧写】             

                 在工程下指令make命令生成led.bin文件以及led_elf.dis反汇编文件,还有led.elf文件,我们需要的是led.bin。以SD启动方式启动开发板,,当然,要先连接好串口,还有就是SD卡内部已经烧好了U-BOOT或者Superboot,在菜单中选择下载绝对地址应用程序,打开DNW工具,这个工具的使用方法很简单,下一个看几下教程就会了。用DNW发送文件,然后把开发板设置成NAND启动,重启

【实验现象】            

                   LED闪烁
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 嵌入式