目录
1.硬件原理图LED部分
1.1各LED对应的控制IO口
D22----------------------》GPJ0_3
D23----------------------》GPJ0_4
D24----------------------》GPJ0_5
D25----------------------》PWMTOUT1----------------------》GPD0_1
当对应的GPIO口输出低电平时,LED点亮,反之熄灭;
2.Datesheet资料查阅
控制GPJD0_1的寄存器资料如下:
控制GPJ0_3/4/5的寄存器如下:
阅读文档可知:
GPJ0CON控制寄存器的地址为:0xE020_0240
当设置为0时,相应IO设置为输入;当设置为1时,相应IO设置为输出;其他设置,参照文档;
比如D22对应GPIO为GPJ0_3,需要设置GPJ0CON[3],将GPJ0CON的【15:12】位先清零,再置1,即可将GPJ0_3设置为输出;
GPJ0DAT为数据寄存器,地址为:0xE020_0244
当设置为输出时,设置为1时输出高电平,设置为0时输出低电平;设置为输入时,通过读取该寄存器的值来判断外部输入的电平;
3.代码编写:代码仓库-》流水灯
led.bin: led.o
arm-linux-ld -Ttext 0x0 -o led.elf $^
arm-linux-objcopy -O binary led.elf led.bin
arm-linux-objdump -D led.elf > led_elf.dis
gcc mkv210_image.c -o mkx210
./mkx210 led.bin 210.bin
%.o : %.S
arm-linux-gcc -o $@ $< -c
%.o : %.c
arm-linux-gcc -o $@ $< -c
clean:
rm *.o *.elf *.bin *.dis mkx210 -f
arm-linux-ld:一个链接程序工具,其作用主要是将汇编过的多个二进制文件进行链接,成为一个可执行的二进制文件,这个命令的选项有好多,具体用到的时候大家可以使用--help 选项来查看具体的选项用法。
arm-linux-ld -Ttext 0x0 -o led.elf $^:这句话是将所有的依赖文件连接成ELF格式文件,在连接的过程中,-Ttext 0x0这个选项告诉连接器我的这段程序需要被加载到RAM的0x00000000地址处执行。所以在连接的时候第一条语句的连接地址就是0x00000000,第二条语句就是跟在其后面。有很多人都议论连接地址和运行地址这个怎么说的都有。运行地址可以等于连接地址,还可以认为运行地址是pc指针指向的地址,就是正在执行指令的地址。只要理解了这个概念就可以了。
arm-linux-objcopy:被用来复制一个目标文件的内容到另一个文件中.此选项可以进行格式的转换.在实际编程的,用的最多的就是
将ELF格式的可执行文件转换为二进制文件
arm-linux-objdump:常用来显示二进制文件信息,常用来查看反汇编代码
4.参考、学习资料:
1. 【u-boo-2016到s5pv210】 0.2 S5PV210的裸机点灯
4.s5pv210_irom_applicationnote_preliminary_20091126.pdf
6.编译出错:start.S:88: Error: invalid constant (61f) after fixup