飞思卡尔HC12系列中断模块讲解
- 格式:pdf
- 大小:43.47 KB
- 文档页数:9
第二章 HC S12系列MCU组成及工作原理本章介绍MCU的组成,包括CPU的结构、工作原理、寄存器、内部存储器组织,同时介绍MCU内部的时钟产生及其分配逻辑、复位与中断的工作过程及其作用、运行模式与外部存贮器的管理等,尤其是各种特殊模式、多复位源、低速时钟等。
HCS12系列各型号虽然核心部分相同,但集成外设不尽相同,本章及后续章节除特别说明外均指HCS12系列的DP256。
2.1 HC S12系列MCU的结构组成及引脚分配HC S12的D子系列的器件引脚兼容,功能设置稍有不同。
其中型号中数字9表示内部程序存储器为FLASH,否则为ROM。
有80和112个管脚的两种封装形式,主要区别在于各型号的功能优势不同,比如MC9S12DP256B有5个CAN而MC9S12DB128B只有1个CAN 等。
2.1.1 组成框图图2-1为MC9S12系列MCU的结构组成,图中左、右分别为核心与外设部分,左边如果去掉顶部的三种存储器,剩下的就是一个带有调试接口和运行监视功能的标准CPU的增强版,其中的A口、B口作为分时复用的地址/数据总线,E口的部分口线作为控制总线,在系统扩展时使用;如果包括顶部的FLASH/ROM、RAM、EEPROM等存储器,完整的左半部分就是一个没有定时器和串行接口的简化的单片微控制器。
右半部分含有八种外设,其中的ATD、ECT、SPI、BDLC、CAN等接口是许多单片机中所没有的。
此外每一种接口还具有双重功能,即通用I/O功能和特殊接口功能,在单片模式下,甚至A口、B口和E口的一部分也可以用作通用I/O接口。
如果所有接口工作在通用I/O方式下,那么I/O引脚将达到91个,这些双重功能的I/O口本身及其控制逻辑完全集成在MCU内部,其体积、功耗、可靠性、应用简单方便程度都与用户扩充的I/O口有着重要区别。
单线背景调试模式(BDM)和运行监视部分分别用于OCD方式开发支持和保证运行安全,其中BDM方式和时钟监视部分更是它的特色。
定时器模块1:输出比较定时器延时,中断点亮led灯#include <hidef.h> /* common defines and macros */#include <mc9s12db128.h> /* derivative information *///void interrupt 8 aabreak(void); //此行可以注释掉*******unsigned int flag=0;void main(void) {EnableInterrupts;TFLG1=0x01; //清中断标志位DDRB=0xff;PORTB=0xff; //将B口定义为输出,首先输出全0TSCR1=0x80; //定时器使能,正常工作TSCR2=0x01; //将定时器进行128分频最高位不要开******** TIE=0x01; //定时器0的中断使能TIOS=0x01; //将定时器设置为输出比较状态TCTL2=0x00; //定时器与引脚断开TFLG1=0x01; //清中断标志位TC0=0x00f0; //给定时器赋值for(;;);}#pragma CODE_SEG NON_BANKEDvoid interrupt 8 aabreak(void)//中断号要正确,是中断8 (从0通道开始算起的){TFLG1=0x01; //清中断标志位if(flag==0) {PORTB=0xaa;flag=1;} else{PORTB=0x55;flag=0;}TC0=0x00f0; //给定时器赋值}2:输入捕捉PORTA输出脉冲,有定时器通道0对脉冲进行计数,结果从PORTB输出。
#include <hidef.h> /* common defines and macros */#include <mc9s12db128.h> /* derivative information */unsigned int number=0; //脉冲计数初值为0/***********初始化**********/void init(){EnableInterrupts;DDRA=0xff; //将A口定义为输出,用于输出脉冲DDRB=0xff; //B口用于输出脉冲值PORTB=0xff; //led灯全暗TIOS=0x00; //设置定时器通道0为输入捕捉TSCR1=0x80; //定时器使能TSCR2=0x01; //设置自由计数器2分频,且禁止定时器溢出中断TCTL4=0x02; //捕捉器仅下降沿捕捉TIE=0x01; //允许定时器通道0的中断TFLG1=0x01; //清除中断标志位}/*********用于产生脉冲*******/void pulse() {unsigned int i,j;PORTA=0xff; //将A口输出高电平for(i=0;i<10000;i++)for(j=0;j<100;j++) ; //延时PORTA=0x00; //使A口输出低电平}/********主函数*********/void main(void) {init();for(;;){pulse();}}/*******中断子函数******/#pragma CODE_SEG NON_BANKEDvoid interrupt 8 count() {TFLG1=0x01; //中断标志位清0number++; //计数值加1PORTB=~(number); //B口输出计数值}模数转换模块(硬件未完成,以后补充。
飞思卡尔HC12系列单片机USBDM烧录操作指导步骤一将USBDM烧录器连接到电脑的USB口,然后,双击桌面的“hiwave.exe”图标,出现图1的窗口。
图1假如USBDM没有连接或者连接不良,会出现如下图2的窗口,关掉程序,检查连接,再启动程序,直到出现图1的窗口。
步骤二.将USBDM连接到需要烧录的仪表上,点击图1的“OK”按钮,将窗口最大化,然后看显示器的右下角,见图3所示,有“ACKN SYNC STOPPED”,表示连接正常。
假如出现图4的窗口,表示BDM没有和仪表连接上,检查下载线。
点击Cancel按钮。
直到出现图3的“ACKN SYNC STOPPED”状态。
图3图4步骤三点击图5的菜单栏的“TBDML HCS12”,然后点击“Load”,出现目标文件选择的窗口。
见图6图6选择烧录的目标文件,目标文件的后缀名为“.abs”, 这里举例1:选择DM281HZ-V1.2.abs,2:勾选Automatically erase and program into FLASH and EEPROM3:不勾选V erify memory image after loading code,为了节省烧录时间,不勾选这个选项。
3: 勾选Run after successful load.(可以在程序烧完的时候,自动的运行程序,看仪表是否能工作,可以作为仪表的第一次粗测)4:点击“打开”5:等待烧录完成,图7,正在擦除……图8,正在编程……图86:如果在完成编程后,仪表没有自动的进入工作状态,有以下几种可能:a.仪表有问题b.烧录时出现问题,这个问题可以通过配置烧录选项来排除,见图6,可以勾选选项V erify memory image after loading code ,在编程后会进行程序校验,如果校验错误表示烧录出现问题,一般来说出现烧录错误的几率很小,但也不排除。
为了在批量烧录的时候,节省时间,没有选择校验。
HCS12微控制器系列教程---第一讲:PWM 模块介绍该教程以MC9S12DG128单片机为核心进行讲解,全面阐释该16位单片机资源。
本文为第一讲,开始介绍S12 MCU的PWM模块。
PWM 调制波有8 个输出通道,每一个输出通道都可以独立的进行输出。
每一个输出通道都有一,一个周期控制寄存器和两个可供选择的时钟源。
每一个PWM 输出个精确的计数器(计算脉冲的个数)通道都能调制出占空比从0—100% 变化的波形。
PWM 的主要特点有:1、它有8 个独立的输出通道,并且通过编程可控制其输出波形的周期。
2、每一个输出通道都有一个精确的计数器。
3、每一个通道的PWM 输出使能都可以由编程来控制。
4、PWM输出波形的翻转控制可以通过编程来实现。
5、周期和脉宽可以被双缓冲。
当通道关闭或PWM计数器为0时,改变周期和脉宽才起作用。
6、8 字节或16 字节的通道协议。
,他们提供了一个宽范围的时钟频率。
7、有4 个时钟源可供选择(A、SA、B、SB)8、通过编程可以实现希望的时钟周期。
9、具有遇到紧急情况关闭程序的功能。
10、每一个通道都可以通过编程实现左对齐输出还是居中对齐输出。
HCS12微控制器系列教程---第二讲:PWM 寄存器简介1、PWM启动寄存器PWMEPWME 寄存器每一位如图1所示:复位默认值:0000 0000B图1 PWME 寄存器每一个PWM 的输出通道都有一个使能位PWMEx 。
它相当于一个开关,用来启动和关闭相应通道的PWM 波形输出。
当任意的PWMEx 位置1,则相关的PWM输出通道就立刻可用。
用法:PWME7=1 --- 通道7 可对外输出波形PWME7=0 --- 通道7 不能对外输出波形注意:在通道使能后所输出的第一个波形可能是不规则的。
当输出通道工作在串联模式时(PWMCTL寄存器中的CONxx置1),那么)使能相应的16位PWM 输出通道是由PWMEx的高位控制的,例如:设置PWMCTL_CON01 = 1,通道0、1级联,形成一个16位PWM 通道,由通道1 的使能位控制PWM 的输出。
中断的关闭与开放开放MC56F8257中某个模块中断,通常需要开放总中断及模块中断来实现。
这两部分缺一不可,并且开放总中断在前,开放模块中断在后。
同理,关闭MC56F8257中某个模块中断,需要关闭总中断及模块中断来实现,先关闭模块中断,再关闭总中断;如果允许中断嵌套情况,不需关闭总中断。
开放MC56F8257总中断,通过清中断控制寄存器(INTC_CTRL)的INT_DIS位;关闭总中断,需置该位即可,具体代码如下:#define EnableInterrupt() INTC_CTRL&=~INTC_CTRL_INT_DIS_MASK#define DisableInterrupt() INTC_CTRL|=INTC_CTRL_INT_DIS_MASK开放或关闭模块中断,需设置模块内部的控制寄存器的相应位。
如开放QSCI模块的接收中断0,需置位QSCI控制寄存器1(QSCIx_CTRL1)中的RFIE位;关闭该中断,清RFIE 位即可,具体代码如下:#define EnableQSCIReInt(0) QSCI_C1(0)|=(QSCI1_CTRL1_RFIE_MASK)#define DisableQSCIReInt(0) QSCI_C1(0)&=(QSCI1_CTRL1_RFIE_MASK)中断优先级的设置DSP56800E内核支持5级中断:LP、0、1、2和3,其优先级别依次升高。
最低优先级LP只能由系统SWILP指令产生;0~2优先级用户可以编程设置,主要用于外设和外部中断请求;级别3是最高优先级且不可屏蔽。
具体设置某个中断源的中断优先级,可通过设置中断优先级寄存器(INTC_IPR0~INTC_IPR7)中的相应位。
如设置QSCI中断优先级,通过设置中断优先级寄存器(INTC_IPR2)中的QSCI0_RCV位实现,该位具体含义见表1所示。
从表1看出,QSCI中断可配置三个不同级别,即优先级0、1和2。
飞思卡尔半导体文件编号:AN3291 应用笔记第1版,03/2007Specifications and information herein are subject to change without notice. ©Freescale Semiconductor,Inc., 2007. All rights reserved.General Business Information如何在M68HC08、HCS08和HCS12微控制器上应用IIC模块作者: Stanislav Arendarik应用工程师捷克共和国,罗斯诺夫1 简介此应用笔记是如何在飞思卡尔的微控制器上应用IIC模块的一个示例。
IIC模块可以分别在主模式或从模式下使用。
在这种情况下,由于IIC 总线主要用于在微控制器(MCU)和IIC外设之间的通信,因此在主模式时与串行EEPROM进行通信。
IIC总线可以在两个微控制器(MCU)之间直接进行通信,然而SPI总线却更适用于这种应用。
此应用笔记总结了通用IIC总线状态和定义,并提供了如何与串行EEPROM进行通信的示例(24C16和24C512)。
您可以轻松地用另外一个IIC器件取代EEPROM,但是必须改变将其标识为从器件的IIC地址字节。
目录1 简介…………… . . . . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 12 IIC 总线摘要………….. . . . …. . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.1 IIC总线术语.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22.2 位传输. ………….. . . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . 22.3 起始条件和停止条件(START and STOP Conditions)...... . 32.4 总线通信. . ……………………….. . . . . . . . . . . . . . . . . . . . 32.5 控制字节………………………. . . . . . . . . . . . . . . . . . . . .. . . 32.6 地址字节……….... . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.7 应答………… . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . . 42.8 读/写格式………………………………......…..…... . . . . . . .. 53 用于微控制器的IIC软件程序. ………. . . . . . . . . . . . . . . . . . . . . . . 53.1 IIC的初始化. … . . . …….. . . . . . . . . .. .. . . . .. .. .. . . . . . . . 63.2 写入功能. . . . . . . . . . . . . . . . . . . . . .. . . . . . .. . . . . . . . . . . 73.3 读取功能 .. . . . . . . . . . . . . . . . . . . . .. . .. . . . . .. . . . . . . . . 93.4 中断应用举例. . . . . . ……………. . . . . . . . . . . .. . . . . . . . . 133.4.1 MCU作为主机.. . . . . . . . . . . .. .. . . . . . . . . . . . . . . 133.4.2 MCU作为从机. . . . . . .. . . . . . . .. . . . . . .. . . . . . . 164 结论. . . ……... . . . . . . . . . . . . . . . . . . . . . . . . . . .. . . .. . . . . . . .. . . 17IIC总线摘要2 IIC 总线摘要IIC总线是基于主机和从机间线与(开漏)连接的双向、两线式总线。
HCS12中断默认状态::•默认状态在进入中断服务程序时,,I位自动置1,禁止其他可屏蔽中断–在进入中断服务程序时即使有优先级更高的中断请求,,也必须等当前中断服务程序执行完以后才–即使有优先级更高的中断请求能响应–优先级的作用只有在多个中断源同时请求中断时在能体现–无法实现中断嵌套位清零::如果在进入中断服务程序时,,手动对I位清零•如果在进入中断服务程序时任何其他可屏蔽中断都可以被响应,,无论其优先级有多高–任何其他可屏蔽中断都可以被响应中断响应由时间控制,,可以实现中断嵌套–中断响应由时间控制–对中断执行无法预测•HPRIO寄存器中的中断向量的后八位,,可以改变该中断的优先级–写入HPRIO中的中断向量的后八位同样,,优先级的作用只有在多个中断源同时请求中断时在能体现–同样中断优先处理机制1.在中断服务程序中,首先对I为清零,即EnableInterrupts2.选择优先级更高的中断源可以进入响应中断3.设置优先等级–两级•一个中断源为低优先级,其他为高优先级•在低优先级中断服务程序中,对I位清零•在高优先级中断服务程序中,不清零–多级•利用局部的中断屏蔽位•比如Timer Channel0 的中断屏蔽位TIE_C0I优先机制–多级•情况1:–每个中断都单独发生,在一个中断程序执行时,没有其他中断•情况2:–在执行ECT1的中断服务程序时,ECT0请求中断–ECT0中断服务程序将被执行•情况3:–在执行ECT2的中断服务程序时,ECT0请求中断–ECT2的中断服务程序执行结束后,执行ECT0的中断服务程序•情况4:–ECT1,ECT2同时请求中断–ECT1的中断服务程序先执行,当EnableInterrupts后–执行ECT2的中断服务程序–ECT2的中断服务程序执行结束后,返回执行ECT1的中断服务程序方案:优先机制–多级•在ECT0中断服务程序中:•在ECT1中断服务程序中(自定义优先级最低):•在ECT2中断服务程序中(自定义优先级最高):–用户程序TIE_C1I = 0; //关闭ECT1局部中断TIE_C2I = 1; //开放ECT2局部中断EnableInterrupts; //开放全局中断…TIE_C1I = 1; //开放ECT1局部中断TIE_C2I = 1; //开放ECT2局部中断TIE_C0I = 1; //开放ECT0局部中断TIE_C2I = 1; //开放ECT2局部中断EnableInterrupts; //开放全局中断…TIE_C0I = 1; //开放ECT0局部中断TIE_C2I = 1; //开放ECT2局部中断。
HCS12中断
默认状态::
•默认状态
在进入中断服务程序时,,I位自动置1,禁止其他可屏蔽中断
–在进入中断服务程序时
即使有优先级更高的中断请求,,也必须等当前中断服务程序执行完以后才–即使有优先级更高的中断请求
能响应
–优先级的作用只有在多个中断源同时请求中断时在能体现
–无法实现中断嵌套
位清零::
如果在进入中断服务程序时,,手动对I位清零
•如果在进入中断服务程序时
任何其他可屏蔽中断都可以被响应,,无论其优先级有多高
–任何其他可屏蔽中断都可以被响应
中断响应由时间控制,,可以实现中断嵌套
–中断响应由时间控制
–对中断执行无法预测
•HPRIO寄存器
中的中断向量的后八位,,可以改变该中断的优先级–写入HPRIO中的中断向量的后八位
同样,,优先级的作用只有在多个中断源同时请求中断时在能体现
–同样
中断优先处理机制
1.在中断服务程序中,首先对I为清零,即EnableInterrupts
2.选择优先级更高的中断源可以进入响应中断
3.设置优先等级
–两级
•一个中断源为低优先级,其他为高优先级
•在低优先级中断服务程序中,对I位清零
•在高优先级中断服务程序中,不清零
–多级
•利用局部的中断屏蔽位
•比如Timer Channel0 的中断屏蔽位TIE_C0I
优先机制–多级
•情况1:
–每个中断都单独发生,在一个中断程序执行时,没有其他中断
•情况2:
–在执行ECT1的中断服务程序时,ECT0请求中断
–ECT0中断服务程序将被执行
•情况3:
–在执行ECT2的中断服务程序时,ECT0请求中断
–ECT2的中断服务程序执行结束后,执行ECT0的中断服务程序•情况4:
–ECT1,ECT2同时请求中断
–ECT1的中断服务程序先执行,当EnableInterrupts后
–执行ECT2的中断服务程序
–ECT2的中断服务程序执行结束后,返回执行ECT1的中断服务程序
方案:优先机制–多级
•在ECT0中断服务程序中:
•在ECT1中断服务程序中(自定义优先级最低):
•在ECT2中断服务程序中(自定义优先级最高):
–用户程序
TIE_C1I = 0; //关闭ECT1局部中断TIE_C2I = 1; //开放ECT2局部中断EnableInterrupts; //开放全局中断…
TIE_C1I = 1; //开放ECT1局部中断TIE_C2I = 1; //开放ECT2局部中断
TIE_C0I = 1; //开放ECT0局部中断TIE_C2I = 1; //开放ECT2局部中断EnableInterrupts; //开放全局中断…
TIE_C0I = 1; //开放ECT0局部中断TIE_C2I = 1; //开放ECT2局部中断。