ARM
-西西弗斯
这个作者很懒,什么都没留下…
展开
-
install qemu
apt-get install libglib2.0-devapt-get install libtoolapt-get install libsdl-devapt-get install zlib1g-dev # sudo # sudo原创 2021-02-01 18:05:15 · 161 阅读 · 0 评论 -
32. ARM硬件 - ADC
滑动变阻器的电压值,传入XadcAIN0口main.c#include "stdio.h"#define W 480#define H 272#define POS 50#define RADIUS 20void uart_init(void);void adc_test(void);int main(void){ // 初始化串口 uart_init(); // 测试ADC adc_test(); return 0;}ma...原创 2021-01-13 22:06:55 · 252 阅读 · 0 评论 -
31. ARM硬件 - PWM
原创 2021-01-12 22:27:43 · 225 阅读 · 0 评论 -
30. ARM硬件 - RTC
晶振:32768Hz = 2^15rtc.hvoid rtc_ticktime_enable(unsigned char bdata);void rtc_realtime_display(void);void rtc_enable(unsigned char bdata);void rtc_print(void);void rtc_settime(void);rtc.c#include "rtc.h"#include "stdio.h...原创 2021-01-12 22:24:25 · 249 阅读 · 0 评论 -
29. ARM硬件 - Watchdog
watchdog 中间过程中需要不停的喂狗,否则一旦超时,watchdog电路就会发reset中断原创 2021-01-12 22:02:53 · 345 阅读 · 0 评论 -
28. ARM硬件 - 定时器
时间到,自动给出一个低脉冲原创 2021-01-12 21:56:57 · 312 阅读 · 0 评论 -
27. ARM硬件 - I2C
`I2C地址的高4bit由厂家写死,此处为1010. 实际I2C地址7bit,高位取3bit,此处101=5, 地位由A2/A1/A0 三位地址线的硬件连线方式决定。、原创 2021-01-12 21:53:00 · 232 阅读 · 0 评论 -
26. ARM硬件 - 中断控制器
中断向量初始化函数中断处理函数irq指向中断处理函数原创 2021-01-12 15:31:26 · 370 阅读 · 0 评论 -
25. ARM硬件 - 确定开发板资源
、根据设备连接的不同区域, 选用不同区域的控制器去操作内部设备:GPIO?外部控制设备:如DRAM等。原创 2021-01-12 07:42:53 · 201 阅读 · 0 评论 -
24. ARM硬件 - GPIO - 按键控制LED灯亮灭
思路:1- 建立start.S,启动代码,运行.c里面的main函数2- 建立main.c - 执行代码,GPIO操作,Key,看电路图,知道相应的GPIO口,以及状态设置和值设置 设置输出高电平buzzer工作间歇性(延时函数)GPH2_0 设置输入,低电平GPH2CON:0xE020_0C40GPH2DAT:0xE020_0C443- Makefile按键是输入...原创 2021-01-11 21:59:32 · 1312 阅读 · 0 评论 -
23. ARM硬件 - GPIO - Buzzer间歇性响
GPIO接口:就像直连一样思路:1- 建立start.S,启动代码,运行.c里面的main函数2- 建立main.c - 执行代码,GPIO操作,Buzzer,看电路图,知道相应的GPIO口,以及状态设置和值设置 设置输出高电平buzzer工作间歇性(延时函数)GPD0_0 设置输出,高电平GPD0CON:0xE020_00A0GPD0DAT:0xE020_00A43- Makefilestart.S.text .global _start_start:..原创 2021-01-11 21:29:02 · 466 阅读 · 0 评论 -
22. ARM硬件 - GPIO - C实现点灯
led_on.c#define GPJ2CON (*(volatile unsigned long *) 0xE0200280)#define GPJ2DAT (*(volatile unsigned long *) 0xE0200284)//向地址里面赋值,先取指针(volatile unsigned long *) 0xE0200280,然后赋值。 //又由于此处预处理是取值,因此(*(volatile unsigned long *) 0xE0200280)int main(原创 2021-01-11 20:13:51 · 322 阅读 · 1 评论 -
21. ARM硬件 - GPIO - 汇编实现点灯
实验一 汇编实现LED点灯引脚与外设直接连接:GPIO,如LED协议控制器由Address Map,GPIO位于SFRS区域GPJ2CON共8个寄存器,每个寄存器4位,共32位控制寄存器每个寄存器(GPJ2CON_0/1/2/3)都设置为output(0001),即可。由LED连线图,GPJ2DAT输出为0即可点亮LEDLED一般都是上拉。led_on.S.text //GNU格式的汇编代码.global _start_s.原创 2021-01-11 20:09:39 · 510 阅读 · 0 评论 -
20. ARM硬件 - S5PV210启动原理
1. 裸板程序放到链接地址0x0地址开始运行,该过程不需要bootloader。 裸板程序直接在iRAM中运行2. 通过minitool直接把代码下载到DRAM中去运行,链接过程是0x20000000,此过程是需要superboot配合才能运行起来。该部由super boot/bootloader完成,相当于bootloader加载OS kernel上图黄色区域:片上系统1- iROM固化了一段代码,该代码由三星提供。包括设置系统时钟/设置看门狗/初始化控制器等。三星固化在芯片中,它原创 2021-01-10 20:32:09 · 220 阅读 · 0 评论 -
19. ARM硬件 - 第一个裸板实验
\bootloader就是第一个裸板程序程序链接地址:程序实际执行时的地址程序地址:放程序二进制文件的地址start.S.globl _start_start: // 设置GPJ2CON的bit[0:15],配置GPJ2_0/1/2/3引脚为输出功能 ldr r1, =0xE0200280 ldr r0, =0x00001111 str r0, [r1] mov r2, #0x1000led_blink: // 设置GPJ2DAT的bit[0:3],使G原创 2021-01-10 19:41:32 · 251 阅读 · 0 评论 -
18. ARM硬件 - 中断体系结构
根据Hash表,根据中断向量表,跳到对应的中断服务程序内核 0xffff0000,比如winCE 在地址上做了一个偏移量,高地址向量表,中断复位程序从的地址从0xffff0000开始0x00000000 低地址向量表执行位置:LR寄存器R14R13:SPR15:PCCPSR:当前执行位置寻找中断入口:向量地址,从PC寄存器里面找按电源Reset:复位异常内存运行过程中突然异常:数据异常,找不到内存地址了?突然按键盘:外部中断异常...原创 2021-01-10 10:05:15 · 204 阅读 · 0 评论 -
17. ARM硬件 - MMU
局部性原理。常用的放缓存,不常用的在磁盘虚拟地址到内存物理地址的映射存储设备管理如果内存找不到,就去磁盘找讲OS的时候叫Page/讲硬件的时候叫Bank。一回事,都是一页Set:多维度的概念存储结构:内存控制器----> TLB(页表缓存)----->Page Table(页表)------>物理内存...原创 2021-01-10 09:34:12 · 226 阅读 · 0 评论 -
16. ARM硬件 - Cache
Cache: SRAM,速度快/容量小横向可以分为Cache1/2/3/4纵向可以分为L1/L2/L3嵌入式,就是操作硬件,操作存储器。芯片厂商提供的就是寄存器规则:协议Cache:提升速度:硬件优化:提升CPU速率 软件优化:频繁访问片外资源,会比较耗电。 在片上放一块存储器,cache controller控制cache。 局部性原理,利用缓存提高效率/降低功耗一级缓存:64K随着缓存空间的扩大,命中率在放大。 二级缓存:可...原创 2021-01-10 08:05:06 · 327 阅读 · 0 评论 -
15. ARM硬件 - SIMD
ARM片内体系结构,只需要看ARM-Crotex-A Series Program Guidehttps://static.docs.arm.com/den0013/d/DEN0013D_cortex_a_series_PG.pdfARM片外结构:看芯片手册在ARMv5之前,SISD:单指令单数据LDMIA R0,{R1-R8} SIMD:多次fetch,一次执行,NEON:扩展了浮点运算向量表,是基于SIMD的升级...原创 2021-01-10 07:40:41 · 597 阅读 · 0 评论 -
14. ARM硬件基础
1. 研究什么?硬件原理与构造: 协议/地址/寄存器通信协议时长/频率:时间周期2. 如何研究?ARM官方编程手册芯片手册外设厂家文档GPIO协议:I2C/SPI/USB/UART控制器:NAND/NIC/LCD转换器:ADC/DACARM:最核心的是中断机制,是控制CPU操作的关键操作SIMD:一条指令,将多块数据一起取出。减少IO次数,提高效率看门狗:如果程序一直运行正常,就会有信号一直喂狗。一旦程序跑飞,收不到喂狗信号,就..原创 2021-01-09 21:09:52 · 230 阅读 · 0 评论 -
13. ARM混合编程
原创 2021-01-09 20:23:16 · 215 阅读 · 0 评论 -
12. ARM汇编 常用符号
ARM伪指令:要么顶行写,要么Tab空4格。 编译调试常识全局:默认整个文件export:扩展为整个工程文件local:默认宏定义/子函数里面定义变量存在内存中。RN可单独使用...原创 2021-01-09 19:49:13 · 361 阅读 · 0 评论 -
11. ARM汇编 伪指令
原创 2021-01-09 18:52:55 · 189 阅读 · 0 评论 -
10. ARM汇编 跳转指令
MOV LR, PC //将当前PC指针地址存入LRMOV PC,R2 //程序跳到R2MOV:长指令跳转,可以任意跳B:短指令跳转MRS R0, CPSR //将CPSR寄存器的值存入R0MSR CPSR_cxsf,#0x04 //将立即数传入CPSR_cxsfCPSR有进行分区,每个区8字节...原创 2021-01-09 10:03:36 · 630 阅读 · 0 评论 -
9. ARM汇编内存操作 LDM/STM
SAWP R0,R1,【R2】 //R1与R2指向的内存地址进行较好,以字长为单位进行操作R2----> R0R1----> R2内存操作,不可以操作R15,PC寄存器原创 2021-01-09 09:29:47 · 320 阅读 · 0 评论 -
8. ARM汇编内存操作 LDR/LDRB
MOV R1,#0x12 //将立即数存入寄存器R1LDR R0,[R1] //将R1里面的内容0x12(是地址)指向的空间的内容加载到R0LDR:以字长(32)为单位进行操作LDRB:按照字节(8位)进行操作原创 2021-01-09 09:05:09 · 4054 阅读 · 0 评论 -
7. ARM汇编逻辑操作
AND : 逻辑与(logical AND) AND{条件}{S} <dest>, <op 1>, <op 2> dest = op_1 AND op_2AND 将在两个操作数上进行逻辑与,把结果放置到目的寄存器中;对屏蔽你要在上面工作的位很有用。 操作数 1 是一个寄存器,操作数 2 可以是一个寄存器,被移位的寄存器,或一个立即值: AND R0, R0, #3 ; R...原创 2021-01-03 09:47:12 · 283 阅读 · 0 评论 -
6. ARM汇编算术操作
MOV : 传送(Move) //相当于赋值语句 MOV{条件}{S} <dest>, <op 1> dest = op_1MOV从另一个寄存器、被移位的寄存器、或一个立即值装载一个值到目的寄存器。你可以指定相同的寄存器来实现 NOP 指令的效果,你还可以专门移位一个寄存器: MOV R0, R0 ; R0 = R0... NOP 指令 MOV R0, R0, ...原创 2021-01-02 12:23:50 · 258 阅读 · 0 评论 -
5. ARM汇编寻址模式-3
操作 条件 状态 目标寄存器 源寄存器 操作数寄存器间接寻址:LDR R0 [R1] 将R1寄存器里面的地址指向的内存空间的内容加载到R0. R1存的内容是内存地址。加载的是内存地址所指向的值STR R0 [R1] 将R0的内容存入R1寄存器里面的地址指向的内存空间. R1存的内容是内存地址。寄存器移位寻址:ADD R3,R2,R1,LSL #2 R1左移2位,加上R2,存入R3基址地址寻址:LDR R0,[R1,...原创 2021-01-01 16:41:48 · 811 阅读 · 0 评论 -
4. ARM汇编寻址模式-2
https://pan.baidu.com/s/1BtDJ01. 下载ADS1.2并安装2. 用ADS创建新项目3. 创建Test_Hello.S文件,并添加到当前项目,打开Debug/DebugRel/Release添加完成后,源码编辑器在左边,项目管理部分在右边。设置编译环境Debug出现上面界面,说明debug成功。点stepin 按钮开始debug此时r1的值是0x0000004再点一次s...原创 2021-01-01 12:54:56 · 162 阅读 · 0 评论 -
3. ARM汇编寻址模式
程序 = 数据结构 + 算法语言:用于描述程序的。基本数据类型/接口定义/类定义:静态函数的实现/方法/分支:动态寻址方式:操作数据的方式。0x01 ARM模型与概念ARM支持三种数据类型的读写:Byte(8 bits),Halfword(16 bits),Word(32 bits)。所有内存指令相关的读写操作都会基于这三种数据类型。ARM使用小端存储,这意味着例如指令E5 9F 00 90在内存中会反序存储为:0x00a0 90 00 9F E5在读取指令后,会原创 2021-01-01 11:30:26 · 212 阅读 · 0 评论 -
2. ARM 架构
https://cs140e.sergio.bz/docs/ARMv8-A-Programmer-Guide.pdfhttps://www.macs.hw.ac.uk/~hwloidl/Courses/F28HS/Docu/DEN0013D_cortex_a_series_PG.pdfR0 - R12为通用寄存器,放通用数据,32bit,9种不同的模式可以共享(除了FIQ模式,有自己专用的R8-R12,R15与CSPR也是共享)USR模式没有SPSR(Saved Progr.原创 2020-12-31 13:55:41 · 202 阅读 · 0 评论 -
1. ARM综述
1. 嵌入式Linux学习路线图SOC/ARM ---》 Bootloader ----》Kernel/Driver ----》File System/BusyBox ----》ROM/FrameWork原创 2020-12-30 22:45:30 · 225 阅读 · 0 评论 -
MiniTools 工具介绍
arm9home.net/read.php?tid-24600.html转载 2020-12-30 07:56:27 · 901 阅读 · 0 评论 -
配置ARM虚拟机
编者按:参考文章&课程:leao :用qemu建立mini2440的模拟仿真环境https://www.cnblogs.com/jinmu190/archive/2011/03/21/1990698.html 星海一叶舟:qemu安装mini2440的修炼经历https://blog.csdn.net/star2523/article/details/7562210 平震宇:嵌入式Linux应用于开发实践 _项目5 构建嵌入式Linux开发环境_5.6 配置交叉编译环境;5.9/10配置转载 2020-11-30 23:04:17 · 3101 阅读 · 0 评论 -
Ubuntu 16.04 上安装 arm-linux-gcc-4.4.3
Ubuntu 16.04 上安装 arm-linux-gcc-4.4.3参考链接:https://blog.csdn.net/zz56z56/article/details/83021583注:正常安装后,不同用户切换,需重新刷新环境变量:source /etc/profile一、下载arm-linux-gcc-4.4.3.tar交叉编译包 1.ARM官网下载 https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/d转载 2020-11-30 22:24:13 · 1409 阅读 · 0 评论 -
编译u-boot-mini2440
0 主机环境Linux version 4.10.0-42-generic (buildd@lgw01-amd64-051) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.5) ) #46~16.04.1-Ubuntu SMP Mon Dec 4 15:57:59 UTC 20171 交叉编译工具安装:sudo apt-get install gcc-arm-linux-gnueabi这样安装后,交叉编译工具是最新转载 2020-11-28 20:18:16 · 327 阅读 · 0 评论 -
友善之臂ARM9开发板
1. 开发板光盘下载http://www.arm9home.net/read.php?tid-10908.html2. 烧写笔记原创 2020-11-28 11:32:47 · 669 阅读 · 0 评论 -
正点原子 Linux驱动开发学习笔记-06 (直接操作寄存器) -驱动框架搭建
驱动框架#include <linux/kernel.h>#include <linux/init.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/io.h>#include <linux/uaccess.h>#include <linux/slab.h>#define LED_MAJOR ...原创 2020-10-28 07:57:20 · 298 阅读 · 0 评论 -
正点原子 Linux驱动开发学习笔记-06 chrdevbase虚拟设备驱动的完善
要求:应用程序可以对驱动进行读写操作。读:从驱动读一个字符串写:应用程序向驱动写一个字符串驱动的缓冲,与应用程序的读写buffer都是100.1. read驱动函数编写,需要用到copy_to_user(buf, readbuf, cnt)函数,来自linux内核/* 向用户空间发送数据 */memcpy(readbuf, kerneldata, sizeof(kerneldata));2. write驱动函数编写,需要用到copy_from_user(writebuf, buf,原创 2020-10-27 07:27:04 · 387 阅读 · 0 评论