实验步骤
在设备原理图中找到LED的电路:
分析电路,可知当CHG_COK为高电平时,LED点亮;当CHG_COK为低电平时,LED熄灭。
在核心电路原理图中找到CHG_COK引脚:
分析核心板的引脚图,可以知道,CHG_COK由GPX2_7控制,这是一组GPIO引脚中的一个。
查询芯片手册中GPX2这一节,可以得知控制GPX2组中GPIO引脚的寄存器地址以及功能定义,如图:
编写汇编程序控制寄存器,实现硬件控制
.global _start
_start: @汇编入口
@ .global _start 将_start声明称一个全局的符号 使其全局可用
@ .equ 相当于C中的宏定义
@ .equ DATA, 0xFF
@ mov r1, #DATA
@ mov r1, #1
@ 在当前地址申请一个字的空间并将其初始化
@ .word 0x12345678
@ mov r1, #1
@ mov r1, #1
@ 在当前地址申请一个字节的空间并将其初始化
@ .byte 0x12
@ .byte 0x12
@ .byte 0x12
@ .byte 0x12
@ mov r1, #1
@ mov r1, #1
@ .space 100, 0xFF
@ mov r1, #1
@在当前的地址申请多个字节的空间 并将其初始化
@ 条件编译
@ .if 0
@ mov r1, #1
@ .endif
@/******************C语言和汇编语言的混合编程*******************/
@ C语言和汇编语言的混合编程的原则就是在哪种语言下符合哪种语言的语法
@ 1.汇编语言跳转到C语言
@ 汇编语言 -> 将C函数看做汇编标号
@ mov r1, #1
@ mov r2, #2
@ b main
@ C语言
@ int main()
@ {
@
@ }
@ 2.C语言跳转到汇编语言
@ C语言
@ extern void FUNC(void);
@ int main()
@ {
@ int a;
@ a = 1;
@ FUNC();
@ a = 2;
@ }
@ 汇编语言
@ FUNC:
@ mov r1, #1
@ mov pc, lr
@ 3.C语言内联汇编语言
@ C语言
@ int main()
@ {
@ int a;
@ a = 1;
@ asm
@ (
@ "mov r1, #1\n"
@ "mov r2, #2\n"
@ );
@ a = 2;
@ }
@/******************ATPCS协议*******************/
@ 1.栈的使用:使用满减栈
@ 2.寄存器的使用
@ a.如果函数有参数的时候 使用r0-r3传参 多于4个参数的时候使用数据栈
@ b.如果有返回值 使用r0传递 如果返回值是64位 使用r0、r1共同传递
@ c.栈指针使用r13
@/******************uboot下载程序*******************/
@ 将开发板薄码开关拨成0110
@ 安装好CH340驱动后在 “我的电脑”-“管理”-“设备管理器”-“端口”-“COMx”
@ 打开超级终端 波特率:115200 流控制:无
@ 打开开发板进行设置:
@ 1、set bootcmd
@ 2、save
@ 程序下载
@ loadb 40008000 将二进制程序下载到40008000地址(kermit协议)
@ go 40008000 程序跳转到40008000执行
@/******************接口实验的基本原理*******************/
@ 一个处理器能够操作的地址空间是固定的,是由处理器的地址总线宽度决定的
@ CPU想要操作CPU之外的数据就必须将这些数据放到其地址空间
@ CPU不能直接控制硬件,所以将硬件的控制映射到CPU的地址空间的一段地址即特殊功能寄存器
@