gpio 的配置:寄存器的配置。
主要内用点亮第一个led.
.s文件是汇编源文件
arm体系结构和汇编。
硬件裸机驱动: 时钟,内存,flash,串口,芯片手册,电路原理,
arm bootloader :bos boot,把操作系统,加载到内存系统,
U-BOOT
arm 中断编程: 软件中断,硬件中断。
核心数据分析: VFS虚拟文件系统(file,kobject),数据结构(双向链表,红黑树,队列)。
linux驱动介绍: 字符设备,块设备,网络设备,USB设备。
Linux串口的驱动: Linux中断编程。字符设备。
arm是一个cpu内核。
cpu的核心: 寄存器,ALU运算单元,预取器,控制器。
外设控制器:Cortex A8 sspv210
机器指令: 32bit 长度定常
cpu: load-->store
常用的:80% X86 %80的不常用的。
arm : 手机,平板,智能电视。arm处理器。
指令集:ARM7TDMI MP3芯片。体系结构: V3
最终控制cpu运行的是机器语言。
向后兼容。
arm Cortex-M A7 指令集。
寄存器,工作模式。X86: 7中工作模式:System&User FIQ Supervistor Abort IRQ Undefined
R13/SP : 栈指针寄存器。exp 记录站定地址。R14/LR: 连接返回地址。
R15/PC:保存取值地址,程序计数器。
CPSR 当前程序状态。
内核空间,用户空间:为什么不能访问内核空间。
X85: RAIN0: 最高权限kernel,RAIN3:最低权限user
物理内存--->mmu 4G内存空间。 栈堆,bss,data,text。
3G空间的起始地址: 0xC0000000
*((unsigned int*)0xcfff0000) = 0x123445
mmu设置kernal为RAIN0权限。系统调用称为:软终端。系统跳到kernal权限。
arm两个级别,7种模式。普通中断模式,快速中断模式,系统模式,管理模式,abt停止模式,未定义指令模式。
共用寄存器: 37个寄存器
流水线3级: 同时处理指令数。
预取:译码器 ADD R0 R1 R2 加法: 用R0保存结果。存放到寄存器,R15/pc
时钟周期 = 1秒/频率 1Ghz 10的9次方
总开关: 算术逻辑累加单元。加法,减法,移位。
ALU 只做加法运算。
Z:置零。N: 符号为,V 溢出位。C: 进位
汇编指令: 长度固定4个字节32位
cond opt 分分类码 s Rd Rn 立即数
MOV R0 #0X1 把0x放入 R0
MOVS RO R1 把R1 放入R0
条件码: 操作码 分类码 s 目的寄存器 原寄存器 立即数
4bit 1bit 4bit 4bit 8bit
add r0, r1 #0x55 意思: r1+0x55 =>r0
S码: 1bit 指令运行结果,去影响和修改CPSR寄存器的相关标志位。(NZCV)
指令执行前; 判断条件码是否成立
指令执行后: 根据S码的设置,影响CPSR相关标志位
arm-linux-gcc
file a.out 可以查看可执行文件可运行的平台 arm-linux-objdump -dSsx arm.a.out 查看反汇编文件
mov 数据传输指令
mcp工程文件
AREA asm1test, CODE(数据段),READONLY(只读)
ENTRY
CODE32 32位
START 标号
MOV R0,#0X1
END
如何修改cpsr:
1 把cpsr寄存器的值放入R0 2 修改R0最低5位位1000
3 把R0 放入cpsr
修改位usr模式
MRS R0 CPSR 把状态寄存器的值取出给普通寄存器
BIC R0 R0 #0XF
MSR R0 CPSR 把普通寄存器的存入状态寄存器
串口: 两根线一收一发
bootloader bos 界面;
分析数据手册,电路原理图。
每秒传输115200位
mw 0xe02002280 操作地址
gpio 有个寄存器: 配置模式寄存器有个0X1111 数据寄存器:
LED_TEST 标号
LDR R0,=0XE0200280 //把内存地址加载到R0 寄存器
LDR R1,=0X1111 配置输出模式
STR R1,[R0] 把值存入地址
LDR R0,=0XE20200284
LDR R1,=0X0
STR R1,[R0] 把值存入地址
B LED_TEST
END
loads 下载二进制文件
go kermit协议
第一步: 写可执行文件
第二步: 采用超级终端,连接ARM loadb
第三步: 发送文件
第四部: go 地址
BCM2835,ARMv7
delay1
MOV R4,#0XFFFFFFF
LOOP
SUBS R4,R4 ,#0X1
BNE LOOP 如果不为零跳转Loop
LDR R0, 0XE0200284
LDR R1,=0XF
STR R0,[R1] 把值写入地址
c语言混合编程: ATPCS协议。
调用函数
arm37个寄存器。
EXPORT 导出汇编函数
__main 启动代码