1 原理图
从原理图看到,3个LED分别由GPF4、GPF5和GPF6控制。
2 寄存器描述
GPF4、GPF5和GPF6可用作输入输出,或中断功能。要点亮LED,需要将IO设置为输出模式,并输出低电平。怎么做?
关于GPIO的寄存器描述如下(主要关注配置CON和数据DCT寄存器):
3个LED对应的CON与DAT寄存器功能,以及寄存器地址描述:
3 2440启动过程
大多数ARM芯片,CPU从0地址启动。
NorFlash启动时,基地址为0,片内内存地址为0x4000 0000。CPU读出Nor上第1个指令(4字节)执行,CPU继续读出其他指令执行。
NAND启动时,片内4K RAM基地址为0,NorFlash不可访问。2440硬件把NAND前4K内容复制到片内RAM,然后CPU从0地址取出指令开始执行。
CPU内部有两类寄存器:R0、R1~R15,这类寄存器可以直接访问;GPFCON、GPFDAT,这类寄存器,以地址访问。
4 ARM常用汇编
ldr指令:ldr r0, [r1] 假设r1的值为x,则读取地址x上的4字节到r0
str指令:str r0, [r1] 假设r1的值为x,则把r0的值写入到地址x
b指令:跳转
mov指令:mov r0, r1 把r1的值赋值给r0
mov r0, #0x100 把立即数0x100赋值给r0
ldr指令: ldr r0,=0x12345678 伪指令,最终会被拆分成几条真正的ARM指令
以下是部分ARM指令介绍:
5 点亮LED灯的汇编代码
/*
* 点亮LED1: GPF4
*/
.text
.global _start
_start:
/* 配置GPF4为输出引脚
* 把0x100写到地址0x56000050(GPFCON)上
*/
ldr r1, =0x56000050
ldr r0, =0x100
str r0, [r1] /* 把r0的值写到r1的地址 */
/* 设置GPF4输出高电平
* 把0x00写到0x56000054(GPFDAT)上
*/
ldr r1, =0x56000054
ldr r0, =0x0
str r0, [r1] /* 把r0的值写到r1的地址 */
/*
* 死循环
*/
halt:
b halt
使用arm-linux-gcc进行编译,Makefile如下:
all:
arm-linux-gcc -c -o led_on.o led_on.S
arm-linux-ld -Ttext 0 led_on.o -o led_on.elf
arm-linux-objcopy -O binary -S led_on.elf led_on.bin
clean:
rm *.bin *.o *.elf
上传到ubuntu进行编译,使用oflash烧录bin文件,可以看到点亮led。
5 ARM寄存器和汇编分析
1 修改Makefile,查看反汇编代码
all:
arm-linux-gcc -c -o led_on.o led_on.S
arm-linux-ld -Ttext 0 led_on.o -o led_on.elf
arm-linux-objcopy -O binary -S led_on.elf led_on.bin
arm-linux-objdump -D led_on.elf > led_on.dis
clean:
rm *.bin *.o *.elf
上述代码反汇编文件:
led_on.elf: file format elf32-littlearm
Disassembly of section .text:
00000000 <_start>:
0: e59f1014 ldr r1, [pc, #20] ; 1c <.text+0x1c>
4: e3a00c01 mov r0, #256 ; 0x100
8: e5810000 str r0, [r1]
c: e59f100c ldr r1, [pc, #12] ; 20 <.text+0x20>
10: e3a00000 mov r0, #0 ; 0x0
14: e5810000 str r0, [r1]
00000018 18: eafffffe b 18 1c: 56000050 undefined 20: 56000054 undefined 下面是ARM寄存器描述: 几个重要的寄存器: sp:stack pointer 栈指针 lr:link register 返回地址 pc:program counter 程序计数器 = 当前指令地址 + 8 (流水线架构),当前执行地址A的指令时,已经在对地址A+4的指令进行译码,已经在读取地址A+8的指令。 反汇编分析: 可以看到,这里的GPFCON、GPFDAT,在CPU看来就是内存。只不过,这些内存你写入或读出,能控制管脚。 字节序:低位保存在低地址。
上一篇:04 点亮LED C
下一篇:03 2440烧写程序
推荐阅读
史海拾趣
驰兴电感始终坚持“品质第一”的原则,对产品的每一个细节都进行严格把控。公司引进了先进的生产设备和检测仪器,确保产品从原材料到成品的每一个环节都符合高标准的质量要求。这种对品质的执着追求,使得驰兴电感的产品在市场上赢得了良好的口碑,树立了高品质的品牌形象。
随着通讯技术的快速发展,射频微波电缆的需求日益增长。Harbour Industries凭借其深厚的电缆制造经验和先进的技术实力,成功研发出了一系列高性能的射频微波电缆。这些电缆在微波射频领域展现出了优异的性能,广泛应用于通讯网络、广播电视、卫星通信等领域。Harbour的射频微波电缆不仅在国内市场占有一席之地,还远销海外多个国家和地区,进一步提升了公司的国际影响力。
进入20世纪80年代和90年代,Harbour Industries继续深化其在电缆领域的研发。为了满足军事和国防部门对电缆的特殊需求,公司开始研发并生产Mil-Spec(军用规格)电缆。这些电缆不仅具备高度的耐用性和可靠性,还符合严格的军事标准。Harbour凭借其在技术上的不断创新和产品质量的持续提升,成功地将Mil-Spec电缆推向市场,并赢得了众多军事客户和合作伙伴的信赖。
随着全球化进程的加速和国际贸易的不断发展,Hendon Semiconductors积极实施全球化战略,不断拓展国际市场。公司加强与国际客户的合作与交流,了解他们的需求和期望,并根据市场变化调整产品结构和市场策略。同时,Hendon Semiconductors还积极参与国际展会和技术交流活动,展示其最新的技术和产品成果,提升品牌知名度和影响力。通过一系列有效的市场拓展措施和全球化战略的实施,Hendon Semiconductors在国际市场上取得了显著的成绩和突破。
Hendon Semiconductors在能源管理和照明控制领域也有着显著的成就。公司开发了一系列高效、可靠的能源管理解决方案和照明控制产品,广泛应用于智能家居、商业建筑和工业自动化等领域。这些解决方案不仅帮助客户降低了能耗和运营成本,还提高了能源使用效率和环境可持续性。通过不断创新和优化产品设计,Hendon Semiconductors在能源管理和照明控制市场上赢得了广泛的认可。
随着国内市场的饱和,Carroll & Meynell Transformers Ltd公司开始将目光投向国际市场。公司积极参与国际电子行业的交流与合作,学习借鉴国际先进经验和技术。同时,公司还加大了对海外市场的拓展力度,通过参加国际展览、建立海外销售网络等方式,将产品推向全球。这一国际化战略不仅为公司带来了更广阔的市场空间,也提升了公司的国际影响力。
请假大家2个关于充电器的问题: 一:不知道为什么我用的充电器总是烧前级220V近来的电阻; 二:就是我给锂电池充电,2节理电池串联8.4V,请问我若是想在充电器与电池之间加上一个保护二极管,请问充电器的电压要多大?(因为我测试发现二极管的压降 ...… 查看全部问答∨ |
泰克TDS7254B示波器4通道自我校正问题 CH1 1.001Kz 726mV CH2 1.001Kz 465mV CH3 1.001Kz 485mV CH4 1.001Kz 817mV 用同一个探棒校正,为什么CH1和CH4电压偏差这么大?造成使用TDSUSB2.0 test Software 无法测试。 请问有办法克服吗????… 查看全部问答∨ |
从2.0升级到2.2,制作完bootrom启动后,从网络启动没有问题,但从CF启动,出现了下面的问题,这种情况在2.0下没有出现。从网络启动到从CF卡启动只是修改了boot行: 网络启动:#define DEFAULT_BOOT_LINE \\ "fei(0 ...… 查看全部问答∨ |
|
iap是在应用编程,也就是说里面有了用户程序,这样要编程的时候就要跳到另一段代码去实现,stm32给的例子是把用户区flash分成2块来实现的。 但是其中给isp用的系统区还是存在的,既然isp的程序代码还在,那干脆就跳到系统区去实现得了。刚刚 ...… 查看全部问答∨ |