嵌入式技术基础与实践王宜怀复习指导.docx
- 文档编号:11159859
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:21
- 大小:38.09KB
嵌入式技术基础与实践王宜怀复习指导.docx
《嵌入式技术基础与实践王宜怀复习指导.docx》由会员分享,可在线阅读,更多相关《嵌入式技术基础与实践王宜怀复习指导.docx(21页珍藏版)》请在冰豆网上搜索。
嵌入式技术基础与实践王宜怀复习指导
嵌入式复习整理
第1章概述
1.嵌入式系统定义:
一种计算机硬件与软件的组合,也许还有机械装置,用于实现一个特定的功能。
在某些特定情况下,嵌入式系统是一个大系统或产品的一部分。
2.微控制器的含义:
在一块芯片上集成了中央处理单元(CPU)、存储器(RAM/ROM等)、定时器/计数器及多种输入输出(I/O)接口的比较完整的数字处理系统。
第2章AW60硬件最小系统与S08CPU
1.AW60的组成结构:
S08CPU、存储器、定时器接口模块、定时器模块、看门狗模块、通用IO模块、串口通信模块(SCI)、串行外设接口(SPI)、IIC模块、A/D转换模块、键盘中断模块、时钟发生模块、复位与中断模块等。
2.AW60存储器映像:
所谓存储器映像(Memorymap),是指地址$0000-$FFFF这个64KB空间,哪些地址被何种存储器或I/O寄存器所占用。
(1)2KB的RAM:
地址为$0070-$086F,用于存放用户数据(主要是全局变量)和堆栈空间。
(2)两段Flash存储器,$0870-$17FF,$1860-$FFFF,存储程序、常量和中断向量。
(3)I/O映像寄存器:
直接页寄存器、高端页寄存器和非易失性寄存器。
3.AW60引脚:
电源类信号引脚、复位信号引脚、主要功能模块引脚和其他引脚。
4.AW60最小硬件系统:
包括电源及其滤波电路、复位电路、晶振电路及其PLL滤波电路、写入器接口电路。
5.S08CPU的特点:
(1)目标代码与M68HC05系列、M68HC08系列MCU向上兼容;
(2)具有16位堆栈指针SP、16位变址寄存器HX,16种寻址方式;
(3)最高达40MHzCPU内部总线频率、64KB程序/数据存储器空间;
(4)不经过累加器A的存储器之间数据直接传送;
(5)快速8位×8位乘法指令、快速16位与8位相除指令,增强的BCD指令;
(6)模块化结构,可扩展的内部总线定义可使寻址范围超过64KB;
(7)低功耗的STOP、WAIT模式。
6.S08CPU的内部寄存器:
(1)累加器A(Accumulator):
8位通用寄存器,用来存放操作数和运算结果。
(2)变址寄存器HX(IndexPointer):
16位寄存器,H是高8位,X是低8位,可单独使用。
(3)堆栈指针SP(StackPointer):
指向下一个栈地址的16位寄存器,堆栈指针SP采用递减的结构,即进栈时SP减1,出栈时SP加1。
(4)程序计数器PC(ProgramCounter):
也是16位的,可寻址范围达64KBPC存放下一条指令的地址,在执行转移指令时存放转移地址,在执行中断指令时存放中断子程序入口地址。
(5)条件码寄存器CCR(ConditionCodeRegister):
8位的寄存器,其中5位(除了中断屏蔽位I)用于指示执行完指令的结果状态,这些位可由程序来测试。
7.S08CPU的寻址方式:
(1)内在寻址方式(INH)
(2)立即寻址方式(IMM)
(3)直接寻址方式(DIR)
(4)扩展寻址方式(EXT)
(5)无偏移量变址方式(IX)
(6)8位偏移量变址方式(IX1)
(7)16位偏移量变址方式(IX2)
(8)相对变址寻址方式(REL)
(9)存储器:
直接地址—直接地址寻址方式(DD)
(10)存储器:
直接地址—变址、变址加1的寻址方式(DIX+)
(11)存储器:
立即数—直接地址寻址方式(IMD)
(12)存储器:
变址—直接地址、变址加1的寻址方式(IX+D)
(13)无偏移量变址、变址加1寻址方式(IX+)
(14)8位偏移量变址、变址加1寻址方式(IX1+)
(15)8位偏移量堆栈寻址方式(SP1)
(16)16位偏移量堆栈寻址方式(SP2)
8.S08CPU的指令系统:
(1)数据传送指令:
取数指令、存数指令、堆栈操作指令、寄存器间数据传送指令、存储器间数据传送指令。
(2)算术运算指令:
加减指令堆栈操作指令、乘/除法指令、加1/减1指令、取反/求补指令、比较指令、清零指令、测试是否为0指令、SP与HX增加指令。
(3)逻辑运算指令:
完成逻辑与、或、异或等操作。
(4)位操作类指令:
位测试、位置1、位清0等操作。
(5)移位类指令:
单向移位指令、循环移位指令。
(6)程序控制指令:
一般转移指令、特殊转移指令、跳转指令。
(7)其他指令。
第3章第一个样例程序及CodeWarrior工程组织
1.通用I/O接口:
I/O接口,即输入输出接口,是微控制器同外界进行交互的重要通道。
所谓通用I/O,也记为GPIO(GeneralPurposeI/O),即基本的输入/输出,有时也称并行I/O,或普通I/O,它是I/O的最基本形式。
2.上拉电阻和下拉电阻:
MCU的某个引脚通过一个电阻接到电源(Vcc)上,这个电阻被称为“上拉电阻”。
与之相对应,若MCU的某个引脚通过一个电阻接到地(GND)上,则相应的电阻被称为“下拉电阻”。
3.AW60的GPIO接口:
AW60有7个GPIO口,每个GPIO口的名称由一位英文字母组成,分别是A、B、C、D、E、F、G。
GPIO模块的每个口最多对应8个GPIO引脚,但各个GPIO口的编程寄存器均为8位,没有对应引脚的位无效。
GPIO的基本寄存器:
(1)端口数据方向寄存器(DDR):
若为0,则为输入,若为1,则为输出。
(2)端口数据寄存器:
存放要输入或输出的数据。
第4章基于硬件构件的嵌入式系统开发方法
1.嵌入式系统开发主要存在以下两大问题:
硬件设计缺乏重用支持
驱动程序可移植性差
2.根据接口之间的生产消费关系,接口可分为两类:
提供接口和需求接口。
根据所拥有接口类型的不同,硬件构件分为三类:
核心构件、中间构件、终端构件。
第5章串行通信接口SCI
1.串行通信的概念:
SCI(standardnon-return-zeromark/spacedataformat)“标准不归零传号/空号数据格式,通常采用NRZ数据格式。
“不归零”的最初含义是:
用正、负电平表示二进制值,不使用零电平。
“mark/space”即“传号/空号”分别是表示两种状态的物理名称,逻辑名称记为“1/0”。
下图给出了8位数据、无校验情况的传送格式
2.奇偶校验:
字符奇偶校验检查(characterparitychecking)称为垂直冗余检查(verticalredundancychecking,VRC),它是每个字符增加一个额外位使字符中“1”的个数为奇数或偶数。
奇校验:
如果字符数据位中“1”的数目是偶数,校验位应为“1”,如果“1”的数目是奇数,校验位应为“0”。
偶校验:
如果字符数据位中“1”的数目是偶数,则校验位应为“0”,如果是奇数则为“1”。
3.串行通信的传输方式:
单工(Simplex)、全双工(Full-duplex)、半双工(Half-duplex)。
4.AW60的SCI模块的编程结构:
从程序员角度看,涉及SCI的有8个8位寄存器,其中2个波特率寄存器,1个数据寄存器,3个控制寄存器,2个状态寄存器。
SCI波特率计算公式:
SCI波特率=fBUSCLK/(16×BR),其中fBUSCLK为内部总线频率
SCI控制寄存器1(SCIxC1)用于设置SCI的工作模式,可选择运行模式、唤醒模式、空闲类型检测以及奇偶校验。
SCI控制寄存器2(SCIxC2)用于收/发及相关中断控制的设置。
5.SCI模块的编程结构:
(1)SCI构件的初始化功能函数:
voidSCIInit(uint8SCINo,uint8sysclk,uint16baud){
uint16ubgs=0;
if(SCINo>2)
SCINo=2;//若传进的通道号大于2,则按照2来处理
//计算波特率并设置:
ubgs=fsys/(波特率*16)(其中fsys=sysclk*1000000)
ubgs=sysclk*(10000/(baud/100))/16;//理解参考上一行,此处便于CPU计算
SCI_BDH(SCINo)=(uint8)((ubgs&0xFF00)>>8);
SCI_BDL(SCINo)=(uint8)(ubgs&0x00FF);
//无校验,正常模式(开始信号+8位数据(先发最低位)+停止信号)
SCI_C1(SCINo)=0b00000000;
//允许发送,允许接收,中断方式收发
SCI_C2(SCINo)=0b00001100;
}
(2)SCI构件的单字节发送功能函数:
voidSCISend1(uint8SCINo,uint8ch){
if(SCINo>2)
SCINo=2;//若传进的通道号大于2,则按照2来处理
while(!
SCI_S1(SCINo)&0b1000000);//判断发送缓冲区是否为空
SCI_D(SCINo)=ch;
}
(3)SCI构件的单字节接收功能函数:
uint8SCIRe1(uint8SCINo,uint8*p){
uint16k;uint8i;
if(SCINo>2)
SCINo=2;//若传进的通道号大于2,则按照2来处理
for(k=0;k<0xFBBB;k++){//有时间限制
if(SCI_S1(SCINo)&0b00100000)!
=0){//判断接收缓冲区是否满
i=SCI_D(SCI_No);
*p=0x00;
break;
}
}
if(k>=0xFBBB){//接收失败
i=0xFF;
*p=0x01;
}
returni;
}
6.中断向量表:
中断向量表是一个指针数组,其中每一项都存放了中断处理函数的入口地址。
7.中断的处理过程一般为:
关中断、保护现场、执行中断服务程序、恢复现场、开中断。
8.AW60中断源:
AW60有26个中断源,按优先级从高到低的顺序分别是:
复位中断(1个)、SWI指令中断(1个)、引脚中断(1个)、低电压检测中断(1个)、ICG中断(1个)、定时器中断(10个)、SPI中断(1个)、SCI中断(6个)、键盘输入中断(1个)、ADC转换完成中断(1个)、I2C中断(1个)和实时中断(1个)。
26个中断源只有18个中断向量,有的是几个中断源使用同一个中断向量。
第6章GPIO的应用实例——键盘、LED与LCD
1.键盘
(1)AW60的键盘中断模块:
AW60单片机上的PTG0–PTG4、PTD2–PTD3、PTD7共8个引脚与键盘中断模块(KBI)的引脚复用。
键盘中断矢量地址:
$FFD2—$FFD3。
键盘中断初始化顺序:
先设置键盘中断状态和控制寄存器(KBI1SC),后设置键盘中断引脚使能寄存器(KBI1PE)。
(2)键盘编程扫描一次4X4键盘并返回扫描键值:
uint8KBScan1(){
uint8line,i,tmp,tmp1,tmp2;
line=0b11111110;//是第一根行线为0(低电平)
for(i=0;i<4;i++){
//当前扫描的一行,输出低电平
KB_GP=line;//输出开始扫描
asm(“NOP”);
asm(“NOP”);
//读取键盘口数据寄存器
tmp1=KB_DP;//输入扫描结果
tmp2=KB_GP;
//整合扫描结果,即键盘输入引脚的4位
tmp=(tmp1&0x80);
tmp1&=0x0C;
tmp1=(tmp1<<3);
tmp|=tmp1;
tmp|=(tmp2&0x1F);
//通过观察4根列线中是否出现低电平来判断当前行有无按键
if((tmp&0xF0)!
=0xF0)//当前行有按键按下
break;
line=(line<<1)|0x01;
}
returntmp;
}
2.数码管LED编程实例:
(1)LED的引脚使用:
利用MCU的PTB口控制8个位段(数据),PTB7–PTB0分别接h-a位段,PTD0,PTD1,PTD4,PTD5作为片选端(位控制)。
(2)LED编程结构:
voidLEDInit(){//LED初始化
LEDdata_D=0xFF;
LEDcs_D=0x33;
}
voidLEDshow1(uint8I,uint8c){//在LED上的第i位显示数字
LEDcs=CStable[i];
LEDdata=Dtable[i];
}
voidLEDshow(uint8*Buf){//在LED上显示4个十进制数
uint8i,j,c;
for(i=0;i<4;i++){
c=Buf[i]-‘0’;
LEDshow(3-I,c);
//延时
for(j=0;j<100;j++);
}
}
3.液晶LCD编程实例
(1)LCD的基本特点和分类方法
1)低电压微功耗,2)平板型结构,3)使用寿命长,4)被动显示,5)显示信息量大且易于彩色化,6)无电磁辐射
LCD的分类:
1)按电光效应分类,LCD可分为电场效应类,电流效应类,电热效应类和热效应类。
2)按现实内容分类,LCD可分为字段型,点阵字符型,点阵图形型。
3)按LCD的采光方式分类,分为带背光源与不带背光源两大类。
(2)HD44780:
HD44780的外部引脚一般有14条,其中有8条数据线,3条控制线。
HD44780指令集:
(要求RS=0)
1)R/W=0,DATA=00000001,清屏
2)R/W=0,DATA=0000001*,归位……
3)R/W=1,读忙操作。
(3)LCD的引脚使用
在实验板上LCD数据线7-14引脚分别MCU的PTA0-PTA7连接,LCD的控制线RS,R/W,E(4,5,6引脚)分别与MCU的PTC4,PTC6,PTF6连接。
(4)LCD编程结构:
voidLCDinit(void){
uint16i;
//定义数据口(PTA0-PTA7)为输出
LCDdata_D=0b11111111;
//定义控制口(PTC4,PTC6)为输出
LCDctrlD1|=(1< LCDctrlD1|=(1< LCDctrl1&=~(1< LCDctrl1&=~(1< //定义控制口(PTF6)为输出 LCDctrlD2|=(1< LCDctrl2|=(1< //1功能设置 LCDcommand(0b00111000);//5*7点阵模式,2行显示,8位数据总线 //2显示开关控制 LCDcommand(0b00001000);//不闪烁,关光标显示,关显示 //3清屏并等待结束 LCDcommand(0b00000001); for(i=0;i<4000;i++) asm(“NOP”); //4输入方式设置 LCDcommand(0b00000110);//显示不移动,光标左移,数据读取后,AC自动加1 //5光标或画面移位设置 LCDcommand(0b00010100);//光标右移一个字符位,AC自动加1 //6显示开关控制 LCDcommand(0b00001100);//不闪烁,关光标显示,开显示。 } voidLCDcommand(uint8cmd){ uint16i; //1等待>40us for(i=0;i<1000;i++) asm(“NOP”); //2数据送到LCD数据线上 LCDdata=cmd; //3给出E信号的下降沿,将数据写入LCD中 LCDctrl2|=(1< asm(“NOP”); asm(“NOP”); asm(“NOP”); LCDctrl2&=~(1< //4等待>40us for(i=0;i<1000;i++) asm(“NOP”); } 第7章定时器模块 1.AW60内的计时器: AW60提供两个独立的定时器,分别是TPM1和TPM2,其中TPM1有6个通道,TPM2有2个通道。 2.定时器模块的寄存器: (1)状态和控制寄存器: D7(TOF)定时器溢出标志位,D6(TOIE)定时器溢出中断允许位,D4、D3(CLKS)时钟源选择位,D2-D0(PS)定时器分频因子选择位。 (2)TPM计数寄存器(TPMxCNT): 16位寄存器,每一计数周期自动加1,当时钟溢出时清零。 (3)TPM预置寄存器(TPMxMOD): 16位寄存器,用于设定计数寄存器的计数溢出值。 3.分频因子p与预置寄存器的设定: t=n/(fBUS/p),其中n为预置寄存器值 4.定时器编程结构: voidTPMInit(uint8TPMNo){ //参数溢出处理 if(TPMNo>2) TPMNo=2; elseif(TPMNo<1) TPMNo=1; //设置定时器状态 TPM_CSTR(0b00010110);//分频因子64,设置为固定时钟频率: 2MHz,禁止溢出中断 //计数寄存器初值=0x0000 TPM_CNTH(TPMNo)=0x00; TPM_CNTL(TPMNo)=0x00; //预置寄存器设定值=0x7A12 TPM_MODH=0x7A; TPM_MODL=0x12; } voidSecAdd1(uint8*p){ *(p+2)+=1;//秒加1 if(*(p+2)>=60){//秒溢出 *(p+1)+=1;//分加1 *(p+2)=0;//清秒 if(*(p+1)>=60){//分溢出 *p+=1;//时加1 *(p+1)=0;//清秒 if(*p>=24)//时溢出 *p=0;//清时 } } } 5.AW60定时器的脉宽调制(PWM): 分为两种模式,边沿对齐PWM和中心对齐PWM voidPWM(uint8TPMNo,uint8CHNo,uint16Period,uint8Duty){ uint16j; TPM_CSTR(TPMNo)=0x00; //计数寄存器初值=0x0000 TPM_CNTH(TPMNo)=0x00; TPM_CNTL(TPMNo)=0x00; //设置PWM波的周期=Period TPM_MODH(TPMNo)=(uint8)(Period>>8); TPM_MODL(TPMNo)=(uint8)Period; if(Duty>100)Duty=100; elseif(Duty<0)Duty=0; j=(Period/100)*Duty; if(TPMNo<=1){//定时器1 if(CHNo>5)CHNo=5; //根据占空比,设置相应通道数值寄存器 TPM1_CHVH(CHNo)=(uint8)(j>>8); TPM1_CHVL(CHNo)=(uint8)j; //设置定时器1通道状态和控制寄存器 TPM1_CHSCSTR(CHNo)=0b00101000; }else{//定时器2 if(CHNo>2)CHNo=2; //根据占空比,设置相应通道数值寄存器 TPM2_CHVH(CHNo)=(uint8)(j>>8); TPM2_CHVL(CHNo)=(uint8)j; //设置定时器1通道状态和控制寄存器 TPM2_CHSCSTR(CHNo)=0b00101000; } 第8章串行外设接口SPI 1.串行外设概念: 一种同步串行通讯接口,用于微处理器和外围扩展芯片之间的串行连接,现已发展成为一种工业标准。 时钟极性(CPHA): 表示时钟信号在空闲时是高电平还是低电平。 时钟相位(CPOL): 决定数据是在SPSCK的上升沿采样还是在SPSCK的下降沿采样。 2.SPI模块的时序: 确保发送数据在一周期开始的时刻上线,接收方在1/2周期的时刻从线上取数,这样是最稳定的通信方式。 3.AW60SPI模块编程 SPI模块有5个8位寄存器,分别是2个控制寄存器,1个波特率寄存器,1个状态寄存器和1个数据寄存器。 voidSPIInit(){ SPI_CR1=0b01010000;//不产生中断,主机方式,时钟空闲低电平 SPI_CR2=0b00000000; SPI_BR=0b01000001; } voidSPISendOntByte(uint8data){ SPI_DR=data; while(0==(SPI_SR&(1< } voidSPIRecvOneByte(){ while(0==(SPI_SR&(1< returnSPI_DR; } 第9章Flash存储器在线编程 1.Flash存储器编程方法有: 写入器模式(监控模式)和在线编程模式(用户模式) 2.Flash存储器的基本特点: 固有不挥发性;易更新性;成本低、密度高、可靠性好。 3.Flash编程的基本操作有两种: 擦除(Erase): 将存储单元的内容由二进制的0变成1 写入(Program): 将存储单元的内容由二进制的1变成0 擦除和写入操作都是通过设置或清除Flash存储器的控制寄存器(FLCR)的某个或某些位来完成的。 4.Flash存储器的编程寄存器: 6个,对应地址为$1820-$1826 Flash时钟分频寄存器(FCDIV)、Flash选项寄存器(FOPT)、Flash配置寄存器(FCNFG)、Flash保护寄存器(FPROT)、Flash状态寄存器(FSTAT)、Flash命令寄存器(FCMD) 5.在运行flash擦除及写入程序时,flash区会被加上高于普通工作电压的编程电压,导致flash区读取不稳定,应该怎么解决此问题? 答: 为了使擦除,写入程序正常执行,需将擦除,写入子程序移入RAM中并转入RAM区执行。 为此需在RAM区开辟一个缓冲区,供程序移入使用。 6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 技术 基础 实践 王宜怀 复习 指导