本次课程使用的是4412开发板
CPU: exynos4412; RAM:2G*4 共8G ROM:4G EMMC
注意:很多硬件名字繁杂,在此明确一下,
主记忆体: 内存 == RAM == DDR
辅助记忆体:硬盘 == ROM == FLASH
看电路图
a. 找到要控制的设备
b. 找到设备在CPU侧的控制管脚(如:GPX2_7)
看芯片手册(先看相关的中文文档,熟悉设备,再看手册)
a. 搜索电路图里对应控制管脚的名称(如GPX2)
b. 看目录找到对应的控制模块(如:6 General Purpose Input/Output (GPIO) Control)
c. 看该模块的overview 了解该模块的大概功能
d. 看控制寄存器(REGISTER DESCRIPTION) 重点,难点
注: 如果寄存器比较多什么办?
看技术支持提供的例子程序, 找到需要修改的寄存器(常常只有几个)。
部分厂商会提供配置软件,通过界面去配置功能, 我们只需使用配置好的寄存器值就可以了
范例:
假设 现在要控制LED5的亮灭
1.查看商家提供的使用手册(范例中使用fs4412-dev-v0.pdf),找到LED设备
2.找到LED5灯对应的芯片端的管脚:XvSYS_OE/GPF3_5
3.查看4412芯片手册(范例中使用TOPEET_coreboard4412_scp.pdf),找到芯片中对应的管脚(XvSYS_OE/GPF3_5)
4.查看4412芯片手册(范例中这里使用SEC_Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary.pdf),查询GPF3,
直接查询GPF3_5可能会查不到结果。这里查询完可以看到有GPF3_CON控制端口和GPF3_DAT数据端口两个,都需要设置。
5.先查GPF3CON,查看到output的值=0x01,GPF3CON的地址= 0x1140_0000 + 0x01E0。
6.再查GPF3DAT,查看到GPF3DAT的地址= 0x1140_0000 + 0x01E4。
SoC(system on chip)片上系统
LED 灯控制程序(该程序为点亮LED2的程序 非上面范例说的LED5的程序。)
.text
@ Led control project
@ 2020/10/24 by LSY
.equ GPX2CON,0x11000C40
.equ GPX2DAT,0x11000C44
loop:
@set LED control = OUTPUT
ldr r0,=GPX2CON
ldr r1,[r0]
bic r1,#0x0F000000
orr r1,#0x10000000
str r1,[r0]
@open led
ldr r0,=GPX2DAT
ldr r1,[r0]
orr r1,#0x80
str r1,[r0]
bl delay1s
@close led
ldr r0,=GPX2DAT
ldr r1,[r0]
bic r1,#0x80
str r1,[r0]
bl delay1s
b loop
delay1s:
ldr sp, =space_top
stmfd sp!,{r0-r12,lr}
ldr r5,=0x3FFFFFF
delay1s_loop:
sub r5,#1
cmp r5,#0
bne delay_loop
ldmfd sp!,{r0-r12,pc}
.end
CROSS = arm-none-linux-gnueabi- 注:指定交叉编译工具
CC=$(CROSS)gcc
LD=$(CROSS)ld
OBJCOPY=$(CROSS)objcopy
all: led.s
$(CC) -g -c -o led.o led.s
$(LD) led.o -Ttext 0x43e00000 -o led.elf 注: -Ttext 指定链接地址为 0x43e00000
$(OBJCOPY) -O binary -S led.elf led.bin 注:转换为 binary 格式的,这样在u-boot中才能直接运行
$(CROSS)objdump -D led.elf > led.dis 注:objdump -D 反汇编生成文件 led.dis
clean:
rm -f *.o *.elf *.bin *.dis
拷贝gcc-4.6.4.tar.xz到linux系统中 $ tar xvf gcc-4.6.4.tar.xz $ export PATH=xxx/gcc-4.6.4/bin:$PATH xxx是 gcc-4.6.4解压后所在的目录 $ arm-n 按Tab键能补全为 arm-none-linux-gnueabi- 表示安装成功
loadb 40001000
再选传送-> 发送文件->选择待发送的文件 go 40001000