计算机三级嵌入式笔记
ARM内核
- 按照AMBA总线规范,以ARM内核为基础的嵌入式处理器芯片采用系统总线与外围总线两层结构的方式构建片上系统。
- AMBA是ARM公司为连接ARM内核与处理器芯片中的其他各种组件而定义的总线规范,即先进的微控制器总线体系结构
- ARM处理器芯片内部的模拟组件包括ADC和DAC,有的还带有比较器等。这对于既需要处理数字信号又需要处理模拟信号的混合系统的设计提供了较好的解决方案。
ARM处理器
- ARM采用RISC精简指令集,采用冯诺依曼体系或哈佛结构
- ARM的总线结构称为AMBA (先进微控器制总线结构)
- 是ARM推出的开放式总线结构,是目前流行的一种工业标准片止结构;
- ARM处理器具有耗电省、功能强、成本低等特点
- ARM7~ARM1 1为经典ARM处理器
- RM11以后则以Cortex命名,分为三个系列,-A, -R, -M系列
– 分别面向高端应用、实时控制和微控制器;
– 其中Cortex-M 系列针对成本和功耗敏感的MCU和终端应用(如智能测量、人机接口设备、汽车和工业控制系统、大型家用电器、消费性产品和医疗器械)的混合信号设备进行过优化。
ARM处理器工作状态
- 在ARM的体系结构中,处理器可以工作在3种不同的状态
- ①ARM状态
– ARM状态是ARM处理器工作于32位指令的状态,即32位状态,所有指令均为32位宽度。 - ②Thumb/Thumb-2状态
– Thumb状态是ARM执行16位指令的状态,即16位状态。
– 在Thumb模式下, 指令代码只有16位,使代码密度变大,占用内存空间减小,提供比32位程序代码更佳的效能。 - ③调试状态
- ARM处理器复位后自动进入ARM状态。
异常
ARM处理器7种异常:
(1) 复位RESET
(2) 未定义指令UND
(3) 软件中断SWI
(4) 指令预取中止PABT
(5) 数据访问中止DABT
(6) 外部中断IRQ
(7) 快速中断FIQ
指令 | 作用 |
---|---|
CPSID I | 关中断 |
CPSIE I | 开中断 |
CPSID F | 关异常 |
CPSIE F | 开异常 |
I:IRQ中断; F:FIQ中断
- 顺序需要备注背诵,用于确定中断的异常地址
- 异常所对应的模式也需要背诵
运行模式切换
- 模式位需要背诵,需要知道切换到任意模式的操作方法
ARM汇编指令
ARM指令格式
操作码+(条件域)+(更新S)+寄存器
BX是操作码,EQ是条件域
BX是分支类指令,带状态切换的跳转指令
BXEQ 则是带状态和条件跳转
- LDR 字数据加载指令
- LDRB 字节数据加载指令
- LDRH 半字数据加载指令
- STR 字数据存储指令
- STRB 字节数据存储指令
- STRH 半字数据存储指令
LDR/STR
ARM是RISC结构,数据从内存到CPU之间的移动只能通过L/S指令来完成,也就是ldr/str指令。
LDR,STR是用于寄存器和外部存储器交换数据指令,注意与MOV的区别,后面只在寄存器或常数交换.
- LDR(load)用于把一个32Bit的WORD数据从外部存储空间装入到寄存器中.
- STR(Store) 用于把一个寄存器的值存入外部存储空间,是LDR的逆操作.
若想把数据从内存中某处读取到寄存器中,只能使用ldr:
ldr r0, 0x12345678
把0x12345678这个地址中的值存放到r0中
mov不能实现这个功 能,mov只能在寄存器之间移动数据,或者把立即数移动到寄存器中
还有一个就是ldr伪指令,虽然ldr伪指令和ARM的ldr指令很像,但是作用不太一样。ldr伪指令可以在立即数前加上=,以表示把一个值(一般是一个地址)写到某寄存器中
ldr r0, =0x12345678
把0x12345678这个值写到r0中,所以,ldr伪指令和 mov是比较相似的。只不过mov指令限制了立即数的长度为8位,也就是不能超过512。而ldr伪指令没有这个限制。如果使用ldr伪指令时,后面跟的 立即数没有超过8位,那么在实际汇编的时候该ldr伪指令是被转换为mov指令的。
LDR加载指令
- LDR(load)用于把一个32Bit的WORD数据从外部存储空间装入到寄存器中.
LDR指令的格式为: LDR{条件} 目的寄存器,<存储器地址>
LDR指令用亍从存储器中将一个32位的字数据传送到目的寄存器中。该指令通常用亍从存储器中读取32位的字数据到通用寄存器,然后对数据迕行处理。当程序计数器PC作为目的寄存器时,指令从存储器中读取的字数据被当作目的地址,从而可以实现程序流程的跳转。
指令示例:
LDR R0,[R1] ;将存储器地址为R1的字数据读入寄存器R0。
LDR R0, [R1] ;R1的值当成地址,再从这个地址装入数据到R0 (R0=*R1)
LDR R1,=0x30008000 ; 把地址0x30008000的值装入到R1中,LDR中用常数要用=打头.
LDR R0,[R1,R2] ;将存储器地址为R1+R2的字数据读入寄存器R0。
LDR R0,[R1,#8] ;将存储器地址为R1+8的字数据读入寄存器R0。
LDR R0,[R1,R2]! ;将存储器地址为R1+R2的字数据读入寄存器R0,并将新地址R1+R2写入R1。
LDR R0,[R1,#8]! ;将存储器地址为R1+8的字数据读入寄存器R0,并将新地址R1+8写入R1。
LDR R0,[R1],R2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2写入R1。
LDR R0,[R1,R2,LSL#2]! ;将存储器地址为R1+R2×4的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。
LDR R0,[R1],R2,LSL#2 ;将存储器地址为R1的字数据读入寄存器R0,并将新地址R1+R2×4写入R1。”
LDR伪指令
ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。
LDR伪指令的形式是“LDR Rn,=expr”。
例子:
COUNT EQU 0x40003100
……
LDR R1,=COUNT
MOV R0,#0
STR R0,[R1]
COUNT是定义的一个变量,地址为0x40003100。
LDR R1,=COUNT是将COUNT这个变量的地址,也就是0x40003100放到R1中。
MOV R0,#0是将立即数0放到R0中。最后一句STR R0,[R1]是一个典型的存储指令,将R0中的值放到以R1中的值为地址的存储单元去。实际就是将0放到地址为0x40003100的存储单元中去。可 见这三条指令是为了完成对变量COUNT赋值。用三条指令来完成对一个变量的赋值,
LDR 的两种用法
1)LDR PC, =MyHandleIRQ 表示将MyHandleIRQ符号放入PC寄存器中
2)LDR PC,MyHandleIRQ 表示将读取存储器中MyHandleIRQ符号所表示的地址中的值,及需要多读一次存储器。
综述所述:ldr伪指令用于加载32位的立即数或一个地址值到指定寄存器。在汇编编译源程序时,ldr伪指令被编译器替换成一条合适的指令。若加载的常数 未超出mov或mvn的范围,则使用mov或mvn指令代替该ldr伪指令,否则汇编器将常量放入文字池,并使用一条程序相对偏移的ldr指令从文字池读 出常量。
STR存储指令
- STR(Store) 用于把一个寄存器的值存入外部存储空间,是LDR的逆操作.
STR指令的格式为:
STR{条件} 源寄存器,<存储器地址>
STR指令用亍从源寄存器中将一个32位的字数据传送到存储器中。该指令在程序设计中比较常用,寻址方式灵活多样.
指令示例:
STR R0,[R1],#8 ;将R0中的字数据写入以R1为地址的存储器中,并将新地址R1+8写入R1.
STR R0,[R1,#8] ;将R0中的字数据写入以R1+8为地址的存储器中。
STR r1,[r0] ;将r1寄存器的值,传送到地址值为r0的(存储器)内存中
STR R0,[R1] ; 把R0的值,存入到R1对应地址空间上(*R1 = R0)
STR R0,=0x30008000 ;把R0中值存入到地址0x30008000
- S2C2440的中CPU内核以外的模块的控制寄存器空间也是属于外部空间,所以也得用如下指令LDR R0,=GPFDAT
比较指令(CMP、TST、BNE、BEQ)
CMP算数处理指令
CMP:算数处理指令,用于把一个寄存器的内容和另一个寄存器的内容或立即数进行减法比较,不存储结果,都会更改标志位
假设现在AX寄存器中的数是0002H,BX寄存器中的数是0003H。
执行的指令是:CMP AX, BX
执行这条指令时,先做用AX中的数减去BX中的数的减法运算。
列出二进制运算式子:
0000 0000 0000 0010
-0000 0000 0000 0011
_________________________________
(借位1) 1111 1111 1111 1111
所以,运算结果是 0FFFFH
根据这个结果,各标志位将会被分别设置成以下值:
- CF=1,因为有借位
- OF=0,未溢出
- SF=1,结果是负数
- ZF=0,结果不全是零
- 还有AF, PF等也会相应地被设置。
CMP 比较指令做了减法运算以后,根据运算结果设置了各个标志位。
标志位设置过以后,0FFFFH这个减法运算的结果就没用了,它被丢弃,不保存。
执行过了CMP指令以后,除了CF,ZF,OF, SF,等各个标志位变化外,其它的数据不变.
对照普通的减法指令 SUB AX, BX,它们的区别就在于:
- SUB指令执行过以后,原来AX中的被减数丢了,被换成了减法的结果。
- CMP指令执行过以后,被减数、减数都保持原样不变。
TST逻辑处理指令
- TST:逻辑处理指令,用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中条件标志位的值。当前运算结果为1,则Z=0;当前运算结果为0,则Z=1.
BNE数据跳转指令
- BNE: 数据跳转指令,标志寄存器中Z标志位不等于零时, 跳转到BNE后标签处.
BEQ数据跳转指令
- BEQ: 数据跳转指令,标志寄存器中Z标志位等于零时, 跳转到BEQ后标签处.
例
TST r0 , #0x2 ;进行and运算,如果bit_2为1,zero==0
;如果bit_2为0,则zero==1,即该指令测试bit_2是否为0
BNE led_blink ;非零则跳转,若zero==1,跳转到led_blink处执行
;若zero==0,则继续执行下一步指令
SUB r1 , r1 , #1 ;r1=r1-1
CMP r1 , #0 ;r1是否等于0,并更改标志位
BNE led_blink ;zero==1时跳转至led_blink处,zero==0时则继续执行
位移
- LSL 逻辑左移
- ASL 算术左移
- LSR 逻辑右移
- ASR 算术右移
- ROR 循环右移
- RRX 带扩展的循环右移
- ASL 和 LSL 是等同的,可以自由互换。
- 可以用一个立即值(从0到31)指定移位数量,或用包含在0和31之间的一个值的寄存器指定移位数量
http://blog.sina.com.cn/s/blog_13ced11ce0102v63n.html
复合
- ADDCEQ R3,R1,R2 如果条件相等,则R3=R1+R2
- SUBHIS R3,R1,R2 如果条件相等,则R3=R1-R2
嵌入式内核分类
- 嵌入式处理器的体系结构按指令集可分为两大类: CISC和RISC;
– CISC(复杂指令集)
– RISC(精简指令集) - 按存储机制分为冯诺依曼结构及哈佛结构;
(1)采用存储程序方式,指令和数据不加区别混合存储在同一个存储器中,
数据和程序在内存中是没有区别的,它们都是内存中的数据,
当EIP指针指向哪.
CPU就加载那段内存中的数据,如果是不正确的指令格式,CPU就会发生错误中断.
在现在CPU的保护模式中,每个内存段都有其描述符,
这个描述符记录着这个内存段的访问权限(可读,可写,可执行).
这就变相的指定了哪些内存中存储的是指令哪些是数据)
指令和数据都可以送到运算器进行运算,即由指令组成的程序是可以修改的。
(2)存储器是按地址访问的线性编址的一维结构,每个单元的位数是固定的。
(3)指令由操作码和地址码组成。操作码指明本指令的操作类型,地址码指明操作数和地址。操作数本身无数据类型的标志,它的数据类型由操作码确定。
(4)通过执行指令直接发出控制信号控制计算机的操作。指令在存储器中按其执行顺序存放,由指令计数器指明要执行的指令所在的单元地址。指令计数器只有一个,一般按顺序递增,但执行顺序可按运算结果或当时的外界条件而改变。
(5)以运算器为中心,I/O设备与存储器间的数据传送都要经过运算器。
(6)数据以二进制表示。
– 哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和存储的,执行时可以预先读取下一条指令。
哈佛结构是指程序和数据空间独立的体系结构,目的是为了减轻程序运行时的访存瓶颈。 - 按字长分为8位、16位、 32位和64位。
数据处理操作
寄存器
ARM 处理器一般共有 37 个寄存器,其中包括:
(1) 31 个通用寄存器,包括 PC(程序计数器)在内,都是 32 位的寄存器。
(2) 6 个状态寄存器,都是 32 位的寄存器。
ARM 处理器共有 7 种不同的处理器模式:
- 用户模式(User)
- 快速中断模式(FIQ)
- 普通中断模式(IRQ)
- 管理模式(Svc)
- 数据访问中止模式(Abort)
- 未定义指令中止模式(Und)
- 系统模式(Sys)
- R0~R3 主要用于子程序间传递参数
- R4~R11 主要用于保存局部变量
- 在Thumb 程序中,通常只能使用 r4~r7 来保存局部变量
- R12 用作子程序间 scratch 寄存器,即 IP 寄存器
- R13 通常用做栈指针,即 SP
- R14 寄存器又被称为连接寄存器 LR,用于保存子程序以及中断的返回地址
- R15 用作程序计数器 PC,由于 ARM 采用了流水线机制,当正确读取了 PC 的值后,该值为当前指令地址加 8 个字节,即 PC 指向当前指令的下两条指令地址, PC = 当前程序执行地址 + 8个字节.
- CPSR和SPSR都是程序状态寄存器,其中SPSR是用来保存中断前的CPSR中的值,以便在中断返回之后恢复处理器程序状态
CPSR(32位)
- 状态寄存器就是CPSR(current program status register)寄存器
- 程序状态寄存器CPSR在用户级编程时用于存储条件码:
– CPSR包含条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息。
- CPSR的低8位(包括I、F、T和M[4:0])称为控制位,程序无法修改,除非CPU运行于特权模式下,程序才能修改控制位!
- N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的结果所改变,并且可以决定某条指令是否被执行!
各个条件码的含义如下:
N:在结果是有符号的二进制补码情况下,如果结果为负数,则N=1;如果结果为非负数,则N=0。
Z:如果结果为0,则Z=1;如果结果为非零,则Z=0。
C:其设置分一下几种情况:
对于加法指令(包含比较指令CMN),如果产生进位,则C=1;否则C=0。
对于减法指令(包括比较指令CMP),如果产生借位,则C=0;否则C=1。
对于有移位操作的非法指令,C为移位操作中最后移出位的值。
对于其他指令,C通常不变。
V:对于加减法指令,在操作数和结果是有符号的整数时,如果发生溢出,则V=1;如果无溢出发生,则V=0;对于其他指令,V通常不发生变化。
CPSR_CXSF
大小端模式
- 大端模式
所谓的大端模式(Big-endian),是指数据的高字节,保存在内存的低地址中,而数据的低字节,保存在内存的高地址中. - 小端模式
所谓的小端模式(Little-endian),是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中.
USB
- USB接口提供了内置电源,主机的USB接口向从设备提供电源;
- USB总线接口支持设备的即插即用和热插拔功能;
- USB2.0采用半双工差分方式传送信息;
- 目前USB2.0的速度为480Mb/s,USB3.0达到5Gb/s即640MB/s;
- USB3.0利用了双向数据传输模式,而不再是USB2.0时代的半双工模式;
操作系统
实时操作系统特征
IEEE的实时UNIX分委会认为实时操作系统应该具备7个特征:
- 具有异步I/O和中断处理能力;
- 任务切换时间和中断延迟时间确定;
- 优先级中断和调度;
- 抢占式调度;
- 内存锁定;
- 连续文件
- 同步;
强实时操作系统
一般按照对外部事件的响应时间快慢,将嵌入式操作系统分成强实时型和普通实时型。
强实时嵌入式操作系统有
- VxWorks
– VxWorks 操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统. - pSOS
– pSOS是美国系统集成公司(Integrated Systems, Inc. 简称ISI公司)根据几十年从事嵌入式实时系统理论研究与实践活动而设计开发的,该公司已经被风河公司(windriver)兼并. - μC/OS-II
– μC /OS-II是一个完整的、可移植、可固化、可裁剪的抢占式实时多任务内核。μC/OS-II绝大部分的代码是用ANSII的C语言编写的,包含一小部分汇编代码,使之可供不同架构的微处理器使用.
μC/OS-II
- μC/OS-II是抢占式实时操作系统内核,只能管理64个任务
- 目前的版本保留8个任务给系统
- 用户编写的应用程序最多可以有56个任务
- 不支持时间片轮转调度法,因此赋给每个任务的优先级是不相同的
- 每个任务拥有自用栈
- μC/OS-II允许中断嵌套,嵌套层数可达255层。
- uC/OS-II能够提供周期性时钟信号(即所谓的时钟节拍) ,用于实现任务的正确延时和超时确认。节拍率应在每秒10次到100次之间,即10~ 100Hz.
- μC/OS-II内核只提供任务调度、任务间通信与同步、任务管理、时间管理和存储管理等基本功能,资源消耗非常小
- 移植时需要修改的文件
– OS_CPU.H
– OS_CPU_A.S
– OS_CPU_C.C
任务优先级
- 创建任务时OSTaskCreate()的最后一个参数表示任务优先级,其值越小,优先级越高.
任务间通信
uCOS-II中有多种方法可以保护任务之间的共享数据和提供任务之间的通信。
其中主要有以下三种:
- 利用宏OS _ENTER _CRITICAL()和OS _EXIT _CRITICAL()来关闭中断和打开中断
- 利用函数OSSchedLock()和OSSchedUnlock()对任务调度函数上锁和开锁
- 利用信号量、互斥信号量、邮箱和消息队列进行任务间通信
VxWorks
VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS) ,是嵌入式开发环境的关键组成部分,支持基于抢占式优先级调度的任务管理。
它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空航天等高精尖技术及实时性要求极高的领域中。
单(宏)内核与微内核
单内核
单内核结构是传统操作系统采用的结构,也称为宏内核(Macro Kernel).
其缺点是
- 占内存空间大
- 缺乏可扩展性
- 维护困难
- 任务执行时间的可预测性较低
- 可靠性较低
- 排除故障和增加新功能需要重编译
其优点是 - 应用程序生成效率高
- 系统花在内核功能切换上的开销非常小
- 对外来事件反应速度快
- 操作系统内核的运行效率高
微内核
微内核操作系统是对单内核做了结构改进后推出的
- 内核小巧
- 传统操作系统内核中的许多部分都被移出内核
- 采取服务器方式实现;
- 接口一致,所有进程请求使用统一接口,
- 进程不区分内核模式和用户模式服务
- 各个功能模块之间松散耦合,只完成服务功能
- 系统管理功能交给一 个或多个特权服务程序
- 微内核功能扩充方便,但是各个功能之间的切换而引起的开销比较大
属于微内核的典型嵌入式操操作系统
属于微内核结构的典型嵌入式操作系统有
- Symbian
- VxWorks
- QNX
- μC/OS-II
- iOS
等。
BootLoader
U-Boot
U-Boot,全称Universal Boot Loader,是德国DENX公司开发的,用于多重嵌入式CPU的Bootloader程序,它遵循GPL条款, 源代码完全开放。从FADSROM、 8XxROM、
PPCBOOT逐步发展演化而来
U-Boot以POCBoot和ARMBoot计划为基础。
支持
- Power PC系列处理器
- X86
- ARM
- Mips
- Alpha
- IA64
- SupcrHSPARC
等多种常用体系结构处理器.
系统中引导加载程序主要完成
- 加电自检
- 外设存在自检
- 内存地址映射
- 初始化外围设备
- 内存寻址定位
- 加载并启动操作系统
常用函数名/宏名
中断和任务切换
- 宏OS _ENTER _CRITICAL()和OS _EXIT _CRITICAL() 关闭中断和打开中断
- 函数OSSchedLock()和OSSchedUnlock() 对任务调度函数上锁和开锁
- 真正实现任务切换的函数是OSCtxSw()
- 任务级的调度是由函数OSSched() 完成
- 中断级的调度是由函数OSIntExit() 完成
消息
- OSQPend() 函数用来等待并获得消息.
- OSQPost() 函数用来发送消息.
事件控制块
μC/OS-II的事件控制块有4种类型,需要使用4个不同的函数来创建。
4个不同的函数分别是:
- OSSemCreate ()
- OSMutexCreate ()
- OSMboxCreate ()
- OSQCreate()
移植相关
- OS_CPU.H
- OS_CPU_A.S
- OS_CPU_C.C
其他
- 按照IC设计文件的类型,IP核通常分为三种:软核、固核和硬核
- 当前数码相机中用于存储相片的大多是闪存卡,即Flash存储器
- WLAN所采用的主要通信协议是802.11;数据传输速率可达到11 Mbps. 54Mbps、 108Mbps甚至更高.
经典ARM处理器有7种异常:主要包括
- 复位RESET
- 未定义指令UND
- 软件中断SWl
- 指令预取中止PABT
- 数据访问中止DABT
- 外部中断请IRQ
- 快速中断FIQ
指令 | 作用 |
---|---|
CPSID I | 关中断 |
CPSIE I | 开中断 |
CPSID F | 关异常 |
CPSIE F | 开异常 |
I:IRQ中断; F:FIQ中断
当调用子程序时,子程序调用指令为BL fun_name
子程序返回调用程序的指令为MOV PC,LR(注意逗号)
按照AMBA总线规范,基于ARM内核的嵌入式处理器芯片采用系统总线与外围总线两层结构的方式构建片上系统。其中的系统总线主要用于连接高带宽快速组件。
嵌入式系统的存储器以半导体存储器为主,FRAM和MRAM,分别称为铁电随机存取存储器和磁性随机存取存储器。
l2C总线的仲裁机制。I2C总线被启动后,多个主机在每发送一个数据位时都要对SDA信号线电平进行检测,只要检测的电平与自己发出的电平相同就会继续占用总线。
总线的控制遵循"低电平优先”的原则。
UART由发送器、接收器、控制单元及波特率发生器等构成。
基于操作系统的外围工具软件运行在嵌入式系统上,往往具有内部结构精简,代码轻量化,占用存储资源少的特点。
任务时限的两种类型。实时系统的任务时限有两种:截止时间,也就是任务开始执行时间到任务必须完成的时间间隔。任务执行预设时间,或者叫做任务最快完成时间,这是无中断响应情况下的任务最快执行时间。
实时系统对时间约束要求的严格性,使可预测性成为实时系统的-项重要性能要求,它是指RTOS能够对外部事件的响应时间和实时任务的执行时间进行判断,以确定被事件触发的实时任务能否在规定的时间内完成。
实时系统按响应时间一般分成三类:
- 强实时系统,其响应时间一般在毫秒级或微秒级;
- 普通实时系统,其响应时间一般在秒级;
- 弱实时系统,其响应时间一般在数十秒级;
一般嵌入式系统的开发过程,通常分为:
- 需求分析与规格说明
- 系统设计
- 构件设计
- 系统集成与测试
等4个阶段。
嵌入式系统的分类
- 按系统的软硬件技术复杂度,嵌入式系统分为低端系统、中端系统和高端系统。
以太网传输数据计算
10Mbps理论速度是每秒1.25MB,算上损耗后在计算时当做1Mbyte每秒计算.
最小系统
嵌入式最小硬件系统一般包括
- 嵌入式处理器
- 时钟电路
- 电源电路
- 复位电路
- 存储器
- 调试测试接口。
前向通道和后向通道
- 前向通道通常指的是输入接口,由模拟量输入接口和数字量输入接口组成
- 模拟输入接口包括传感器,信号调节电路(滤波,放大器等), A/D转换器等构成
- 后向通道是输出接口,由模拟量和数字量接口组成,
- 包括D/A转换器,功率放大器,执行器等
系统总线相关
按照AMBA总线规范,以ARM内核为基础的嵌入式处理器芯片采用系统总线与外围总线两层结构的方式构建片上系统。
连接到系统总线上高带宽组件主要包括:
- 电源管理与时钟控制器
- 测试接口
- 外部存储器控制接口
- DMA控制器
- USB主机
- 中断控制器等
AMBA是ARM公司为连接ARM内核与处理器芯片中的其他各种组件而定义的总线规范,即先进的微控制器总线体系结构
总线带宽和存储器带宽
- 存储器带宽计算公式: (储存器工作频率MHzx 数据线宽度/8)x 1B/s= 带宽 MB/S;
- 存储器总线采用串行总线,以10位为一个数据帧(包含一个字节的存储数据),则总线带宽=总线频率/10。[总线带宽=总线频率/数据帧大小]
跳转进入操作系统内核
指令BL_ main来引导应用程序的主函数main()
网页设计
- 网页设计时通常采用HTML语言来进行编程。
- 客户机一般用浏览器访问因特网。
Web服务器和CGI概述
CGI概述
CGI(公用网关接口)规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准。Web服务器通过调用CGI程序实现和Web浏览器的交互,
也就是CGI程序接受Web浏览器发送给Web服务器的信息,进行处理,将响应结果再回送给Web服务器及Web浏览器。CGI程序一般完成Web网页中表单(Form)数据的处理、数据库查询和实现与传统应用系统的集成等工作。CGI程序可以用任何程序设计语言编写,如Shell脚本语言、Perl、Fortran、Pascal、C语言等。但是用C语言编写的CGI程序具有执行速度快、安全性高(因为C语言程序是编译执行且不可被修改)等特点。
- CGI接口程序可以用任何语言编程,在HTML网页中嵌入CGI接口程序可以完成与设备操控组件的信息交互。
数据位宽
- 控制芯片AX88796的数据总线宽度为16位。
汉字编码
- 我国大陆地区目前广泛使用的汉字编码国家标准有GB2312和GB1 8030两种
- 常用汉字采用2个字节表示。
内存映射
上面的每个bank最大支持128M,除了bank0,其它的每个bank都支持8/16/32位操作,bank0只支持16/32位操作.
网络
TCP/IP
TCP/IP协议簇中的IP协议,在Internet中负责选择合适的路由,使发送的数据分组(packet) 能够正确无误地按照地址找到目的计算机
以太网数据帧
- 前导码(7字节)
- 帧起始定界符(1字节)
- 目的MAC地址(6字节)
- 源MAC地址(6字节)
- 类型/长度(2字节)
- 数据(46~1500字节)
- 帧校验序列(4字节)
IP地址中A类、B类、C类地址的区别
1、IP地址表示方法不同:
A类
一个A类IP地址是指, 在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。A类IP地址中网络的标识长度为8位,主机标识的长度为24位。
B类
一个B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码。如果用二进制表示IP地址的话,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。B类IP地址中网络的标识长度为16位,主机标识的长度为16位。
C类
一个C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。如果用二进制表示IP地址的话,C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。C类IP地址中网络的标识长度为24位,主机标识的长度为8位。
2、IP地址范围不同:
A类IP地址 地址范围从1.0.0.1到127.255.255.254
(二进制表示为:
00000001 00000000 00000000 00000001 - 01111111 11111111 11111111 11111110)。
最后一个是广播地址。
B类IP地址地址范围从128.0.0.1-191.255.255.254
(二进制表示为:
10000000 00000000 00000000 00000001 - 10111111 11111111 11111111 11111110)。
最后一个是广播地址。
C类IP地址范围从192.0.0.1-223.255.255.254
(二进制表示为:
11000000 00000000 00000000 00000001 - 11011111 11111111 11111111 11111110)。
最后一个是广播地址。
3、子网掩码不同:
A类IP地址的子网掩码为255.0.0.0
B类IP地址的子网掩码为255.255.0.0
C类IP地址的子网掩码为255.255.255.0
4、适用范围不同:
A类适用的类型为大型网络,A类网络地址数量较少,有126个网络,每个网络支持的最大主机数为256的3次方-2=16777214台;
B类适用的类型为中型网络,B类网络地址数量适中,有16384个网络,每个网络支持的最大主机数为256的2次方-2=65534台;
C类适用的类型为小型网络,C类网络地址数量较多,有209万余个网络,适用于小规模的局域网络,每个网络支持的最大主机数为256的1次方-2=254台。
开发工具
GCC调试
- 要对源程序进行调试,通常需要在GCC命令中加入参数-g
RVDS
- RVDS支持 所有ARM芯片,包括Cortex全系列,还支持其他内核的处理器,如51系列
- RVDS中包括工程管理器、编译连接器、调试器和指令集仿真器
- RVDS支持对Flash存储器的编程
- RVDS编译的代码比ADS1.2编译的代码执行效率高
协议
SPI
- SPI总线是一种同步串行外设接口总线
- SPI的信号线MISO称为主机输入从机输出数据线, MOSI称为主机输出从机输入数据线
操作系统理论
响应时间
响应时间(Response Time)是计算机从识别一个外部事件到做出响应的时间,其具体指标包括:中断延迟时间和任务切换时间
需要掌握的计算以及参数
- 波特率计算
- 定时器计算
- 以太网传输数据量计算
- 波特率传输数据量计算
- 图片占用大小计算
- 存储器容量计算
- 总线和带宽计算
- 语音采样频率计算
– 根据奈奎斯特定理(香农定理)
在进行模拟/数字信号的转换过程中,
当采样频率fs.max大于信号中最高频率fmax的2倍时(fs.max>2fmax) - 人的语音信号是频率范围为300Hz ~ 3400/4000Hz的模拟信号
- 设计语音回放软件时,为了使回放时语音不会失真,需定时把数字语音信号输出到D/A芯片中,这个定时时间间隔应该是一个采样周期
需要会配置的外设寄存器
各个模式都需要会配置(*为重点)
*IIC
*RTC(报警功能)
*UART
*LCD
*GPIO
*TIME(PWM)
红外
ADC
DAC
DMA
SPI
串口配置
波特率计算
- 当题目要求设置的波特率采用四舍五入的方式时需要在最后+0.5再-1
//例 设置波特为9600,时钟源为PCLK
UBRDIVu = ((int)(PCLK)/(9600*16+0.5)-1);
//因为*和/的优先级比+高,所以会再计算完后四舍五入再减一
定时器配置
相关参数计算
- 定时器输入时钟频率 = { 微处理器的系统频率参数 / ( 预分频系数+1 ) } / 分割器值
– 注意此处是连除,不能当做除以一个分子来处理 - 计数常数 = 定时时间间隔 / ( 1 / 定时器输入时钟频率 )
– 此处可以当做除以一个分子等价于 = > 定时时间间隔 * 定时器输入时钟频率
//例 需设置定时间隔0.01秒
系统的主频参数PCLK为264MHz,分频器值选择为16,预分频系数选择为3,Timer0的计数常数为
1.定时器输入时钟频率 = 微处理器的系统频率参数/(预分频系数+1)/分割器值
= (264*1000000Hz)/(3+1)/16
= 4125000 Hz
2.计数常数 = 定时时间间隔/(1/定时器输入时钟频率)
= 0.01*4125000 Hz
= 41250
3.所求结果41250位计数常数的结果
寄存器设置
在设置该寄存器时需注意顺序
例设置定时器0的预分频系数为4,则TCFG0 = 0X40;
因为Prescaler 0的顺序从低到高是定时器1,定时器0
LCD控制器
相关管脚
- s3c2410
– GPIOC和GPIOD
– 管脚全部复用 配置数值为0xAAAAAAAA和0xAAAAAAAA
寄存器设置
RTC实时时钟
- 一般寄存器均为8位
- TICNT设置为0xFF(0X7F)则时间间隔为1秒
- RTCALM设置为0则禁止所有报警功能
- RTC读写操作完成后对RTCCON“使能位”操作,不需要复位即设置为0X0E
RTCEN 位可以控制所有 CPU 与 RTC 之间的接口,因此在系统复位后在 RTC 控制程序中必须设置为 1 来使
能数据的读/写。同样的在掉电前,RTCEN 位应该清除为 0 来预防误写入 RTC 寄存器中。
- 注意在写之前需要将RTCEN 置1,即对寄存器RTCCON = RTCCON | 0x01
- 注意在写之后需要将RTCEN 清0,即对寄存器RTCCON = RTCCON & 0xFE