嵌入式MCU-m16c基础.ppt

RENESASM16C 62嵌入式微控制器程序设计 华中科技大学RENESAS 嵌入式MCU联合实验室 课程名称 嵌入式微控制器及程序设计 一 授课目的 通过瑞萨M16C学习板的教学和试验1 熟悉嵌入式微控制器体系结构2 掌握嵌入式微控制器开发环境3 掌握嵌入式微控制器系统的程序设计 二 学习基础 微型计算机原理组成 存储结构 指令系统 中断技术 接口技术等汇编语言 C语言 程序设计基础知识 三 课程内容 1 嵌入式微控制器基础M16C学习板CPU 内置周边功能存储器配置复位基础操作程序设计基础 2 集成开发环境 工具管理器TM 运行环境TM的安装 启动工具的登陆 调试器KD30 编译器 编辑器 闪存ROM写入器 MAKE的编写方法项目的制作Build程序的写入及固化 3 程序设计 嵌入式用C语言开发前的准备预处理程序设计步骤 结合范例 课程的安排 上课3 8周学时试验4周时 集中进行 四 嵌入式系统 EmbeddedSystems 概念 狭义的概念嵌入到各种机器中 执行控制功能的计算机系统 即将软硬件可剪裁的计算机系统 嵌入到应用环境的系统中 使之构成一种智能型装置的系统 广义的概念为了专用目的设计的计算机系统都是嵌入式系统 换言之 是指嵌入到系统里面的计算机系统 五 嵌入式系统的应用范围 家电 电饭锅 洗衣机 干燥机 热水器 空调 AV 高清晰度电视 DVD MP3 数码相机 数字音像 娱乐 教育 游戏机 电子乐器 卡拉OK 个人数字助理 电子笔记本 汽车显示器 PC机周边设备 打印机 扫描仪 读机卡 硬盘驱动器 光盘驱动器 OA机器 复印机 传真机 通讯终端 电话 手机 网络设备 交换机 路由器 运输设备 汽车 信号机 铁道 机车控制 飞机 船舶 工业控制 电机 生产机械 机床 机器人 设备机器 照明 空调 电力系统 医疗 福利器械 血压器 心电计 X射线透视仪 CT 航空 军事 火箭 人造卫星 导弹 其它业务用机器 数据终端 自动售货机 计测仪器 电炉测试 电流计 同步加速器 六 嵌入式系统的特点 专用目的的系统整个系统为完成一个专用目的而设计有严格的资源限制低成本 低功耗 小型化内核 微控制器软件 精简的微内核结构高可靠性的要求确保实时性实时多任务系统 嵌入式微控制器的现状 嵌入式系统的内核是微控制器 MicroContrllerUnit简称MCU 微控制器是主要用于控制目的的一种专用微处理器 20世纪70年代首次出现 目前生产厂家有 RENESASMOTOROLAINTELNECFUJITSUTOSHIBA品种有4位 8位 16位 32位 瑞萨公司有720 740 7700 M16C M32R系列 预测到2010年 每人平均可接触到350片MCU 嵌入式微控制器的新技术发展 低功耗可扩展总线型 单片机型 嵌入DRAM 嵌入SRAM 内置FLASH技术并行总线串行总线 总线 SPI总线 CAN总线技术多CPU 单MCUI O控制 以太网络协议通讯 精简指令集 功能增强数据采集 模糊控制 智能接口适应工业对象 伺服驱动 人机对话 通讯网络的要求 七 硬件结构 M16C 62型单片机采用高性能硅栅CMOS工艺 是M16C 60系列单片机中的一种 它具有和所有M16C 60系列单片机一样的CPU内核 采用100脚塑料封装QFP M16C 62型单片机包括各种产品 差别仅在于片内存储器类型和容量的不同 以及封装的形式不同 我们常用的有两种QFP封装形式 分别是100P6S A和100P6Q A下面是100P6S A的引脚结构图 它有100个引脚 CPU的寄存器组成 数据寄存器 R0 R1 R2 R3 这四个寄存器为16位寄存器 根据命令语句可以作为8位或32位寄存器用 地址寄存器 A0 A1 A0 A1为具有和数据寄存器相同功能的16位寄存器 可用作相对寻址或间接寻址中的地址寄存器 帧基址寄存器 FB FB为16位寄存器 使用于帧相对寻址 程序计数器 PC PC由20位组成 指示执行命令的地址中断表格寄存器 INTB 它由20位组成 指示有中断向量表的初始地址堆栈指针 USP ISP 由16位组成 有用户堆栈指针 USP 和中断堆栈指针 ISP 两种 用堆栈指针选择标志 可设定使用其中的一种 静态基址寄存器 SB 为16位的寄存器 用于相对寻址 标志寄存器 FLG 由11位组成 每位用作一个标志或用于汇编语言记叙程序时的分支判断条件 或用于设定CPU的操作如下图所示 嵌入式微控制器M16C 32的组成结构 M16C 32的芯片中 除了用来执行算法和逻辑操作的中央处理器 CPU 和存放指令以及数据的存储 ROM RAM 外 内置有多种具有周边功能的单元 如定时器 监视定时器 数据传送控制器DMCAD A转换器 A D转换器 时钟同步 异步串行口 CRC运算电路 系统时钟发生器 时钟同步串行口等 这些单元通过P0 P10等I O接口进行数据的传送和控制 嵌入式微控制器M16C 62的组成结构如下图所示 存储器配置 地址空间从00000H FFFFFH为止 共1MBM30620FCAFP有单片工作模式 存储器扩展工作模式 CPU工作模式等三种工作模式 存储器可以扩展 但是M16C 62学习板仅有单片工作模式 下面是对单片工作模式的存储器配置加以说明 SFR 专用寄存器区 在此区内集中了CPU的工作模式 外部功能控制等寄存器 内部RAM M30620FCAFP中使用着128KB的闪存 内部ROM的一部分 FFFDCH FFFFFH 是固定的向量地址 中断发生时存放执行程序的初始地址 如下图所示 八 M16C 62的操作 可执行基本操作过程如下 1 复位2 复位向量的内容进入PC3 PC的内容作为地址信息输出4 将指定地址的内容作为指令取进PC见下面框图 文件构成和生成目标文件下面是从源文件到M16C 62学习板能执行的文件的流程加以说明 如图所示 在M16C 62学习板中调试程序 kd30 使用的文件和Flashstart 写入闪存软件 处理的文件有区别 为了制成这些文件 需要用nc30WA来进行编译 实际上文件的生成是沿着编译 汇编 链接 ROM化的顺序完成的 源文件有如下三种 test c C语言源文件 Start0 a30 汇编语言源文件 Sect30 inc 汇编语言源文件 开发流程如下 1 依靠编译器nc30WA从test C生成test a30汇编源文件2 依靠汇编器as30从ncrt30 a30生成ncrt30 r303 依靠汇编器as30从test a30生成test r304 用2 3步生成的浮动模块文件进行链接 做成test x30绝对模块文件5 用4步做成的test x30生成test mot摩托罗拉S格式化文件 供Flashstart用 M16C 62学习板的开发步骤 下面是用集成开发环境TM进行操作的开发步骤 这些过程能使开发操作顺利进行 编码启动编译器 记述程序 本书基本上用C语言进行记述编译包含编译 汇编 链接等操作 用C语言记述的程序用NC30WA编译器变成汇编语言 然后用AS30汇编器变成机器语言 并且用LN30链接器 将机器语言文件加以归纳 决定地址 做成绝对目标文件 可执行文件 编译器NC30的介绍 NC30编译器的组成 NC30是供M16C 60系列单片机用的C编译器 它由下面的四个程序组成 1 编译驱动器nc30 它启动编译器 汇编器和连接器 2 预处理器cpp30 它用来处理宏和条件编译 3 编译器主体ccom30 它把c语言源文件转换成汇编语言源文件 4 aopt30汇编程序最优化 5 StkViewer stk它计算程序所用的堆栈的大小 StkViewer是GUI 6 utl30用于SBDATA声明和专门页函数的声明7 MapViewer图观测器 只包含在PC版本中 图观测器是GUI 图形用户界面 1 2NC30的编译流程 1 2 1nc30nc30是编译驱动器 通过设置选项它还可以完成一系列从编译到连接的操作 1 2 2cpp30是预处理器 用来处理宏和条件编译1 2 3ccom30ccom30是编译器自带的执行文件 C源程序经cpp30转换成能在as30上运行的汇编源程序 1 2 4堆栈大小计算程序stk30 它用来就算程序所用的堆栈的大小 NC30管理的段 NC30对数据和代码按段进行管理 段的类型如下表 各个段还按照属性进一步划分 各个属性及其意义如下表 IntI 1 datasectioncharc c intj k bsssectionconstcharcc a romsectionVoidmain intm stacksectionI I k programsection 各个段还按照属性进一步划分 各个属性及其意义如下表 预处理命令 预处理命令是用 开始的一个字符串 其作用为包含文件 宏定义 条件编译和其它扩展功能 主要有 define串1串2如 defineLED offOxff progmaADDRESS变量名绝对地址如 progmaADDRESSp73edH 启动程序 1 启动程序的任务为了使编好的程序能正常工作在执行程序前需先对单片机进行初始化 并设置堆栈 这些处理通常不是用C语言编写的 而是用汇编语言写的 单独构成 启动程序 NC30的启动程序为 ncrt30 a30 和 sect30 inc 其实现的功能如下 1 划定堆栈的位置2 单片机的初始化位置3 初始化静态变量区4 设置中断表格寄存器 INTB 5 调用main函数6 设置中断矢量表 堆栈大小的计算 在启动程序中要设置一个适当大小的堆栈区 堆栈过小会使程序失控 过大则会浪费存储单元 在NC30中使用堆栈的有 1 自动变量2 复杂计算所需的暂存区3 返回地址4 老的帧指针5 函数的实参 堆栈的大小可以根据程序推算 但另一种较方便的方法是在启动NC30时使用开关量 show stack usage 这时在编译时会产生包含堆栈信息的文件 xxx stk 由此文件即可计算出堆栈的最大值 还可以运行stk30程序自动对堆栈的大小进行计算 启动程序的修改 1 堆栈大小的设置2 中断矢量表起始地址的位置3 处理器工作模式的设置4 段的安排和各段起始地址的设置5 可变矢量表的设置6 固定矢量表的设置7 单片模式下不使用 nearROM 和 farRAM 把它们删除 用NC运行例程的流程 上图各部分的介绍 1 用nc30来编译C的源程序AA c 然后用as30来汇编成可重定位的 relocatable 目标文件AA r30 2 启动程序nctr0 30和sect30 inc 其中包含段中的信息 是通过改变段映射 段大小和中断向量表的设置来达到系统的要求的 3 修改后的启动程序汇编成可重定位的目标文件ncrt0 a30 4 两个可重定位的目标文件AA r30和ncrt0 a30通过连接器ln30 创建绝对模块文件AA x30 而ln30是从nc30中运行的 调试用KD30调试器确认程序的动作 KD30是运行于主机的调试器 KD30与存储于闪存的检测程序相通 提供高效率的调试环境 KD30的特点 1 汇编语言和结构汇编语言的源线路调试 并且C语言是可以应用的 2 指向一个通道计数里 断点的两个指针可以同时设定 3 当不具有程序执行的实时性能而执行目标程序时 RAM检测功能允许你检测内存的内容 4 你可以应用C语言变量 在一个结构变量和一个全局变量里 也可以应用一个成员变量5 在调试软件PD30时 KD30在操作上有兼容性 启动KD30 1 点击开始菜单 start program MITSUBISHI TOOL KD30 启动KD30 2 当KD30启动时 显示下图所示的初始 Init 对话框 KD30的操作环境在这个窗口中设置 下图为初始对话框 初始对话框中操作环境项目填写完之后 点击 OK 按钮 当KD30能与OAKS16 BaordKit上检测程序连接 communicate 时 KD30自动启动