第一章 概述
领会:
嵌入式计算机系统的知识体系及相关术语
MCU与CPU的区别与联系
MCU是单片微型计算机(单片机)的简称,早期的英文名是single-microcomputer,后来大多数称之为微控制器或嵌入式计算机。
CPU是中央处理器。
区别:
CPU是数据处理的单元,MUC中一般包含CPU,但除了数据处理单元外还有其他的外围模块,如存储器(RAM、ROM)、定时器/计数器和多种I/O接口等,也就是说,MCU是集成了CPU和其他外围模块的微型控制单元。
联系:
MCU是在通用CPU的基础上发展起来的,在一块芯片内集成了中央处理单元(CPU)。
封装
集成电路的封装是指用塑料、金属或陶瓷材料等把集成电路封在其中。
只读存储器ROM
只读存储器,数据可以读出,但不可以修改。ROM通常存储一些固定不变的信息,如常数、数据、换码表、程序等。具有断电后数据不丢失的特点。
印刷电路板PCB
印刷电路板是组装电子元件用的基板,是在通用基材上按预定设计形成点间连接及印刷元件的印刷版,是电路原理图的实物化。
PCB的只要功能是提供集成电路等电子元器件固定、装配的机械支撑。
Flash ROM
闪速存储器 flash memory 简称闪存,是一种新型的快速EEPROM。
串行通信
串行通信是指数据在单线(电平高低表征信号)或双线(差分信号)上,但时间先后一位一位地传送。
其优点是节省传输线,但相对于并行通信来说,速度较慢。
通用输入/输出
通用输入/输出(GPIO),即基本的输入/输出,有时也称并行I/O。作为通用输入引脚时,MCU内部程序可以读取该引脚,知道该引脚时1(高电平)或0(低电平),即开关量输入
。作为通用输出引脚时,MCU内部程序向该引脚输出1(高电平)或0(低电平),即开关量输出
。
看门狗
看门狗是一个为了防止程序跑飞而设计的一种自定时器
。当程序跑飞时,由于无法正常执行清除看门狗定时器,看门狗定时器会自动溢出,使系统程序复位。
实时操作系统RTOS
实时操作系统是指一种运行在嵌入式系统上的操作环境,可以提供建立多任务的能力。RTOS为每个任务建立一个可执行的环境,可以方便的在任务之间传递消息,在一个中断处理程序和任务之间传递事件,区分任务优先级,并协调多个任务对同一个I/O设备的调用。通常一个规模大、结构复杂的嵌入式系统可以分解成一些列较小、较简单的并行任务
来实现,各个任务之前互不干扰,使用RTOS排除并列任务中的人为因素,降低复杂度,增强模块化,使工程由更简易和标准化的模块组成,处理起来更加轻松、快捷。
掌握:
嵌入式系统的定义
一种计算机硬件与软件的组合,也许还有机械装置,用于实现一个特定功能。
置入应用对象内部起操作控制作用的专用计算机系统。
嵌入式系统的特点
1.嵌入式系统属于计算机系统,但不单独以通用计算机的面目出现;
2.嵌入式系统开发需要专用工具和特殊方法;
3.使用MCU开发嵌入式系统,数据和程序空间采取不同的存储介质;
4.开发嵌入式系统涉及软件、硬件及应用领域的知识;
5.另外在资源方面、可靠性方面、实时性方面、成本方面、要求方面、生命周期方面、知识综合方面都有自己的特点。
第二章 ARM Cortex-M0+处理器
领会:
ARM Cortex 处理器的-A、-A50、-M及-R系列各自的特点和应用范围
- -A50 : 面向高效的低功耗服务器市场领域
- -A: 应用处理器,面向简短的基于虚拟内存的操作系统和用户应用
- -R: 实时系统,目标应用包括只能手机、硬盘驱动器、数字电视、医疗行业、工业控制、汽车电子等。
4.-M: 微控制器,针对成本和功耗铭感的MCU和终端应用(如只能测量、人机接口设备、汽车和工业控制系统、大型家用电器、消费性产品和医疗器械)
ARM、ARM Cortex-M0+处理器的特点及其内核结构
掌握:
ARM Cortex-M0+处理器的存储器映像
ARM Cortex-M0+处理器的内部寄存器
- 通用寄存器R0~R12
- 堆栈指针R13:主堆栈指针MSP,进程堆栈指针PSP
- 连接寄存器R14(LR)
- 程序计数寄存器R15(PC)
- 特殊功能寄存器
ARM Cortex-M0+处理器的寻址方式
指令是对数据的操作,通常把指令中所要操作的数据称为操作数
,ARM Cortex-M0+处理器所需要的操作数可能来自于寄存器、指令代码、存储单元。而确定指令中所需操作数的各种方法称为寻址方式
。
- 立即数寻址: 用
#
作为立即数的前导标识符,立即数范围是0x00~0xff
SUB R1,R2,#1 @ R1 = R0 - 1
MOV R0,#0xff @将立即数0xff装入R0寄存器
- 寄存器寻址:操作数来自于寄存器
MOV R1,R2 @R1 = R2
SUB R0,R1,R2 @R0 = R1 - R2
- 直接寻址:操作数来自于存储单元,指令中直接给出存储单元地址。指令码中,显示给出数据的位数,有字(4字节)、半字(2字节)、单字节三种情况。
LDR Rt,label @从地址label处连续读取4字节至寄存器Rt中
LDRH Rt,label @从地址label处读取半字到Rt
LDRB Rt,label @从地址label处读取单字节到Rt
- 偏移寻址及寄存器间接寻址:偏移寻址中,操作数来自于存储单元,指令中通过寄存器及偏移量给出存储单元的地址。偏移量不超过4KB(指令编码中偏移量为12位)。偏移量为0的偏移寻址也称继勋奇间接寻址。
LDR R3,[PC,#100] @地址为(PC+100)的存储单元的内容加载到寄存器R3中
LDR R3,[R4] @地址为R4的存储单元的内容加载到寄存器R3中
ARM Cortex-M0+处理器的指令系统
数据传送类指令
1.生成与指针PC相关地址指令 ADR
ADR Rd,label @生成与指针PC相关地址,将label的相对于当前指令的偏移地址值与PC相加或者相减写入Rd中
- 取数指令 :存储器中的内容加载到寄存器中的指令。
LDR、LDRH、LDRB
LDR Rt,[{, #imm}] @从{SP/Rn + #imm}地址处,取字到Rt,imm=0,4,8,.....,1020
LDR Rt,[Rn,Rm] @从地址Rn+Rm处读取字到Rt
LDR Rt,label @从label指定的存储器单元处取数至寄存器
LDRH Rt,[Rn{, #imm}] @从{Rn + #imm}地址处,取半字到Rt中,imm=0,2,4,....,62
LDRH Rt,[Rn,Rm] @从地址Rn+Rm处读取半字到Rt
LDRB Rt,[Rn{, #imm}] @从{Rn + #imm}地址处,取字节到Rt中,imm=0~31
LDRB Rt,[Rn,Rm] @从地址Rn+Rm处读取字节到Rt
LDRSH Rt,[Rn,Rm] @从地址Rn+Rm处读取半字至Rt,并带符号扩展至32位
LDRSB Rt,[Rn,Rm] @从地址Rn+Rm处读取字节至Rt,并带符号扩展至32位
LDM Rn{!}, reglist @从Rn处读取多个字,加载到reglist列表列表寄存器中,每读一个字后Rn自增一次
- 存数指令:寄存器中内容存储值存储器中的指令。
STR、STRH、STRB
STR Rt,[ {, #imm}] @把Rt中的字存储到地址SP/Rn + #imm处,imm=0,4,8,...,1020
STR Rt,[Rn, Rm] @把Rt中的字存储到Rn+Rm处
STRH Rt,[Rn {, #imm}] @把Rt中的低半字存储到地址SP/Rn + #imm处,imm=0,2,4,...,62
STRH Rt,[Rn, Rm] @把Rt中的低半字存储到Rn+Rm处
STRB Rt,[Rn {, #imm}] @把Rt中的低字节存储到地址SP/Rn + #imm处,imm=0~31
STRB Rt,[Rn, Rm] @把Rt中的低字节存储到地址Rn+Rm处
STM Rn!, reglist @存储多个字到Rn处。每存一个字后Rn自增一次
- 寄存器间数据传送指令
MOV
MOV Rd,Rm @Rd←Rm, Rd只可以是R0~R7
MOVS Rd, #imm @ MOVS指令功能与MOV相同,且影响N、Z标准
MVN Rd,Rm @将寄存器Rm中数据取反,传送给寄存器Rd,影响N、Z标志
- 堆栈操作指令
PUSH、POP
PUSH reglist @进栈指令。SP递减4
POP reglist @出栈指令。SP递增4
PUSH {R0, R4~R7} @将R0,R4~R7寄存器值入栈
PUSH {R2,LR} @将R2, LR寄存器入栈
POP {R0,R6,PC} @出栈值到R0,R6,PC中,同时跳转至PC所指向的地址
数据操作类指令
- 算数运算类指令:加、减、乘、比较
ADC {Rd, } Rn,Rm @带进位加法。Rd ← Rn+Rm+C,影响N、Z、C和V标志位
ADD {Rd} Rn, {} @加法,Rd←Rn+Rm, 影响N、Z、C和V标志位
RSB
太多了,不想写了。。。。。。
- 逻辑运算类指令:
AND、EOR、ORR
- 数据序转指令:
REV
- 扩展类指令
- 位测试指令
- 移位指令
跳转控制类指令
其他指令
熟练掌握:
读懂ARM Cortex-M0+汇编代码并能给出一段汇编代码的运行结果
第三章 KL25简介与硬件最小系统
领会:
Kinetis系列MCU的各个子系列特性、应用领域、基本知识及实现构架
- Kinetis K系列
- Kinetis L系列
- Kinetis M系列
- Kinetis W系列
了解KL25 MCU的引脚功能
- 硬件最小系统引脚:包括电源类引脚、复位引脚、晶振引脚等
- I/O端口资源类引脚
KL25硬件最小系统
MCU的硬件最小系统是指可以使内部程序运行所必须的最低规模的外围电路,也可以包括写入器接口电路。一般情况下,MCU的硬件最小系统由电源、晶振及复位等电路组成。
掌握:
最小系统概念及KL25 MCU的存储映像
第四章 第一个样例程序及工程组织
领会:
通用I/O基本概念和连接方法
- 带上拉电阻的连接
- 带下拉电阻的连接
- 悬空连接
KL25 MCU的端口控制模块
GPIO模块的编程结构;
制作构件的必要性及基本方法
掌握:
给直接映像寄存器地址赋值的方法及点亮一盏小灯的编程步骤
第五章 构件化开发方法与底层驱动构建封装规范
领会:
嵌入式构件的必要性;
KL25系统的硬件构件化设计的规则及注意要点;
基于硬件构件的嵌入式底层软件构件的编程方法及编程框架;
软硬件构件的重用和移植方法;
底层驱动构建封装规范及公共要素文件编写技巧
掌握:
嵌入式构件的定义;
重用概念;
移植概念
第六章 串行通信模块及第一个中断程序结构
领会:
串口相关的基础知识
串行通信的传输方式
- 单工: 数据传送是单向的,一端为发送端,一端为接收端(有线广播)。
- 全双工: 数据传送是双向的,且可以同时接受与发送数据(MCU的异步串行通信接口均是全双工的)。
- 半双工: 数据传送是双向的,任何时刻,只能由一方发送数据,一方接收数据,不能同时收发。
KL25 MCU的串口模块功能
串行通信接口UART的主要功能
接收时,把外部单线输入的数据编程一个字节的并行数据传入到MCU内部;
发送时,把需要发送的一个字节的并行数据转为单线输出。
UART寄存器
KL25中共有3个UART模块,分别时UART0、UART1、UART2,可编程为8位、9位或10位数据模式。UART1和UART2中支持8位、9位,UART0支持全部的数据模式。
1. 控制寄存器
1)UARTx控制寄存器2(UARTx_C2)
D3(TE)
,发送器使能位。TE必须是1来使用UART发送器
D5(RIE)
,接收中断使能位。与状态寄存器RDRF配合使用,RIE=0,RDRF中断禁止(使用轮询);RIE=1,当RDRF=1时,发生中断请求。
2)UARTx控制寄存器1(UARTx_C1)
3 ) UART控制寄存器4:
D5(M10)
,10位模式选择
2. 状态寄存器:UARTx_S1寄存器为UART中断或DMA请求提供MCU输入
D0--PF
,奇偶校验错误标志位
D1--FE
,帧错误标志
D2--NF
,噪声标志
D3--OR
,接收器溢出标志位
D4--IDLE
,空闲线标志
D5--RDRF
,接收数据寄存器已满标志位,RDRF=0,接收数据寄存器(缓冲器)空;RDRF=1,接收数据寄存器(缓冲区)已满。
D6--TC
,发送完成标志位
D7--TDRE
,发送数据寄存器空标志位
3. 波特率寄存器:UARTx_BDH、UARTx_BDL
4. 数据寄存器: 其实是两个单独的8位寄存器
串口通讯驱动构件的设计和封装方法
元构件
UART模块是MCU最基本最底层的构件,它在满足功能完整性的情况下,具有不可再分的特性。
KL25 MCU的中断机制
中断
中断是计算机发展中一个重要的技术,它的出现很大程度上解放了处理器,提高了处理器的执行效率。所谓中断,是指MCU在正常运行程序时,由于MCU内核异常
或者MCU各模块发出请求事件
,引起MCU停止正在运行的程序,而转去处理异常或执行处理外部事件的程序(又称中断服务程序)。
内核中断
主要是异常中断
,也就是说,当出现错误的时候,这些中断会复位芯片或者做出其他处理。
非内核中断
非内核中断是指MCU各个模块为中断源引起的中断,MCU执行完中断服务程序后,又回到刚才正在执行的程序,从停止的位置继续执行后续的指令。非内核中断又称可屏蔽中断
,这类中断可以通过编程控制,开启或者关闭该中断。
IRQ中断号
IRQ中断号是非内核中断源的编号,每一个编号代表一个非内核中断。
KL25中断向量表的概念、结构及位置
中断向量表是指按照中断源的中断向量序号的固定顺序,存放中断服务程序入口地址的一段存储区域。每个中断服务程序入口地址占用4字节单元,KL25中断向量表的位置在存储区的0x0000_0000~0x0000_00c0的一段范围,一共48x4=192个字节,存放48个中断服务程序的入口地址。
中断服务程序的入口地址又称中断向量
或者中断向量指针
,它指向中断服务程序在存储器中的位置。
如何将中断服务程序的入口地址(中断向量),按照中断源的中断向量序号的顺序,写入到中断向量表的位置呢?其实,实现的方法也很简单,定义一个常量指针数组
,再把中断向量存入这个数组中,工程编译时由链接文件intflash.ld指定这个数组存放到中断向量表的位置。
KL25中断初始化的基本步骤
- 设置模块中断使能位使模块中断,使模块能够发送中断请求信号,例如在UART中,将控制寄存器C2的RIE位置1。
- 在中断控制器中设置中断使能寄存器,使该模块对应的使能位置1,允许该中断请求。
掌握:
串口模块驱动构件编程方法及编程时涉及的寄存器;
中断编程方法及编程时涉及的寄存器
第七章 定时器相关模块
领会:
计数器/定时器的一半工作原理;
内核时钟的工作原理及驱动构件封装;
定时器/PWM模块的工作原理及驱动构件封装;
周期中断定时器(PIT)的工作原理及驱动构件封装;
低功耗定时器(PTMR)的工作原理及驱动构件封装;
实时时钟模块(PTC)的工作原理及驱动构件封装
掌握:
各计数器/定时器模块的功能、相关寄存器及编程设置方法及驱动构件结构
第八章 GPIO应用 -- 键盘、LED与LCD
领会:
键盘扫描基本原理;
LED扫描基本原理;
字符型LCD的基本原理
掌握:
键盘驱动构件结构;
LED驱动构件结构;
LCD驱动构件结构