最简例子 以流行的FS4412单片机为例,实现LED灯控制。
准备:
- 开发设备原理图
- 芯片手册
- PDF阅读器(带关键词查找功能)
- 开发工具链
1. 看电路图
a. 找到我要控制的设备
b. 找到设备在CPU侧的控制管脚(如GPX2_7)
2. 看芯片手册 (先看相关的中文文档,熟悉设备,再看手册)
a. 搜索电路图里对应控制管脚的名称(如GPX2)
b. 看目录找到对应的控制模块(如:6 General Purpose Input/Output (GPIO) Control)
c. 看该模块的overview 了解该模块的大概功能
d. 看控制寄存器(REGISTER DESCRIPTION) 重点,难点
PS:如果寄存器比较多什么办?
看技术支持提供的例子程序, 找到需要修改的寄存器(常常只有几个)。
部分厂商会提供配置软件,通过界面去配置功能, 我们只需使用配置好的寄存器值就可以了
3. 编程
a. 定义要控制的寄存器的宏 (与手册里的寄存器地址对应起来)
b. 设备初始化 (如设置GPIO为输出状态)
c. 把功能分成最基本的小块,逐个实现 如点亮灯-> 在灭灯-> 加延时->闪烁-> 跑马灯
汇编程序(参考例子)
.text
@ 设置LED灯的配置寄存器 GPX2CON7 为输出状态
ldr r0,=0x11000c40 @获得寄存器地址
ldr r1,[r0]
bic r1,#0xf0000000 @只用寄存器高4位,所以清除这4位
orr r1,#0x10000000 @给寄存器设定值 --灯亮
str r1,[r0] @写寄存器
.end