本文主要是介绍【NanoPi2试用体验】裸机下的程序-1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
上次写道:把nanopi2官方给的img中的2ndboot.bin拷贝到sd卡,串口显示如下: Launch to 0x42c00000 这次接着来gpio的: 这是datasheet中关于gpio输出的配置,基本和其他芯片差不多: 1.配置为GPIO模式 2.配置为输出模式 3.使能管脚 4.设置输出值 找到nanopi2原理图中led的位置: 后面那个中括号表明的是在pdf中的页数,但是还觉得好奇怪…… GPIO的寄存器也挺多的,看看目录就知道了: 我就不列具体功能了。 今天先做C语言的编程: - int main(void)
- {
- GPIOBALTFN0 &=~(0x3<<24);
- GPIOBALTFN0 |=(0x2<<24);
- GPIOBOUTENB |=(1<<12);
- while(1)
- {
- GPIOBOUT |=(1<<12);
- delay(2000000);
- GPIOBOUT &=~(1<<12);
- delay(2000000);
- }
-
- return 0;
- }
复制代码 具体的代码就是刚才所说的要配置的寄存器,程序来自于微博:http://weibo.com/p/1001603914481641084833?mod=zwenzhang 搜索GPIOB12,找如下: 管脚复用功能为 :Alternate Function 2 其中,寄存器的说明如上,因此相应寄存器置为0x2 使能和输出状态也是类似的。 下面就是编译连接: - start:start.S main.c gpio.h
- arm-linux-gcc -c start.S -o start.o
- arm-linux-gcc -c main.c -o main.o
- arm-linux-ld -Ttext=0x42C00000 start.o main.o -o main
- arm-linux-objcopy -I elf32-littlearm -O binary main main.bin
- arm-linux-objdump -D -S main.elf >dump
复制代码 目标代码的起始地址为0x42c00000 就是上一篇当中提到的“Launch to 0x42c00000” 然后按照上一次的操作,把生成的main.bin的烧写到0x8200位置处,上电: 汇编程序也不复杂,我比较菜,写错了一个寄存器的值,半天不出来…… - .text
- .global _start
- _start:
- b start
- .word 0x00000000
- .word 0x00000000
- .word 0x00000000
- .word 0x00000000
- .word 0x00000000
- .word 0x00000000
- .word 0x00000000
- start:
- #define GPIOBALTEN0_VAL (0x2<<24)
- #define GPIOBOUTENB_VAL (0x1<<12)
- #define GPIOBOUT_VAL0 (0x0<<12)
- #define GPIOBOUT_VAL1 (0x1<<12)
- ldr r0, =0xc001b020
- ldr r1, =GPIOBALTEN0_VAL
- str r1, [r0]
-
- ldr r0, =0xc001b004
- ldr r1, =GPIOBOUTENB_VAL
- str r1, [r0]
-
- ldr r0, =0xc001b000
- ldr r1, =GPIOBOUT_VAL1
- str r1, [r0]
-
- loop:
- ldr r1, =100000000
- ldr r2, =GPIOBOUT_VAL0
- str r2, [r0]
- loop_1:
- sub r1, r1, #1
- cmp r1, #0
- bne loop_1
-
- ldr r1, =100000000
- ldr r2, =GPIOBOUT_VAL1
- str r2, [r0]
- loop_2:
- sub r1, r1, #1
- cmp r1, #0
- bne loop_2
-
- b loop
-
复制代码 就不多解释了 |
本文原写于电子发烧友论坛:http://bbs.elecfans.com/forum.php?mod=viewthread&tid=538928&extra=
这篇关于【NanoPi2试用体验】裸机下的程序-1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!