赞
踩
嵌入式系统的特点:专用型隐蔽型 资源受限 高可靠性 软件固化 实时性
嵌入式系统上的软件具有结构精简,代码轻量化,占用存储资源少的特点。
嵌入式系统和计算机操作系统的共同特征是:引导加载程序、外设驱动程序、操作系统、文件系统、网络协议栈、图形用户界面、数据库。
嵌入式系统应用开发工具的主要目的:提高开发质量,缩短开发周期,降低开发成本。
按照软硬件技术的复杂程度进行分类,可以把嵌入式系统分为:高端系统、终端系统和低端系统三大类。
仿真平台指嵌入式系统开发中使用的虚拟机管理软件、仿真软件或者指令集模式器
对应内存容量而言1KB = 1024B,对应外存(磁盘、U盘)等容量而言,1KB=1000B
OS装载方式:串口、以太网和USB装载。
嵌入式应用程序经过交叉工具链生成映像文件后,需要下载到目标机进行调试。
调试完毕后映像文件必须有专用工具烧写到ROM中去,这种烧写工具俗称编程器!
文本根据排版格式可分为:纯文本和丰富文本。windows环境下,txt就是纯文本。相对于线性文本,超文本按着网状结构组织信息。WWW网页是最为常见超文本。
当前速度最快的CPU已经超过10GHz。
嵌套向量中断控制器缩写为NVIC
GCC是GNU套件的编译链接器,能编译C语言,汇编语言。不具备编辑功能
GDB调试下,file命令是装入需要调试的可执行文件,run命令执行当前被调试的程序。
源文件到可执行文件的步骤:预处理->编译->汇编->连接。
前向通道和后向通道
前向通道 - 输入接口,A/D
后向通道 - 输出接口,D/A
AX88796芯片内部寄存器的地址范围:0x10000000 ~ 0x100003FF
硬件主体中央处理器和存储器,他们通过IO接口或者IO设备与外部世界联系,并借助总线相互连接
中央处理器主要由运算器、控制器、寄存器和高速缓冲区(cache)组成
嵌入式系统的CPU主要使用的有DSP、RAM以及FPGA。
DSP介绍
适用于数字信号处理的微处理器(DSP并非高性能通用处理器,它是一种专用于数字信号处理的微处理器)、支持单指令多数据(SIMD)并行处理的指令、显著提高音频、视频等数字信号的数据处理效率、手机和数码产品均有DSP
DSP芯片硬件结构有冯诺依曼结构和哈佛结构,两者区别是地址空间和数据空间分开与否,但一般的DSP都是采用改进型的哈佛结构,将数据空间和地址空间分开。
嵌入式系统的CPU特点
实时处理 、低功耗 、结构特拓展性、 集成了测试电路、 4、8、16、32位字长
需求分析和规格说明 -> 系统设计 -> 构件设计 -> 系统集成与测试
测试的目的是验证模块/系统的功能和性能,以及时发现错误
基于嵌入式WEB的应用系统中,构件设计阶段需要设计支持以太网通信的电路,包括以太网控制电路和以太网驱动电路。AX8879芯片内部寄存器的读/写地址,其首地址一般是0x1000 0000
宿主机 - 目标机的开发架构
与底层硬件控制程序的关系密切
软硬件资源受限制
需要固化程序
在线仿真器
JTAG适配器
示波器
按照字长可以分为:8/16/32/64 位结构
按照存储可以分为:冯诺依曼和哈佛(程序和数据分开存储)结构
按照指令集可以分为:CISC、 RISC结构
CISC(complex instruction set computer 复杂指令集)
RISC(reduced instruction set computer 精简指令集)
引导加载程序、初始化程序、设备驱动程序、配置文件
含有电路板的初始化程序
所有与特定电路板上硬件相关的功能都集成在板级支持包的库里
操作系统的上层代码通过板级支持包访问底层硬件
导和运行操作系统代码BSP中包含硬件相关的设备驱动程序
—种嵌入式操作系统的BSP不可能用于其他嵌入式操作系统
BSP是嵌入式系统的底层软件,只能在上电复位之后,进行系统软硬件环境的初始化
BSP一般由嵌入式软件开发人员进行开发,而HAL-一般由操作系统厂商提供,因此
BSP位于操作系统层和硬件层之间,而嵌入式系统软件中的中间件层并不需要BSP;
Windows Embedded Compact的BSP由Boot Loader OEM适配层、设备驱动程序、内核独立传输层以及镜像配置文件组成,
数字音频的正确处理顺序是:取样 -> 量化 -> 编码
数字音频的主要参数:取样频率、量化位数、声道数目、使用的压缩编码方法、比特率
比特率(码率)计算方式:码率 = 取样频率×量化位数×声道数,压缩后的码率和压缩前的码率也就差一个压缩比。
mp3
MPEG - 1层③算法进行有损的压缩编码,以8~12倍的比率大幅度降低了声音的数据量
WAV、MPEG-2、APE都是音频格式
MPEG-2是基于数字存储媒体运动图像和语言的压缩标准,属于视频文件格式,
音频频率范围:20HZ-20KHZ的模拟信号,量化位数16b
语音信号范围:300-3400HZ,电话采样频率为8KHZ,音乐为全频,取样频率为40KHZ
音频数字化步骤:采样、量化、编码,电话数字语音,量化位数8b
数字信号码率(b/s):取样频率*量化位数*声道数/压缩比
编码类型:未压缩 WAV
无损压缩:FLAL APE M4A
有损压缩:MP3 WMA AC3 AAC
包括BMP.、TIF、GIF、JPEG、PNG
数字图像的获取过程分为:扫描、分色、取样、量化
GIF是互联网上广泛使用的一种图像文件格式,它的颜色数目较少,不超过256色,文件特别小,适合互联网传输,无损压缩
JPEG是静止图像数据压缩编码的国际标准,特别适合处理各种连续色调的彩色和灰度图像,算法复杂度适中,软硬件皆可实现。
音乐的取样频率范围通常在40kHz以上
电话通信语音的采样频率范围通常为8kHz;
电话数字语音的频率范围在300-3400hz之间,而CD立体声的频率范围在20-20000hz之间;
位平面数目与像素深度是两个概念,位平面数目指的是像素颜色分量的数目,如RGB色彩模式具有三个位平面,而像素深度指的是每个像素用多少个二进制位来表示,如RGB色彩模式的三个位平面的3个颜色分量均用8位二进制表示,则图像的像素深度就是24位,即真色彩图像
常用格式及应用:
图像数据量(字节):图像水平分辨率*图像垂直分辨率*像素深度/8 (65536色的图像是16位)
GIF:颜色数目不超过256色,文件小,适合互联网传输
JPEG:数码相机(有损)
超文本格式采用网状结构组织;
Adobe公司开发的用于电子文档交换的文件格式是PDF,而MPEG-4为我们常说的规频格式mp4;:
宇符的形状有两种描达方法:点阵法和轮廓法
wwW网页是典型的超文本结构
GB2312编码中的每个汉字及符引以两个字节来表示,第一个字节称为“高位字节”(也称“区字节)”,第二个字节称为“低位字节”(也称“位字节”),固定采用双字节编码
GB18030采用不等长编码
UTF-16采用2-4字节多字节可变长编码
UTF-8可变长度的字节编码
ASCII共128个字符,96个可打印字符,32个控制字符。
ASCII是7位编码,但在计算机里用一个字节存放(计算机最基本的存储和处理单位)
每个字节多出的1位在计算机内部常保持为0,在数据传输中是奇偶校验位。
UTF-8是针对Unicade的一种可变长度字符编码,中、日、韩统一汉字使用3个字节表示,标准ASCII宇符使用1个字节表示。、2字节用于表示拉丁文、希腊文、阿拉的文等。4字节用于表示极少使用的语言字符。
GB2312 – 两字节编码(每个字节最高位默认为1),包含常用的中国汉字和图形符号。
GB18030 与国际Unicode相兼容。单字节对应ASCII,双字节对应汉字(GB2312在这完全适用,但是比它范围广),其余四字节对应其他字符。
UTF-8 – 单字节可变长编码,单字节向下兼容ASCII,音节文字对应两字节,CJK汉字(china japan koera 中日韩汉字)对应三字节,其余对应四字节。Linux 常用。
UTF-16 – 双字节可变长编码,CJK汉字及常用字符两字节,其余四字节。JAVA .NET 常用。
GB18030是一种变长多字节字符集,对字符集GB2312完全向后兼容,即字符集GB18030包含字符集GB2312的所有字符,且编码相同。
文本制作和展示
字符形状有两种描述方法:点阵法:描述字符离散点阵中笔画的占位信息
轮廓法:描述字符的轮廓
模拟/数字通信:
模拟信号:用连续变化的物理量表示,易受干扰
数字信号:用高低电平来表示电流大小,抗干扰能力强,差错可控制
有线/无线通讯
无线电波按频率/波长分为 中波 短波 超短波 微波
微波通信:手机通信、卫星通信、无线局域网
调频广播属于短波以及超短波通信
中波主要沿地面传播,绕射能力强,适用于广播和c海上通信;
短波具有较强的电离县反射能力,适用于环球通信,
超短波和微彼的绕制能力较差,只能作为视距或超视距中继通信。
数字通讯传输技术:
调制与解调技术
多路复用技术:时分(TDM)频分(FDM)波分(WDM)
交换技术:分组交换技术
分组交换采用的是存储-转发技术,将数据包划分成有固定格式的分组进行交换、传输,每个分组按一定格式附加源计算机地址、目的计算机地址、分组编号、起止标志、校验信息以及传输的数据块。
网络组成:
计算机等智能电子设备终端、数字通讯链路、通讯协议、网络软件
网络类型:
局域网、城域网、广域网
以太域网
传输方式:分组交换技术
步骤:发送设备MAC地址---接受设备MAC地址---控制信息---有效载荷---信息校验
MAC地址:全球唯一一个48个二进制组成
无线局域网:
无线电波进行数据传输,分为2.4GHZ,5.8GHZ两个频段,无线接入点 WAP或AP
协议:IEEE802.11 (wifi)IEEE802.15(蓝牙协议)
11b(2.4GHZ) 传输速率 11 mbps
11g(2.4GHZ)11a(5.8GHZ) 54 mbps
11n 108
11ac 1000
WLAN通信协议是802.11,传输速率可达到11Mbps,54Mbps,108Mbps。
IP地址分为A类、B类、C类三个基本类。另外两类分别为组播地址和备用地址。
IP地址解决了网络中所有计算机统一编址的问题
IP数据报是一种独立于各种物理网络的数据包格式
路由器是实现网络与网络互连的关键设备
A类
1.0.0.0 到126.255.255.255
分配给具有大量主机而局域网络数量较少的大型网络
由1个字节的网络地址和3个字节主机地址组成
网络地址的最高位必须是“0”,即第一字段的范围 0~127,但是由于全0和全1的地址用作特殊用途,实际可指派的第一个字段范围是1~126
每个IP地址可连16387064台主机,Internet有126个A类地址
可以用于多目的地址发送,言外之意可以组播
B类
128.0.0.0到191.255.255.255
用于国际性大公司和政府机构
前两个八位字节指明网络,后两个八位字节指明网络上的主机
C类
C类IP地址范围192.0.0.0 ~ 223.255.255.255
第1、2、3字节为网络地址,第四个字节为主机地址
C类地址数量较多,使用于局部局域网中,每个网络中最多包含254台计算机
用于一般小公司 校园网 研究机构
IPv4的数据报由头部和数据区组成,整个数据报的长度最多为216=65536=64K字节。
前导码(7个字节) -> 帧起始界定符(1字节) -> 目的MAC地址(6字节) -> 源MAC地址(6字节)-> 类型/长度(2字节) -> 数据(46~1500字节) ->帧校验序列(4字节)
局域网采用分组交换技术
发送设备MAC地址 - > 接收设备MAC地址 -> 控制信息 ->有效载荷 -> 校验信息
分
局域网采用分组交换技术,传输的数据帧的格式,按照传输先后顺序分别为;发送设备MAC地址、接收设备MAC地址、控制信息、有效载荷《传输的数据)、校捡信息
多个异构或者同构网络进行互联
网络层
集线器来放大信号实现远距离传输
协议转换器:用于传输层及以上各层的协议转换
热点 - 正式名称无线接入点,它实际上是一个无线交换机或无线路由器。
按照介质所使用的访问控制方法可分为:以太网,FDDI网和令牌网
必不可少的部分是集线器与交换机
ADSL
有限电视网
光纤接入
无线接入(无线局域网、GPRS移动电话接入、3G移动电话接入、4G)
RISC精简指令集。优先选取使用频率最高的简单指令。便于指令的流水线优化。为了弥补指令功能,CPU配置大量通用寄存器 MIPS ARM处理器
CISC 复杂指令集。功能强大的指令,指令长度不等,不变于指令的流水线执行Inter X86
冯诺依曼,是一种程序指令储存和数据储存在一起的存储器结构
PowerPC、MC68K、MIPS都是RISC,哈佛结构!,Cortex - M3系列是哈佛结构
哈佛结构,是一种将程序指令储存和数据储存分开的存储器结构
Cortex-A系列
单指令周期和流水线技术是RAM处理器的技术特征。ARM7采用冯诺依曼结构,3级流水线,ARM9采用哈佛结构,5级流水线
RAM都是RISC,但是存储结构有的是哈佛结构,有的是冯诺依曼结构。
RAM内部一般有:UART/I2C/SPI/CAN/USB/Ethernet等多个互连通信组件
经典: ARM7 ARM9 ARM11
ARM嵌入式处理器
ARM实时处理器(A高端M控制 R实时)
Cortex-A系列是面向高端应用的处理器,性能好、功耗合理;。集成了浮点运算器VFP,提供了高性能的单精度和双精度浮点运算。提供了对高级SIMD指令的支持、采用哈佛结构
Cortex-A57属于64位处理器
ARM Cortex –R 具有较高实时性,低成本,是面向实时控制应用的处理器,它的响应速度快,性能合理、功耗低
Cortex-M系列是面向微控制器的处理器性价比极高、成本极低、功耗极小;在对于功耗要求比较严格的应用场景,应当选用最低功耗的Cortex-M系列处理器,即ARM Cortex-MO处理器,ARM Cortex –M3 内部具有MPU(内存保护单元)和NVIC
ARM920T是一款成熟的处理器,含有指令Cache和数据Cahce各16KB;直到ARMCortex-R4才开始配置Cache。
ARM状态 (指令宽度32),所有指令都是32位指令,即4字节。每执行一条指令,PC值自动加4
Thunb状态下所有指令都是16位状态,即2字节,每执行一条指令,PC值自动加2,代码密度最大
Thumb-2状态下兼有16位及32位指令,即2字节和4字节的指令,每执行一条指令,PC值自动加2到4
调试状态是处理器停机调试时进入的状态
处理异常时自动进入ARM状态
通过BX指令,写数据到操作数寄存器(R0)的最低位。
R0[0]=1 – 从RAM状态切换到Thumb状态。R0[0]=0 – 从Thumb状态切换到RAM状态。
用户模式:user (没有SPSR寄存器):正常程序执行的模式 【10000】
快速中断模式 – FIQ :用于高速数据传输和通道处理、高速中断! 【10001】
外部中断模式 – IRQ :用于通常的中断处理 【10010】
管理模式 – SVC :又称特权模式,操作系统使用的一种保护模式 【10011】
终止模式 – ABT :用于虚拟存储及存储保护,处理存储器故障 【10111】
系统模式 – SYS (没有SPSR寄存器): 用于运行特权级的操作系统任务【11111】
未定义指令模式 – UND :用于支持通过软件方针硬件的协处理器 【11011】
R15:程序计数器(作为PC使用)
CPSR:当前程序状态寄存器
R0---R7:共用通用寄存器
UFP 浮点数运算
cache 高速缓冲存储器
NVIC 嵌套向量中断控制器
WIC 唤醒中断控制器
共37个寄存器,31个通用寄存器,6个状态寄存器
均为32位结构
R0---R7:不分组的寄存器
2*(R8---R12):标有fiq的寄存器代表快速中断模式专业
6*(R13---R14):专用于特殊模式的寄存器(除用户模式和系统模式分别位堆栈指针和程序链接寄存器之外)
• R12快速中断
• R13- SP (堆栈指针)
• R14- LR(链接寄存器)
• R15- PC(程序计数器)
• xPSR- (CPSR 和 SPSR)状态寄存器
CPSR + 5*SPSR(备份程序状态寄存器)
CPSR(当前程序状态寄存器)在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。
RAM中表示程序状态的寄存器是CPSR,其中状态位T的作用是在RAM状态与Thumb状态间进行切换,当T = 1时处理器处于的状态是Thumb状态。
N为符号标志位 - N=1表示运算结果为负,否则运算结果为正
Z为全0标志,运算结果为0
C:其设置分一下几种情况:
对于加法指令(包含比较指令CMN),如果产生进位,则C=1;否则C=O。
对于减法指令(包括比较指令CMP),如果产生借位,则C=O;否则C=1。
对于有移位操作的非法指令,C为移位操作中最后移出位的值。
对于其他指令,C通常不变。
V为溢出标志位,等于1表示溢出
Q增强的DSP运算指令是否溢出的标志,溢出时Q=1
I中断禁止控制位,I等于1 禁止外部IRQ中断,I=0允许
F为禁止快读中断为 - F=1表示禁止快速中断控制位,否则允许!
T:ARM与Thnmb指令切换控制位,T=1时执行Thumb指令,否则执行ARM指令
注:无Thumb指令的处理器,T=1时表示强制下一条执行的指令产生未定义的指令中断
禁止外部中断,允许快速中断,处理器处于快速中断模式
CPSR分为四个域:标志域F(31:24),状态域S(23:16),扩展域 X(15:8)
控制域C(7:0),单字节有单独操作域,不影响其他位(CVPR-C,CVPR-F)
SP有两个,分别为R13(MSP)和R13(PSP)即主堆栈指针(MSP)和进程堆栈指针(PSP),但在同一时刻只能有一个可以看到,这也就是所谓的“banked”寄存器。
这些寄存器都是32位的。
每一种处理器模式下(看下面的其中运行模式)都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。
当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用SPSR来恢复CPSR。
由于用户模式和系统模式不是异常中断模式,所以他没有SPSR。当用户在用户模式或系统模式访问SPSR,将产生不可预知的后果。
控制寄存器是4个字节,比如端口E的控制寄存器rGPECON = 0x00005555
数据寄存器是2个字节,比如端口E的数据寄存器rGPEDAT=0x0020
关于赋值,也写一个小例子
rGPDCON = ((rGPDCON | 0x00005555) &0xFFFF5555);//GPD0~GPD7配置为输出模式
先置位,然后再清零。
发生复位异常后,立即中止当前的指令,转而执行中断服务程序,而复位中断服务程序的地址在Ox00000000
七种不同的异常有六个优先级
异常优先级最高的是复位RESET
发生异常时,断点地址自动存放在LR中
注:设置IRQ模式下的堆栈指针,需在RO“清0”后使用指令
异常类型 | 优先级 | 工作模式 | 异常向量地址 |
复位RESET | 1 | 管理 | 0x00000000 |
数据访问中止DABT | 2 | 中止 | 0x00000010 |
快速中断请求FIQ | 3 | 快速中断 | 0x0000001c |
外部中断请求IRQ | 4 | 外部中断 | 0x00000018 |
指令预取中止PABT | 5 | 中止 | 0x0000000c |
软件中断SWI | 6 | 管理 | 0x00000008 |
未定义的指令UND | 6 | 中止 | 0x00000004 |
发生异常后将CPSR的值保存在将要执行异常中断对应的各自SPSR中,以实现当前处理器状态、中断屏蔽及标志位的保护设置当前状态寄存器CPSR的相应位
将断点地址保存在R14链接寄存器
给PC赋值,转移到中断向量表指定地址
IRQ异常对应的异常向量地址为:0x00000018
IRQ异常向量地址和下一个异常向量地址之间的间隔为4个字节
复位异常的异常向量地址是0x00000000。系统上电复位后,将从该地址处执行程序,RAM9的体系结构规定的各异常向量地址间隔通常是4个字节,以此复位异常向量地址处通常存储一条分支指令
分支指令、数据处理指令、程序状态指令、程序状态寄存器处理指令、加载/存储指令、协处理器指令、异常指令
1.指令的基本格式及说明
ARM是三地址指令格式,指令的基本格式为:
<opcode> `{<cond>} {s} <Rd>, <Rn> {,<operand2>}
其中<>号内的项是必须的,{}号内的项是可选的。各项说明如下:
opcode: 指令助记符;cond: 执行条件;s: 是否影响CPSR寄存器的值;Rd: 目标寄存器;Rn: 第一个操作数的寄存器;operand2: 第二个操作数;
条件码“cond”的使用可以实现高效的逻辑操作(节省跳转和条件语句),提高代码效率。所有的ARM指令都可以条件执行,
而THUMB指令只有B(跳转)指令具有条件执行功能。如果指令不标明条件代码,将默认为无条件(AL)执行。
汇编语言调用一个名为My的子程序的指令为: BL My 子程序返回调用程序的指令为:MOV PC, LR。
Thumb - 2指令集中关外部中断使用的指令是:CPSID I。开外部中断的指令为:CPSIE I。
RAM汇编程序采用分支指令B
子程序调用指令BL
条件转移指令BX
RAM汇编中没有专门的指令实现循环,一般采用比较指令CMP、ADD、SUB等
才能产生条件的指令,然后再通过带状态的条件转移指令BX来实现。
指令后面加个!表示更新基地址寄存器符号
寄存器间接寻址就是以寄存器中的值作为操作数地址,而操作数本身存放在存储器中。用于间接寻址的寄存器必须用[ ] 括起来
Test EQU 50 定义 标号 Test的值为50!
RAM完成有条件无符号加法运算,并更新CPSR中的状态,条件如果是相等,要求指令执行R1+R2,结果放入R3中,则这条指令ADDCEQ R3, R1, R2。如果条件是大于,要求执行R1 - R2,结果放入R3,则该指令是SUBHIS R3, R1, R2
# | 立即数符号,后面是十进制或十六进制 |
0x | 十六进制符号 |
! | 更新基础寄存器符号,表示指令完成操作后最后的地址应写入基础寄存器 |
^ | 复制SPSR到CPSR符号 |
- | 寄存器制表范围 如R0-R7 |
逻辑左移 | LSL | MOV R0,R1,LSL #2 将R1内容左移两位送入R0中 |
逻辑右移 | LSR |
|
算数左移 | ASL |
|
算数右移 | ASR |
|
循环右移 | ROR |
|
带折叠的循环右移 | RRX |
|
寄存器寻址 | mov r1, r2(C语言中的r1=r2) |
立即寻址(立即数) | mov r0, #0xFF00(加#表示是一个数字) |
寄存器移位寻址 | mov r0, r1, lsl #3(r1左移3位生成的数赋给r0,即乘2^3=8) |
寄存器间接寻址 | ldr r1, [r2]([r2]代表内存,内存的地址就在r2里面存着,r2就相当于指针,将[r2]中的内容给r1) |
基址变址寻址 | ldr r1, [r2, #4](r2+4) |
多寄存器寻址 | ldmia r1!, {r2-r7, r12}(加载:从内存往寄存器加载。一次访问7个寄存器r2到r7,r12,r1内存着内存的地址,并且r1相当于一个数组,r1是数组的数组名,也就是数组的头地址,里面有7个元素) |
堆栈寻址 | stmfd sp!, {r2-r7, lr}(从栈指针里面连续访问(压栈,弹栈)) |
相对寻址 | beq flag(以pc为参考作一个偏移量) |
flag: | (是作为标号的,上面的指令执行时将跳到这个标号所在处执行,flag可以是其他任何字母或单词) |
MOV | 数据传输指令,只存在于寄存器之间,不和内存打交道 子程序返回调用程序除了MOV PC, LR。还可以MOV R15, LR |
例 | MOV R1,R0 寄存器R0的值传到R1中 |
| MOV R1,R0,LSL#3 R0的值左移3位后船到R1 |
|
|
ADD | 加法指令 |
|
|
|
|
|
|
|
|
ADC | 带进位的加法指令 |
|
|
|
|
|
|
|
|
MVN | 进发传送 |
|
|
|
|
|
|
SUB | 减法指令 |
|
|
|
|
|
|
|
|
SBC | 带错位的减法指令 |
|
|
|
|
|
|
|
|
|
|
EQ - 相等
NE - 不等
MI - minus负数
PL - plus正数或0
vs - overflow set溢出
vc - overflow clear未溢出
GT - greater than带符号数大于
GE - greater and equal带符号数大于或等于
LT - lower than带符号数小于
LE - lower equal带符号数小于或等于
HI - high无符号数大于
CS - carry same无符号数大于或等于
CC - carry clear无符号数小于
LS - low and same无符号数小于或等于
LDR 字数据加载指令(存储器到寄存器的数据传送指令)
LDRB 字节数据加载指令
LDRH 半字数据加载指令
STR 字数据存储指令,16位
STRB 字节数据存储指令,无条件写入8位(1字节数据)
STRH 半字数据存储指令
STR R0, [R1] - 将R0中一个字的数据,存入以R1的值为地址的存储器中。
LDR R0, [R1] - 以R1的值为地址的存储器中的字数据(为32位)读入寄存器R0
LDRH R0, [R1] -以R1的值为地址的存储器中的半字数据(为16位)读入寄存器R0
LDRB R0, [R1] -以R1的值为地址的存储器的字节数据(为8位)读入寄存器R0
注意了,LDR R1, #0x12345678 LDR是加载存储指令,表示存储器到寄存器的数据传送,而#是立即数符号,表示立即数寻址**。所以这样写是不正确的!**
ADC R1, R2, R3 表示 R1 = R2+R3+C(C表示进位)(ADD表示加法)(ADC表示)
置1清0的操作
常见的操作是:or可实现置1,and可实现清0。比如ORR R0,R0,#00000003 该指令设置R0的0、1位,其余位保持不变。再比如AND R0,R0,#FFFFFFFE实现R0的最低位清零。还有一个是用ARM的指令进行位清0,BIC R1, R1 #0X00000088
立即数
汇编语言中中操作数有三种:寄存器操作数、存储器操作数和立即数。
其中立即数相当于高级语言中的常量(常数),它是直接出现在指令中的数,不用存储在寄存器或存储器中的数,如指令ADD AL,06H中的06H即为立即数。
自动更新,表示最后有叹号,内存地址由R1+4指示,表示要将R1和4写在一个括号内,整体作为一个地址,综合起来即[R1,#4]!。
正常模式
慢速模式
休眠模式 - 仅断开RAM内核时钟FCLK,CPU处于休眠模式,仍为外围硬件组件提供时钟。
掉电模式 - 切断内部电源,除非唤醒逻辑有效,否则内核不产生功耗
正常模式下,电源管理模式为内核及RAM芯片内部所有硬件组成提供时钟源,用户可以通过软件控制暂时不用的内置硬件组件处于关闭状态降低功耗。
USB2.0 的速度可达到 480Mb/s
USB3.0的速度可达到 5Gb/s, 即640MB/s
半双工差分方式通信
采用NRZI编码方式,具有四个引脚
MiniUSB具有5个引脚
嵌入式系统一般包括 时钟电路、电源电路、复位电路、JTAG测试接口。
电源电路
交流---直流 AC—DC
直流到直流 DC—DC
抵押稳压器LDO
LDO是低压差稳压器,而78XX系列芯片属于普通稳压器,不属于LDO;
LDO的输入是直流信号
不同系列的LDO,其输出电流可能不同
MPLI时钟是用于CPU及外围器件的锁相环时钟;
UPLI时钟是专用于USB设备的锁相环时钟;
HCL对时钟是AHB总线约时钟;
PCLKS时钟是APH总线时钟。
时钟信号:所有嵌入式处理器本质上为同步时序电路,需要时钟信号才能按节拍正常工作
0.01s基准定时时间选用S3C2410芯片内部的Timer0部件产生。若系统的主频参数PCLK=264MHz,分频器选择16,预分频系数选择为3,那么,Timer0的计数常数为:41250
计算方法:定时器输入时钟频率 = PCLK/(预分频系数+1)/(分割器值),计数常数 = 定时间间隔/(1/定时器输入时钟频率)
带宽 = 总线频率 × 数据线宽度 / 8 × 次数 / 周期
无源晶振:两只引脚 x1(输入) x2(输出)
有源晶振:四只引脚 x1 x2 电池 地
复位电路:
嵌入式系统有一个系统复位引脚 nRESET/RESRT ,n表示低电平位
nRESET必须保持若干个处理器时钟周期的低电平,系统才能可靠复位
ARM复位后PC指针指向的唯一地址0x00000000,此处通常有一个无条件转移指令,B RESET,转向RESET开始的系统初始化程序
USB是通用串行总线
CAN是一种工业控制局域网的标准总线
VGA是一种视频图形矩阵的输出接口
DA是一种基于红外线无线传创协议的接口
即: 控制器局域网,工业控制局域网标准总线
能够实现多主通信,串行异步通信方式。
CAN总线的数据帧由7个不同的域组成,其中域的长度可以是0~8位
采用CRC校验
RAM芯片内部嵌入CAN控制器
RAM的总线结构成为 AMBA -先进微控制器总线结构(一种开放式总线结构)
从1995的AMBA1.0到目前的AMBA4.0共四个版本!
RAM7 - AMBA1; RAM11 - AMBA2
按照AMBA总线规范,基于RAM内核的嵌入式处理芯片采用系统总线(ASB)和外围总线(APB)两层结构的方式构建片上系统
连接系统总线的高带宽组件(AHB接口)主要包括:电源管理和时钟控制器,测试接口(JTAG),外部存储器控制接口,DMA控制器,USB主机,中断控制器。(可以看出大多数为控制器)
RTC是与外围总线(APB接口)连接的硬件组件
ARM的AMBA总线中的APB连接的硬件组件的叙述
与APB相连接的应当是低性能的外围设备以及系统周边组件,如通用定时器、看门狗定时器、RTC等,
SPI与APB连接
I2C与APB连接
RTC与APB连接
FARM的AMBA总线中的APB连接的硬件组件的叙述
通过I2C总线传输数据时,不对每次传输的字节数目进行限制B、数据线SDA和时钟线SCL是I2C总线中的信号线
若ARM芯片中内置了I2C总线控制器,则在进行数据通信前,必须先对I2C的有关功能寄存器进行配置
I2C总线只有SDA和SCL两条信号线
I2C总线传输的第一个字节是起始标志和地址,其中最高位为开始标志,后7位为通信地址
接收方发送的ACK信号出现在一个字节传输完成的第9个时钟脉冲期间
I2C总线是多主总线
总线是串行半双工总线
涉及l2C操作的寄存器有IICCON、IICSTAT、地址寄存器、数据位移寄存器等;
由模拟量输入接口和数字输入接口组成,模拟输入接口包括,传感器,信号调理电路,A/D转换器等
模拟量输出接口属于典型嵌入式系统的后向通道
开关量/数字量输出接口属于典型嵌入式系统的后向通道
典型嵌入式系统后向通道中的隔离电路用于隔离嵌入式系统与被控系统之间的电气联系,以提高典型嵌入式系统的抗干扰能力
键盘、触摸屏、
AHB连接的高带宽组件
电源管理和时钟管理器,JTAG、外部存储器、控制器接口
APB连接低频带组件
目前嵌入式系统采用SRAM作为高速缓存存储器,分为一级和二级
半导体存储器芯片的存储容量取决于该芯片的地址总线的条数和数据总线的位数。
存储器带宽与存储器总线的工作频率有关,也与数据线的位数和每个总线周期的传输次数有关!
系统正在运行的程序的大部分数据和代码存放在主存储器(内存)中
系统尚未运行的程序的大部分数据和代码存放在外部存储器中
FRAM是铁电存储器,既有只读存储器非易失性的特点,又有随机存储器可快速随机读写的特点,FRAM可读可写,不是只读存储器。
SRAM是—种随机存取存储器
DRAM是一种随机存取存储器
FRAM是一种只读存储器
存储器的容量计算
V=2m * n m(地址线条数)n(数据线条数)单位b,除以8得B
容量取决于:地址总线条数 数据总线条数的位数
存储时间:从CPU给出有效的存储器地址开始到
带宽
指可以传输(读出/写入)的最大数据总量,单位 B/S kb/s MB/s
传输带宽与存储器总线的频率 数据位数(宽度)总线周期的传输次数有关
并行总线的存储器带宽
带宽= 总线频率 * 数据宽度/8 * 传输次数 / 总线周期(B/s)
一个存储器频率333MHZ,数据线宽度32位,每个周期传一次
带宽= 333 * 32 / 8 * 1=1332 MB/s
串行带宽
带宽=总线频率 * 1/10(B/s)
按照存取特性分为:RAM和ROM
按照物理位置分为:片内存储器和片外存储器以及外部存储器
按照存储信息的类型分为:程序存储区和数据存储器
RAM - 高速读取, DRAM - 高集成度
RAM 通常又有DRAM和SRAM之分,SRAM较DRAM电路复杂,但是速度更快,高速缓冲区(cache)就是典型的SRAM。 SRAM的复杂决定了它做不大,至多几十K。
内存条就是DRAM,速度较SRAM慢,但是可以做的很大,比如内存条就是典型的DRAM,其容量就上G了。
FRAM - 铁电随机存取存储器,MRAM - 磁性随机存取存储器。
(以上两个随机存储器是非易失性存储器)
复位RESET
未定义指令 UND
软件中断 SWI
指令预取终止 PABT
数据访问终止 DABT
外部中断请求 IRQ
快速中断FIQ
将CPRS的值保存到将要执行的异常中断对应的SPSR中
设置CPSR的相应位
断点地址保存到R14
PC赋值,转入向量地址
ARM处理器复位后的状态都是ARM状态
Flash闪存有两大类,或非型(NOR Flash)和与非型(NAND Flash)。
或非以字节为单位进行随机存取,存储在里面的程序可以被CPU执行。与非以页为单位进行存取,速度较前者慢。
与非门读出程序或数据时,是先将其预存入RAM,然后才被使用的。虽然速度较慢,但是其寿命,容量成本等方面有很大优势,常用的U盘基本都是NAND Flash。
DDR - dual data rate - 双倍数据速率
DDR2 - 使原来DDR可预取读取2位变成可预取读取4位或8位,把DDR的数据传输速率又提升了两倍或四倍
内部结构
1.基于ARM920T核的嵌入式处理器芯片,采用哈佛结构,内部有MMU,16KB的指令Cache,16KB的数据Cache,2440比2410多了音频视频接口
2.存储器控制组件:存储器控制器、总线控制器、外部主控制器、NAND Flash控制器
3.时钟和电源管理组件
S3C2410拥有2个串口,UART0/UART1
控制组件包括存储器控制器、总线控制器、外部主控器、NAND FLASH(以页为单位进行闪存)
存储器控制器提供访问外部存储器所需的存储器控制信号,支持大小端模式,地址空间供1GB,8个BANK,每个BANK128MB。
以ARM芯片为信合的嵌入式系统其I/O与存储器采用统一编址的方式,并不像×86那样采用I/O映射编址(独立编址)
只有BANK0是总线16、32位的访问,其他BANK均可以进行8、16、32位的访问
GPIO 有GPIOA~H
内部集成ADC
占空比是指TCMPBn占用TCNTBn的百分比,因此结果为60/100为60%。
内置的ADC有8个模拟量输入通道
TCNTBn为定时器计数缓冲寄存器;
TCNTOn为定时器计数缓冲寄存器;
TCON为定时器控制寄存器;
TCFGn为定时器配置寄存器。
Xenomai是一种采用双内核机制的Linux内核的强实时扩展,而不是bootloader软件。
启动加载模式是嵌入式系统正常工作时的独立启动方式, bootloader从非易失存储介质中引导和运行操作系统代码BSP中包含硬件相关的设备驱动程序
—种嵌入式操作系统的BSP不可能用于其他嵌入式操作系统
就软件而言,对硬件设备的访问通过设备接口内的寄存器实现
很多操作系统不允许运行在用户态的应用程序直接访问物理端口,用户的应用程序必须通过驱动程序才能访问硬件某些操作系统允许用户代码绕过操作系统直接访问硬件
底层软件 U-Boot
就软件而言,对硬件设备的访问通过设备接口内的寄存器实现
很多操作系统不允许运行在用户态的应用程序直接访问物理端口,用户的应用程序必须通过驱动程序才能访问硬件
驱动程序只能被高层软件调用运行,而不能自行运行
最强、最具弹性、应用最广、更新最快的开源BootLoader
Linux中引导程序加载时所支持不同体系结构处理器种类最多的Bootloader 是- U-BOOT。
全称universal-Boot-Loader
支持PowerPC、x86、ARM等多种体系结构的处理器
支持嵌入式Linux、VxWorks、QNX、RTEMS、Windows CE等操作系统
采用两个阶段完成操作系统的引导加载
引导加载程序主要完成:加电自检、外设存在自检**、内存地址映射**、初始化外围设备、内存寻址定位、加载并启动操作系统
BootLoader通常分为stage1和stage2两大部分。依赖于CPU的体系结构,比如设备初始化代码通常放在stage1中,且使用汇编语言实现,以达到短小精悍的目的。stage2通常用于C语言实现更复杂的功能,同时代码也具有更好的可读性和可移植性。
BootLoader的stage1的基本步骤是:基本硬件初始化,为加载stage2准备RAM空间,拷贝stage2的执行代码到RAM空间中,设置栈区指针SP,跳转到stage2的C程序入口点。
改变程序大小端排序
关闭看门狗
屏蔽中断
设置各个时钟
设置从SLEEP或者IDLE启动时的程序
初始化SDRAM
设置各模式指向的堆栈
设置好中断向量表
判断是从NOR FLASH(行读写,较慢)还是NAND FLASH(页读写)启动,
将文件拷到SDRAM中
设备驱动程序
IOS 的前身是 UNIX-BSD(宏内核架构,但是是微内核操作系统)
实时系统
民航导航系统
防空预警系统
电力输送控制系统
非实时
视频播放系统
博客发布系统
手机交互式城市交通导航系统
实时操作系统
实时系统对外界的响应是否正确不仅取决于功能正确性,而且取决于对事件处理的时间正确性
软实时任务通常允许偶尔错过最后期限,但若超过时限才响应,处理任务所进行的操作或者计算结果价值减少
硬实时、软实时与准实时的概念与时限的长短没有关系
一个实时系统所要处理的事件通常不止一个,而多个任务的实时性要求各有不同
RTOS响应中断请求并且完成相应的中断服务子函数的时间非常快!精细衡量这个时间一致性变化的术语是抖动!
中断服务子函数也是可以调用函数然后进行事件处理的,中断服务子程序返回的最后一步执行中断返回指令。
RTOS特征(主要特征是能够及时响应外部发生的随机任务请求并且能够在规定的时限内完成任务。)(不包括轮转调度)
异步IO和中断处理能力
任务切换时间和中断延迟时间确定
优先级中断和调度
抢占式调度
内存锁定
连续文件
同步
衡量实时操作系统性能的重要指标
中断延时时间、任务切换时间】任务抢占时间
硬:RTEMS
软:
任务执行时间超过截止时间系统的总损益就为负,这种实时系统成为硬实时系统。而且伴随有严重的后果,比如飞机控制器、核反应堆处理装置。
软实时操作系统超过时限并不会造成严重的影响比如:DVD播放机。
内核提供任务调度、任务间通信与同步、任务管理、时间管理和存储管理。
典型的单片机程序在程序指针复位后,首先进行堆栈、中断、中断向量、定时器、串行口等接口设置、初始化数据存储区和显示内容,然后就来到了一个监测、等待或空循环,在这个循环中,CPU可以监视外设、响应中断或用户输入。 这段主程序可以看作是一个内核,内核负责系统的初始化和开放、调度其它任务,相当于C语言中的主函数。
现代操作系统设计中,为减少系统本身的开销,往往将一些与硬件紧密相关的(如中断处理程序、设备驱动程序等)、基本的、公共的、运行频率较高的模块(如时钟管理、进程调度等)以及关键性数据结构独立开来,使之常驻内存,并对他们进行保护。通常把这一部分称之为操作系统的内核。
ARM内核嵌入式芯片组成
存储器及控制器②中断控制器③DMA控制器4GPIO端口⑤电源管理与时钟控制器
定时计数组件(如WDT,RTC)、模拟通道组件(如ADC、DAC)、互联通信组件(如UART、T
lIS、lC、USB)
微内核特征
内核小巧,传统操作系统中的许多部分都被移出内核。
接口一致,所有进程请求使用统一接口,进程不区分内核模式和用户模式服务。
各个功能模块之间松散耦合,只完成服务功能,系统管理功能交给一个或多个特权服务程序。
微内核扩充方便,但是各个功能之间的切换引起的开销很大!
属于微内核的典型嵌入式操作系统有:Symbian、VxWorks、QNX、uC/OS - II、IOS,而Symbian是普通实时操作系统
VxWorks收取授权费和版权费。
VxWokrs用于尖端科技中
宏内核
传统操作系统常采用的结构
应用程序效率高
切换开销小
对外来时间反应速度快
内存大
拓展性不高,维护困难
可预测性较低
可靠性较低
Android OS是典型的宏内核操作系统
宏内核又称为单内核!
UCLinux、RTLinux、uC/OS - II是开源嵌入式操作系统
Linux最初以Unix为原型,以实现POSIX标准作为其目标。
OS服务组件、用户进程、Linux内核、硬件
系统调用是Linux中用户进程和操作系统之间的重要接口!
其两者源码是完全不相同的,尽管函数和命令的功能处理结果、函数名称和参数十分相同,以及Unix的行命令、驱动程序和应用程序在Linux上能够运行。
Linux运行效率没有Unix高!
arm - linux - gcc交叉编译器来编译应用程序
要对一个应用程序进行调试排错,应在编译指令中加g参数对它进行编译
<font color=purpleLinux内核
Linux内核主要由5个子系统组成
进程调度(SCHED)
内存(任务)管理(MM)
虚拟文件系统(VFS)
网络接口(NET)
进程间通信(IPC)
进程调度模块负责控制进程对CPU资源的使用,所采取的调度策略是使得各个进程能够平均访问CPU,同时保证内核能及时地执行硬件操作。
内存管理模块的功能之一是屏蔽各种硬件接口内存结构的差异并向上返回一个统一的访问接口
网络接口模块包含网络接口驱动程序
支持进程之间的各种通信机制,其通信机制包括:信号、管道、消息队列、信号量、共享内存、套接字(socket)
RTEMS是一种硬实时操作系统,
eCos是一种开源的嵌入式实时操作系统
vxWorks属于商业嵌入式操作系统,并属于可免费获得源码的嵌入式操作系统
QNX和Nucleus都属于硬实时操作系统
uC/OS-Il是收费的商业嵌入式操作系统,
升级版的UC/OS - III是商用操作系统
在uc/os-Ⅱ系统中,任务是操作系统的基本调度单位
程序代码,没有返回值的C函数
任务组成 任务堆栈,用于保存任务的工作环境
任务控制块保持任务状态和属性的数据结构
休眠态(任务停留在内存中,还没有交给内核管理。)
就绪态(该任务已经准备好,可以运行了,但是由于任务的优先级比正在运行任务的优先级低,还暂时不能运行。)(还有一种情况被更高优先级打断!)
运行态(任务得到了CPU的控制权正在运行之中)
挂起态
被中断态(发生中断执行相应的中断服务,原来在正在运行后的任务暂时停止运行,进入被中断状态)
管理64个任务,共64个优先级,00是最高级别
中断处理
OSTaskCreate() - 任务创建相关
OSTickISR() - 时钟节拍中断服务子程序,与时间管理相关
OSCtxSw() - 真正实现任务切换的函数
OSIntExit() - 中断级的调度,在中断返回之前,必须调用退出中断函数 voidIntExit(void)
OSIntEnter()函数通常在进入中断前使用,它的作用是对全局变量OSIntNesting增1,代表中断嵌套深度加1。
OSSched() - 任务前导函数,任务级的调度函数
判断任务调度的三个条件是:
中断嵌套层数共享全程变量OSIntNesting = 0,也就是所有的ISR已经执行完毕
任务调度加锁层数共享全程变量OSLockNesting = 0,也就是调度没有被禁止
就绪表找到最高优先级比当前任务的优先级高
系统事件控制块的相关函数
OSSemCreate()(信号量创建)
OSMutexCreate()(创建互斥体)
OSMboxCreate()(建立一个邮箱)
OSQCreate()(创建事件控制块)
就绪任务登记在就绪表中,OSRdyTbl[ ] 是就绪表的位图映像矩阵,每一位代表了一个优先级任务的就绪状态,成为就绪位,该矩阵最多有64位。
函数OSTaskResume()的作用是将被挂起的任务进行恢复。
函数OSMboxAccept)在没有接收到消息时并不会挂起任务,因而可以在中断服务程序中调
用户必须在调用OSStart()启动多任务调度以后再开启时钟节拍器
OS_CPU_C.C - 创建任务的自用栈空间、定义用户接口的hook原型
OS_CORE.C - 核心调度代码,包括系统初始化、启动多任务调度开始运行、任务创建管理与调度、TCB初始化、就绪表初始化、ECB初始化、任务事件就绪表、空闲任务
OS_MEM.C - 内存管理,包括创建分区,获得存储块
OS_TASK.C - 任务管理,包括改变一个任务的优先级、创建或者删除一个任务,恢复一个被挂起的任务
任务管理、时间管理、内存管理、任务调度、任务间通信和同步
只要有其他任务就绪,空闲任务的处理器时间就会被抢占
外部事件的中断或系统发生的异常将导致当前运行的任务进入被中断态
如果任务在被挂起时正在等待延时,则挂起操作将被取消
除任务的操作将使任务转入休眠状态,不再被内核调度
如果任务在被挂起时正在等待延时,则挂起操作将被取消
用uC/OS-lIl是可抢占的实时内核,在中断服务完成后允许进行中断级的任务调度
uC/OS-II支持任务级的任务调度和中断级的任务调度两种方式
抢占式实时操作系统且每个任务都有自用栈
使用它的栈空间校验函数,可以确定每个任务到底需要多少栈空间
该系统不包含设备驱动程序,只是一个纯内核
不支持时间片轮转调度,所以赋给每个任务的优先级是不相同的
允许每个任务之间有不同的栈空间
II 具有良好的可剪裁性和可移植性
能够支持的任务数最多是64(保留8个给系统,实际剩下56个)
最多允许的中断嵌套层数可以达到255层
软件结构一般具有:应用软件层,API层,内核层和设备驱动层
该系统能提供周期性时钟信号(时钟节拍),用于实现任务的正确延时和超时确认,节拍率在10~100Hz之间
互斥信号量可以解决优先级反转的问题
事件控制块用以对信号的管理
任务管理中空闲任务是系统创建的第一个任务(空闲任务永远不会处于挂起态,还可能运行态,即使优先级最低,一旦其他任务都被堵塞他就可以执行了!)
中断服务子程序的伪码结构:保存全部CPU寄存器到栈,调用OSIntEnter()或者OSIntNesting变量加1,执行中断服务代码或发出IPC信息通知特定任务去执行中断服务,调用OSIntExit()函数,恢复所有CPU寄存器,执行中断返回指令。
uC/OS-II 移植到一个 嵌入式系统电路板上正常运行,必须具备的条件
处理器的C编译器能产生可重入代码,且用C语言就可以打开和关闭中断。
处理器支持中断,并且能产生定时中断。(通常在10至100Hz之间)。
处理器支持能够容纳一定量数据(可能几千字节)的硬件栈区。
uC/OS-II 保护任务之间的共享数据和提供任务之间的通信,可达到保护目的方法通常有
利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITCAL来打开和关闭中断。
利用函数OSSchedLock()和OSSchedUnlock()对任务调度函数上锁和开锁。
利用信号量、互斥量、邮箱和消息队列进行任务间通信。
系统启动过程中,Bootloader执行完毕后,调用应用程序主文件(通常是main.c)里的main函数。main函数在执行过程中除了用户函数和硬件初始化函数之外,需要执行下面三个重要函数:OSInit() -> OSTaskCreate() -> OSStart()(注意先后顺序)
OSInit()函数先建立最初的任务就绪表,然后建立4个空白的数据链表,即:任务控制块链表,事件控制块链表、标志链表、内存控制块链表。
响应时间(包括中断延迟时间和任务切换时间)(任务切换时间又包括人物抢占时间)
吞吐量
生存时间
响应时间有两个指标 - 中断延迟时间和任务切换时间
实时系统对时间约束要求的严格性,使可预测性成为实时系统的一项重要性能要求,它是指RTOS能够对外部事件的响应时间和实时任务的执行时间进行判断,以确定被时间触发的实时任务能否在规定的时间内完成。
一般按照相应时间能将实时系统分为三类:强实时系统,其相应时间一般在ms级或us级;普通实时操作系统一般在s级,弱实时系统一般在数十s级。
任务时限有两种
截止时间:任务开始执行时间到任务必须完成的时间间隔。
任务执行预设:又叫任务最快完成时间,这是在无中断响应情况下的任务最快执行时间。
所谓的大端模式就是,低地址存储高位字节。
所谓的小端模式就是,低地址存储低位字节。
GPIO引脚一般是多功能复用的,具有0态,1态和高阻态。
作为输入接口时一般具有缓冲功能,作为输出接口时一般具有锁存功能。
GPIO可以实现并行IO,SPI、UART、I2C都是串行。
UART由发生器、接收器、控制单元以及波特率发生器等组成。
可实现全双工通信!
RAM芯片中的UART收发信息时,可以采用FIFO,也可以采用普通模式
一般接收和发送缓冲区的FIFO字节数一样的,长度可编程选择4B、8B、16B、64B。
UART传送消息的格式是以起始位开始以停止位结束
线路空闲时,UART逻辑电平为1
UART传送信息时,一次可传输的数据位可以是5,6,7,8位,由编程决定
基于UART可组成RS-232接口
RS232 - 最远15m
RS485 - 最远1.2k
RAM实现485总线的功能,需要采用S3C2410芯片内部的UART部件外加转换芯片等来实现。在软件设计时,初始化波特率9600bps,数据格式格式为:8位数据位,无数据检验位,1位停止位。那么1s时间内最多传输960个字节。(注意计算还得加上起始位和停止位)
SOC已成为嵌入式处理器芯片的主流发展趋势
它是集成电路进入深亚微米时代的产物
既能把数字电路也能把模拟电路集成到单个芯片上
包含数字电路、模拟电路以及射频电路
单个芯片即可完成采集、转换、存储、处理和I/O等多种功能
SOC有通用SOC芯片和专用SOC芯片之分
专用SOC芯片按其工艺分为定制芯片和现场可编程芯片两类
集成电路有小规模(SSI)、中规模(MSI)、大规模(LSI)、超大规模(VLSI)和极大规模(ULSI)组成,嵌入式处理芯片一般属于VLSI和USLI。
集成电路大多是在硅衬底上制作,硅衬底是单晶硅锭经切割,研磨和抛光而成的圆形薄片。
集成电路中的电路及电子元件,需要反复交叉氧化、光刻、掺杂和互连等工序才能制成。
JTAG标准中规定的TAP接口具有5根信号线
构建一个宿主机 - 目标机的开发环境,若目标机是裸机,那么为了调试和下载软件需要将调试仿真器连接到目标机的JTAG接口!
JATG是一种嵌入式测试技术,大多数嵌入式CPU、DSP、FPGA器件都支持JTAG
JTAG允许多个芯片的边界扫描寄存器BSR通过JTAG接口串联在一起,实现对多个器件的测试
通过JTAG可以实现在线编程功能
按照存储区域类型划分为3类,RO段,RW段,ZI段,RO段是指代码存储区和常数存储区,具有只读属性
可执行输出文件有3个生成目标:Debug、Release、DEbugRel
工程项目按照一定的逻辑来分组管理文件:
文件映射关系较简单时:使用编译、链接选项来确定输入文件的连接关系
地址映射关系较复杂时:使用scatter(分散加载)格式的文件来确定输入文件的连接关系
RVDS开发工具套件中,主要包括工程管理器、编译连接器、调试器和指令集仿真器。调试器支持硬件在线调试和软件仿真调试。
向操作系统内核提供了访问硬件底层的函数接口
嵌入式软件中直接访问底层硬件的例程集合
增加的HAL位于硬件电路板和操作系统内核之间
嵌入式电路板的最基本软件
HAL函数是移植操作系统的基础
HAL隐藏了不同硬件平台的差异性,从而改善了操作系统的可移植性!
MMU,内存管理单元,它是用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。
虚拟地址到物理地址的转换
虚拟地址到物理地址的转换通过查找页表来完成,每次在访问内存时先插TLB,查不到再到内存中查整个页表。
#define KEYOUTPUT (*(VOLATILE int8u*)0X56000044)
#define KEYINPUT (*(VOLATILE int8u*)0X56000044)
INT16U ScanKey()
{
INT16U key = 0xFFFF;
INT16U i;
INT8U temp=0xFF, output;
rGPECON = ((rGPECON & 0xFFFFFF00) | 0x00000055); //初始化GPE0~GPE3为输出
rGPECON = rGPECON & 0xFFFFFF0F; //初始化GPE4~GPE7为输入
//判断键盘中是否有键按下
for(i=1; ((i<=8) && (i>0)); i<<=1)
{
output |= 0xFF;
output &= (~i);
KEYOUTPUT = output;
temp = KEYINPUT;
if((temp & 0xF0) != 0xF0)//判断列信号是否全部为1
{
key = (~i);
key <<= 8;
key |= ((temp & 0xF0)|0x0F);
return key;
}
}
return 0xFFFF;
}
//key返回判断哪个按键的方法:最高4位和最低四位都是1,
//即 1111 ---- ----1111,然后次高字节是行,再次高是列,
//比如第2行第3个按键按下, 对应为 11111101 1011 1111 - 0xFDBF
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。