Linux裸机开发学习笔记
文章平均质量分 90
冷暖自知_源
不要用时间上的勤奋,去掩盖战术上的懒惰!
展开
-
1.第一个ARM裸机程序
目录1.查看原理图和数据手册,设置IO口功能2.S3C2440框架和启动过程3.编写程序点亮LED灯思路4.一些汇编语言的知识5.编写汇编代码6.编译文件7.下载到开发版8.查看伪指令解析后的汇编指令练习1:修改led1.S驱动LED2练习2:修改bin文件点亮LED39.用c语言控制LED灯1.查看原理图和数据手册,设置IO口功能提示:此处使用...原创 2018-11-28 13:32:47 · 5225 阅读 · 0 评论 -
2.解析C语言的内部运行机制
目录1.解析C语言的内部机制2.了解ARM-THUMB 子程序调用规则 ATPCS3.分析C语言的反汇编代码4.传递参数(调用者传参数给背调用者)5.看门狗定时器(WATCHDOG TIMER)6.优化程序1.解析C语言的内部机制1.把上一节编译第10节的C语言控制代码在Linux系统反汇编文件(它的功能是点亮一颗裸板的LED灯),led.dis文件传window...原创 2018-12-02 16:09:06 · 3040 阅读 · 0 评论 -
3.裸板按键控制LED灯
实验目的:使用三个按键控制三盏灯1.led灯原理图 从原理图可以看出,按键是被硬件拉高电平的,如果按键按下,对应的IO口就会被拉成低电平。2.按键原理图3.编写c文件,配置三个led的IO口为输出,配置三个按键为输入查看数据手册:①:LED灯配置输出电平寄存器:②:按键编写代码如下:#include "s3c2440_soc.h"...原创 2018-12-16 16:44:31 · 804 阅读 · 0 评论 -
4.gcc和arm-linux-gcc
目录1.gcc和arm-linux-gcc有何不同?2.gcc和arm-linux-gcc常用选项3.gcc编译过程分析4.静态连接和动态连接1.gcc和arm-linux-gcc有何不同?从本质来讲他们都是编译器,而gcc是linux系统下面用来将代码编译成一个可执行程序的手段。编译出来的是适用于linux系统的可执行二进制文件。可执行程序其实就是一堆的0101二进制机...原创 2018-12-20 10:43:34 · 13729 阅读 · 2 评论 -
5.Makefile简单使用实例
目录1.什么是Makefile?2.Makefile引入3.Makefile的基本规则4.Makefile实例5.Makefile简单语法6.Makefile 函数 6.1.foreach 函数 6.2.过滤函数 -filter 6.3.获取匹配模式文件名函数— wildcard 6.4.模式替换函数— patsubst ...原创 2018-12-23 11:45:59 · 15453 阅读 · 6 评论 -
6.ARM(S3C2440)芯片时钟体系
目录1.系统的组成2.系统时钟的来源3.如何编程控制 4.编程设置系统时钟 1.系统的组成S3C2440是一块SOC芯片,里面有CPU和外设等,外设分为高速总线(AHB)和低速总线(APB),在这些总线上挂载这很多设备,如下图所示,这些设备除了电源,还有一个必不可少的就是时钟,而我们需要探讨的正是这些时钟的来源。查看芯片数据手册,可以看到各个时钟源可以设置的最大...原创 2018-12-25 16:17:40 · 1133 阅读 · 0 评论 -
7.串口(UART)
目录1.什么是串口?2.通信接口基础知识3.使用串口需要注意的东西? 4.串口如何和电脑进行通信5.编写程序思路6.编写程序 1.什么是串口?UART(Universal Asynchronous Receiver Transmitter:通用异步收发器), 一对一,以位为单位发送。 串口通讯 串口通讯(Serial Communication),是...原创 2018-12-29 16:08:44 · 5027 阅读 · 4 评论 -
8.从零开始实现printf函数
目录1.调用系统printf 2.分析printf函数的来源3.手动控制可变参数(变参函数使用)4.自动控制可变参数(变参函数使用)5.在x86平台实现自己的printf函数6.在ARM平台上实现自己的打印函数附录:源代码 1.调用系统printf我们在写c语言函数时,经常调用printf函数打印调试信息,现编写一个简单的程序,编译运行一下...原创 2018-12-29 23:37:20 · 1408 阅读 · 0 评论 -
9.初识内存控制器和SDRAM
目录1.引入内存控制器2.不同位宽内存设备之间的连接3.如何确定芯片的访问地址4.分析读写NOR FLASH的读写时序5.SDRAM初识6.编程读/写 SDRAM附录:源代码1.引入内存控制器我们RAM芯片是如何操作GOIO管脚的,是如何控制UART串口的?答:假设我们需要控制GPIO管脚,其实就是CPU发出指令给内存控制器,内存控制器再发送指令给GPIO控...原创 2019-01-03 19:23:49 · 2657 阅读 · 2 评论 -
10.代码重定位
目录1.为什么需要代码重定位?2.Nand Flash 和Nor Flash 的区别 3. 程序段的组成4.代码重定位思路:5.链接脚本6.初始化bss段数据7.定位代码和链接脚本的改进8.重定位全部代码9.使用C语言编写重定位代码源代码:1.为什么需要代码重定位?首先以SOC芯片S3C2440为例,他的内部结构图以及外接内存设备简图如下:C...原创 2019-01-08 17:05:39 · 1564 阅读 · 5 评论 -
11.ARM架构的异常与中断
目录1.异常与中断的引入2.CPU模式(Mdde)状态(state)以及程序状态寄存器3.Undefined 异常模式例子4.SWI异常模式实例源代码:1.异常与中断的引入1.1.中断的概念所谓中断是指CPU对系统发生的某个事件作出的一种反应:CPU暂停正在执行的程序,保留现场后自动地转去执行相应的处理程序,处理完该事件后再返回断点继续执行被“打断”的程序。引起中断...原创 2019-01-12 20:31:11 · 1146 阅读 · 0 评论 -
12.ARM按键中断实例
目录 1.思路2.例子3.中断服务函数的改进源代码1.思路步骤:1.设置中断源,发出中断信号2.设置中断控制器,能向CPU发出中断3.设置CPU,CPSR的I位,打开IRQ中断总开关。4.硬件进入中断处理函数之前会自动做一系列的工作1).把下一条指令的地址保存在Link Rigsiter(LR)寄存器(R1...原创 2019-01-21 20:29:55 · 2346 阅读 · 0 评论 -
13.ARM定时器中断实例
目录1.原理框图2.如何使用定时器3.思路4.例程5.定时器的改进源代码:此例程接上一篇博客:点我查看1.原理框图其中核心部分如下图所示:解析:1).在外部有一个时钟源,CLK2).每次时钟上,TCNTn减去1(n代表的是哪个计数器),当TCNTn的数值减小到和TCMPn相等时有个标志位进行提示(用于产生PWM信号),当数值减小到0时,...原创 2019-01-22 16:10:16 · 4037 阅读 · 0 评论 -
14.Nor-Flash操作实例
目录1.基础知识2.使用u-boot体验Nor Flash的操作3.编写NOR-Flash测试程序源代码数据手册 1.基础知识1).Nor Flash 和Nand Flash 的区别?NOR FLASH 和NAND FLASH 的区别 NOR FLASH NAND FLASH 结构 NORflash采用内存的随机读取技术。各单元之间是...原创 2019-01-27 22:17:11 · 6096 阅读 · 0 评论 -
15.Nand-Flash操作实例
目录1.Nand-Flash的原理图及其引脚功能2.如何操作Nand Flash3.Nand Flash 编程1) .初始化Nand Flash控制器2).读取芯片ID3).Nand_FLash读取数据 使程序能从Nand Flash启动4).Nand Flash块擦除5).Nand_Flash写数据 源代码1.Nand-Flash的原理图及...原创 2019-02-01 16:44:46 · 1688 阅读 · 0 评论 -
16.ARM裸板实现LCD显示
目录1.LCD原理 2.LCD时序3.BPP的概念4.初步编程4.1.建立重要结构体4.2.创建结构体变量,并赋值4.3.初始化LCD使用到的引脚 4.4.设置LCD控制器4.5.使能和禁用LCD控制器函数4.6.从结构体变量获取LCD重要参数4.7.写测试函数4.8.修改Makefile4.9.编译下载5.画点函数实现6.画圆画线...原创 2019-02-17 20:12:32 · 3441 阅读 · 0 评论 -
17.ARM裸板实现LCD显示--面向对象的编程思路
目录1.程序框架:2.LCD管理层和控制器相关层的代码分析3.LCD管理层和LCD屏幕相关层4.LCD的初始化5.测试LCD源代码:前言在实现LCD的程序下实现面向对象的一种编程思路1.程序框架:程序的框架大致如上所述:问题1:LCD控制管理层(④层)如何去管理下面不同LCD控制器的代码呢?答:提取出不同lcd控制器共同的特点(比如:控...原创 2019-04-06 18:02:26 · 855 阅读 · 0 评论 -
18.ARM裸板实现电阻触摸屏控制实例(一)
目录1.电阻触摸屏的原理2.如何计算触摸屏的XY坐标3.s3c2440的触摸屏接口3.1.ADC的原理框图3.2.触摸屏接口模式3.3.编程要点3.4.触摸屏主要寄存器描述4.ADC中断(触摸屏)和中断控制器5.编程控制触摸屏实验1:触摸屏按下或松开检测步骤:①创建宏定义②编写初始化ADC寄存器函数:③ADC和触摸屏中断使能:④ADC中...原创 2019-04-13 23:18:12 · 1719 阅读 · 0 评论 -
19.ARM裸板实现电阻触摸屏控制实例(二)
目录1.基础预备2.打印触摸屏坐标数据代码编写2.优化(增加定时器)源代码1.基础预备思路:既然已经能检测按下和松开,且能产生中断,那么就可以在触摸屏中断中开启自动坐标测量模式,然后开启ADC,如果ADC初始化完成就会产生一个ADC中断,去读取触摸触摸屏的坐标数据就OK了。问题:1.如何进入自动测量模式?设置ADCTSC寄存器的 [2:0]如下...原创 2019-04-20 15:10:35 · 761 阅读 · 0 评论 -
常用汇编语言语法
目录指令及其含义:指令:LDR(load)指令:LDR(伪指令)指令:STR(Srote)指令:ldm指令:stm指令:B指令:BL指令:MOV(move)指令:MOV(move)指令:sub指令:add指令:cmp指令:bne指令:MRS指令:MSR指令:bic 指令及其含义: ①指令:LDR(load)含义:...原创 2018-12-01 11:15:42 · 20556 阅读 · 0 评论