飞思卡尔单片机 ECT学习资料
飞思卡尔16位单片机寄存器总结
一、输入输出端口寄存器I/O接口包括PORTA、B、E、K、T、S、M、P、H、J、AD。
其中PORTA、B、E、K属于复用扩展总线接口,单片机在扩展方式下工作时,作为总线信号。
1、PORTT、S、M、P、H、JI/O寄存器PTx如果对应位数据方向寄存器DDRx为“0”,输入,读取该寄存器返回引脚值;“1”,输出,读取该寄存器返回I/O寄存器的内容。
数据方向寄存器DDRx决定对应引脚为输出还是输入,“0”为输入,“1”为输出,复位后,默认为输入。
上拉/下拉使能寄存器PERx选择使用内置上拉/下拉器件,“1”允许,“0”禁用。
中断使能寄存器PIExPORTP、H、J三个端口具有中断功能。
“1”对应引脚允许中断,“0”禁止,复位后,所有端口中断关闭。
中断标志寄存器PIFxPORTP、H、J三个端口具有中断功能。
“1”对应引脚允许中断,“0”禁止,复位后,所有端口中断关闭。
2、PORTA、B、E、KI/O寄存器Px若某端口的引脚被定义为输出,写入I/O寄存器中的数值会从对应引脚输出;输入,通过I/O寄存器读取对应引脚电平。
数据方向寄存器DDRx决定对应引脚为输出还是输入,“0”为输入,“1”为输出,复位后,默认为输入。
PORTE最低两位只能为输入。
上拉电阻控制寄存器PERx第7、4、1、0位分别控制K、E、B、A端口,“1”允许使用对应端口的上拉电阻,“0”禁止,复位后,PK、PE端口使能,PB、PA禁止。
二、中断系统中断控制寄存器INTCR第7位IRQE,中断电平/边沿有效选择,0为低电平有效,1为下降沿有效;第6位IRQEN,外部中断IRQ中断请求使能,0关闭,1允许。
三、PWM模块PWM允许寄存器PWME对应每一位PWMEx,1启动输出,0停止输出,读写任意时刻。
PWM预分频时钟选择寄存器PWMPRCLK为Clock A和B选择独立的预分频因子,读写任意时刻。
Clock B对应6、5、4三位,Clock A对应2、1、0三位,分别可以实现2、4、8、16、32、64、128分频。
飞思卡尔单片机知识点
1、单片机组成:1> CPU 2> 存储器3>I/O ;2、存储器包括2大类:ROM , RAM3、标准ASCII码使用(1)个字节表示字符;4、BCD码是用()进制表示的()的数据;5、HCS08QG8的最小系统包括(电源电路,复位电路,下载口,(内部时钟));6、QG8管脚数量(16)、只能输入的是(PTA5)、只能输出的是(PTA4)、程序下载的是、接外部时钟的是;7、QG8的管脚可以作为数字输入输出、也可以作为模拟输入,可以作为模拟输入的有();8、QG8管脚复用优先级最低的功能是(I/O);9、QG8存储器配置中,不同资源的分界线……;10、CPU寄存器有(A, HX, PC, CCR, SP);11、可以执行位操作的地址范围(0X0000~0X005F);12、有地址的寄存器分成了(3)块(0页,高页,非易失);13、如何在C语言中定义常数(数据类型变量名;),如何指定变量的地址(数据类型变量名@ 地址;);14、堆栈的管理者是寄存器(SP);15、SP的复位缺省值是(0X00FF);16、堆栈对数据的操作特点是(向上生长型:先压后涨、先减后弹);17、堆栈一般在RAM的高地址区域还是低地址区域?高地址区18、内部时钟源包括哪4大部分?19、外部时钟分哪2大类;振荡器,整形外部时钟20、内部时钟中FLL固定倍频(512倍频);21、ICS的7种工作模式(FEI, FEE, FBI, FBILP, FBE, FBELP, stop);22、ICS的内部参考时钟是可以校准、微调的,调整的寄存器名(ICSTRM);该寄存器的数值越大,输出时钟频率越(低);23、FLASH是按页管理的,页大小(512)字节,每页分(8)行;24、高页寄存器位于FLASH的最后一页的(第六行/0xFFB0~0xFFBF)位置;25、FLASH的最后一页最后一行是(中断向量);26、FLASH块保护寄存器(FPROT);块加密寄存器(FOPT);对应的非易失寄存器分别是(NVOPT, NVPROT);27、FLASH操作的一般过程是();28、FLASH操作的有效命令有(空检查,字节编程,突发模式编程,页擦除,全部ROM 擦除);29、记录程序运行状态的CPU寄存器是(CCR);30、指令系统包括6大类指令,分别是(算术运算指令、数据传送指令、数据和位操作、逻辑运算、程序控制、堆栈处理);31、寻址方式是指(CPU访问操作数和数据的方法);32、寻址方式包括7大类16种,分别是:INH IMM DTR EXT IX,IX1,IX2,SP1,SP2,IX+,IX1+ REL IMD, DD,IX+D,DIX+33、8指令模板和6指令模板分别是();34、QG8是高电平复位还是低电平复位?低电平35、QG8数据存储器RAM的大小为(512)字节;36、上电复位期间将管脚(A4)设置为(低)电平可以进入调试模式37、QG8的存储器结构为冯·诺伊曼还是哈佛结构?冯诺依曼38、中断过程中自动入栈的字节有(PCL,PCH,A,CCR,X);39、在C语言中如何定义变量为“易变型”;40、使用外部整形后的时钟从管脚(P7)输入;41、cpu时钟是总线时钟的(2)倍;42、如何调整内部时钟到想要的频率?43、最高优先级中断是(复位中断);44、想要保护最后的4页FLASH,则寄存器FPROT应赋值(11110110);45、ADC转换器设置成硬件触发时,是采用实时中断RTI计数器的溢出信号(ADHWT)进行启动转换的。
飞思卡尔单片机教学第3章_指令系统自学
如:
LDAA
$55
;表示将零页$0055内存单元的数据加载到累加器A。 也可以表示为:
LDAA <$55
;“<”在老版本CodeWarrior中表示零页寻址,新版本 中不需要加“<”。
7
第三章 MC9S12单片机指令系统
直接寻址举例
LDAA $55 执行前:[55]=0,A=CB 执行后:[55]=0,A=0
– LEAX :将有效地址加载到变址寄存器X
例如: LEAX D,Y ;将Y的内容加上D的内容加载到X寄 存器
– LEAY :将有效地址加载到变址寄存器Y
例如:LEAY 存器
B,X ;将X的内容加上B的内容加载到Y寄
21
第三章 MC9S12单片机指令系统
数据传输指令7
堆栈操作指令:
– 单字节压栈出栈
#$55;表示将十六进制立即数$55加载到累加器A中
LDX
#1234;表示将十进制数1234加载到累加器X中
LDY
#%01010101;表示将二进制数00100110加载到累
加器Y中
注:立即数前加#
6
第三章 MC9S12单片机指令系统
直接寻址
零页寻址,范围是$00~$ff,共256个单元,一般访问I/O寄 存器。
0, X
;A=[$1000]
LDAA
7, X
;A=[$1000+7]
LDAA
-150, X
;A=[$1000-150]
LDAA
1000, X
;A=[$1000+1000]
LDAA
[1000,X] ;将X+1000地址单元中的
;值作为指针,指向的内存单元的值加载到累加器A中 5位偏移量隐含在指令字节中(2字节指令) 9位偏移量多占一个字节(3字节指令)
飞思卡尔8位单片机—飞思卡尔8位单片机基础知识
2.2、单片机的命名规则及选择
2.2.1、单片机选型需要关心的事项
供电电压、速度及功耗 管脚数量、并口与串口、功能复用、外扩能力 存储器资源:ROM、RAM、是否分页 外设接口 定时器数量、PWM、捕捉、比较 SPI、IIC、UART、CAN、USB、YITAI 中断源 模拟量处理 特殊接口:VGA、LCD、MOTOR 封装
选型要学会查找资源差异表
Freescale的08系列单片机型号有一百多种。在 这些不同型号的单片机中,资源各不相同,即使 是同一种型号的单片机,也有多种封装形式,其 I/O引脚数目也不相同。如MC68HC908JB8就有 20脚的DIP、28脚的SOIC、44脚的QFP和20脚 的SOIC四种封装形式。
7〉 管脚的复用
注意: 0、管脚功能复用时的优先 级见右表,高优先级接管管 脚时,对低优先级模块会产 生杂乱信号,因此切换前应 先停止不使用的功能。 1、PTA5作为只能输入管脚 而言,输入电压不能超过 VDD。 2、IIC使用的端口可以通过 设置SOPT2 寄存器中的 IICPS位重新定位到PTB6和 PTB7,复位时缺省使用 PTA2 and PTA3。 3、如果ACMP和ADC被同 时使能,管脚PTA0和PTA1 可同时使用。
第二章 飞思卡尔8位单片机基础知识
2.1、飞思卡尔8位单片机系列简介 2.2、飞思卡尔单片机命名规则与单片机选型 2.3、 MC9S08QG8硬件结构
8bit 单片机的Core type
HC08系列、HCS08系列、RS08系列。 HC08是1999年开始推出的产品,种类多,针对不同场合 的应用都可以选到合适的型号。 HCS08是2004年左右推出的8位MCU,资源丰富,功耗 低,性价比高,是08系列单片机的发展趋势。HC08与 HCS08的最大区别是调试方法不同与最高频率的变化 。 RS08是HCS08架构的简化版本,2006年推出,其内核体 积比传统的内核小30%,带有精简指令集,满足用户对 体积更小、更加经济高效的解决方案的需求。RAM及 Flash空间大小差异、封装形式不同、温度范围不同、 频率不同、I/O资源差异等形成了不同型号,为嵌入式 应用产品的开发提供了丰富的选型。
飞思卡尔8位单片机—飞思卡尔8位单片机基础知识
7〉 管脚的复用
注意: 0、管脚功能复用时的优先 级见右表,高优先级接管管 脚时,对低优先级模块会产 生杂乱信号,因此切换前应 先停止不使用的功能。 1、PTA5作为只能输入管脚 而言,输入电压不能超过 VDD。 2、IIC使用的端口可以通过 设置SOPT2 寄存器中的 IICPS位重新定位到PTB6和 PTB7,复位时缺省使用 PTA2 and PTA3。 3、如果ACMP和ADC被同 时使能,管脚PTA0和PTA1 可同时使用。
管脚及其功能
6〉 管脚控制寄存器
位于高页面的管脚控制寄存器,可以独立设置每个管 脚的输出驱动强度、输出信号变化速度、输入脚的内部 上拉允许等。内部上拉的设置有些时候自动失效,比如 管脚设为输出、管脚被外设使用、管脚作为模拟电路使 用等。如果管脚被用于键盘中断KBI模块,,并设置上升 沿触发,则允许上拉时实际是配置了下拉电阻。 对输出管脚设置了输出变化速度控制后,可以减少 EMC辐射,变化速度控制对输入脚无效。 输出管脚的输出驱动强度控制,可以选择更大的驱 动电流,虽然每个输出管脚都可以设置成大电流驱动, 但总电流不能超出芯片的工作范围。同时大驱动电流对 EMC辐射也会有一定影响。
• EPROM
EPROM(Erasable Programmable ROM,可擦除可编 程ROM)芯片可重复擦除和写入,。EPROM芯片在其正 面的陶瓷封装上,开有一个玻璃窗口,透过该窗口,可以 看到其内部的集成电路, 紫外线透过该孔照射内部芯片 就可以擦除其内的数据,完成芯片擦除的操作要用到 EPROM擦除器。EPROM内资料的写入要用专用的编程 器,并且往芯片中写 内容时必须要加一定的编程电压( VPP=12—24V,随不同的芯片型号而定)。EPROM的型 号是以27开头的,如27C020(8*256K)是一片 2M Bits容 量的EPROM芯片。EPROM芯片在写入资料后,还要以 不透光的贴纸或胶布把窗口封住,以免受到周围的紫外线 照射而使资料受损
飞思卡尔MC9S12XS128(定时器)ECT寄存器详解
1、定时器IC/OC功能选择寄存器TIOSIOS[7..0]IC/OC功能选择通道0 相应通道选择为输入捕捉(IC)1 相应通道选择为输出比较(OC)2、定时器比较强制寄存器 CFORCFOC[7..0]设置该寄存器某个FOCn位为1将导致在相应通道上立即产生一个输出比较动作,在初始化输出通道时候非常有用。
【说明】这个状态和正常状态下输出比较发生后,标志位未被置位后的情况相同。
3、输出比较7屏蔽寄存器 OC7MOC7M[7..0]OC7(即通道7的输出比较)具有特殊地位,它匹配时可以直接改变PT7个输出引脚的状态,并覆盖各个引脚原来的匹配动作结果,寄存器OC7M决定哪些通道将处于OC7的管理之下。
OC7M中的各位与PORTT口寄存器的各位一一对应。
当通过TIOS将某个通道设定为输出比较时,将OC7M中的相应位置1,对应的引脚就是输出状态,与DDR中的对应位的状态无关,但OC7Mn并不改变DDR相应位的状态。
【说明】OC7M具有更高的优先级,它优于通过TCTL1和TCTL2寄存器中的OMn和OLn设定的引脚动作,若OC7M中某个位置1,就会阻止相应引脚上由OM和OL设定的动作。
4、输出比较7数据寄存器 OC7DOC7D[7..0]OC7M对于其他OC输出引脚的管理限于将某个二进制值送到对应引脚,这个值保存在寄存器OC7D中的对应位中。
当OC7匹配成功后,若某个OC7Mn=1,则内部逻辑将OC7Dn送到对应引脚。
OC7D中的各位与PORTT口寄存器的各位一一对应。
当通道7比较成功时,如果OC7M中的某个位为1,OC7D中的对应位将被输出到PORTT的对应引脚。
【总结】通道7的输出比较(OC7)具有特殊的位置,在OC7Mn和OC7Dn两个寄存器设置以后,OC7成功输出后将会引起一系列的动作。
比如:OC7M0=1,则通道0处在OC7的管理下,在OC7成功后,系统会将OC7D0的逻辑数据(仅限0或者1)反应在PT0端口上。
飞思卡尔单片机教程
注 : A/D模块的时钟频率要在500KHz和2MHz之间, 所以在选择分频因子时一定要注意。
采样时间选择
SMP [1 :0]
采样时间
00
2个 A/D时钟周期
01
4个A/D时钟周期
ATDclock= ( (BusClock) / (PRS+1) ) /2
10
8个A/D时钟周期
11
16个A/D时钟周期
设CCBCA = 000,转换序列从通道
0开始;ATD0DR0,
ATD0DR1,ATD0DR2存放转换结果
设CCBCA = 0 10,转换序列从通道 2开始。 仍然是ATD0DR0,
ATD0DR1,ATD0DR2存放转换结果
S8C 、S4C 、S2C 、S1C:定义转换队列的长度 。默认长度为4。 FIFO: 结果寄存器先进先出模式 。1=FIFO模式 ,转换结果是连续 存放的;0=非FIFO模式 ,转换结果放在对应的寄存器中。 FRZ1、FRZ0:背景调试冻结模式允许 。这两个控制位就决定了,
{ while (ATD1STAT0_SCF ==0) ;
ad_value [0] = ATD1DR0; ad_value [4] = ATD1DR4;//使用 PORTB= (byte) ad_value [4] ;
}}
void ATDInit(void)
{ATD1CTL2=0xC0;//AD模块上电,快速清零,无等待模式,禁止外部触发, 中断禁止 // ADPU AFFC AWAI ETRIGLE --- ETRIGP ETRIGE ASCIE ASCIF
PRS=3
ATD1CTL5=0xA4; //右对齐无符号 ,单通道采样 ,通道0
单片机飞思卡尔开发工具使用入门讲解学习
Crystal
单片机原理与应用
Page
一、概述
3.实验目标板
Signal connector
PWM D/A convert
7Seg Numeric LED
keypad
Connect points Pulse generator
RS232 driver
Analog voltage generator
单片机原理与应用
Page
二、创建工程 C/C++ Options
第7步:选择V5.0中的用户自定义模式
单片机原理与应用
Page
二、创建工程 PC-Lint
第8步:选择不使用PC-Lint(TM)链接工具软件,点击“完 成”按钮,Code Warrior集成开发环境就会自动生成整个工 程的文件系统。
LED(light emitting diode/发光二极管) 将电转化为可见光
PN节结构,正向导通发光,反向截至熄 灭。
多种颜色,多种尺寸,多种封装 控制流经电流决定其亮度,需要使用限
流电阻 LED具有一定的响应速度
单片机原理与应用
Page
五、并行口及驱动 8.Turn on LED
单片机原理与应用
单片机飞思卡尔开发工具使用入 门
本章要点
一、概述
二、创建工程 三、编写程序 四、编译调试 五、并行口及驱动 六、实验扩展
单片机原理与应用
一、概述
CodeWarrior IDE
main(fad) { return(0); }
build
010010001 110010010 001010010
USB cable
Jutch the debugger
飞思卡尔单片机教学
串联方式(PE7引脚要拉低)
并联方式(PE7引脚要拉高)
a
29 29
第3章 MC9S12单片机的内核及片上资源
时钟初始化寄存器-共5个
(1)锁相环控制寄存器(PLLCTL)
时钟监控允许位 1=允许 0=禁止
锁相环电路允许位 1=允许 0=禁止
注:其余各位的描述见教材49页。
a
30 30
第3章 MC9S12单片机的内核及片上资源
注:其余各位的描述
见教材49页和50页。
a
32 32
第3章 MC9S12单片机的内核及片上资源
PLL例子
CLKSEL=0x00; //禁止PLL PLLCTL=0xe1; //PLL电路允许 SYNR=2;REFDV=1; //设置倍频参数 PLLCTL=0x60; //时钟监控禁止 while(0==(CRGFLG&0x08));//等待稳定 CLKSEL=0x80; //选择PLL作为时钟 //若晶振为16M,则PLLCLK=2*16*3/2=48MHz,则总线频率是
R/W:读写信号,指示总线上数据方向 LSTRB:总线模式下低位字节(奇地址)选通 ECLK:内部总线时钟输出,一般在宽扩展模式下地址锁存用 BKGD(MODC)、MODB、MODA:模式选择 NOACC/XCLKS:当前外部总线操作无效
a
55
第3章 MC9S12单片机的内核及片上资源
模式选择
a
66
Block3
$C000~$FF00 16K($3F) Block2 Block1 Block0
16KB
$30 $31 $32 $33 $34 $35 $36 $37 $38 $39 $3A $3B $3C $3D $3E $3F
飞思卡尔单片机入门
KV31 Cortex M4
VOC BLDC & PMSM Motors with High Dynamic Control
100 MHz
KV30 – Cortex M4
75 MHz
KV1x – CM0+
VOC BLDC & Low End PMSM motors with Low Dynamic Control 64KB 128KB 256KB 512KB
Deep Dive on New Kinetis KV1x MCU for Motor Control
FTF-IND-F0473
Eric Wu | Product Marketing, Microcontrollers William Jiang | Application, Microcontrollers
M A Y. 2 0 1 4
TM
External Use
Agenda
•
Kinetis V Series MCU Overview • Deep Dive on KV1x • Tower Board and Demos
TM
External Use
1
Kinetis V Series MCU Overview
KV3x Family
Mid range PMSM, UPS power control
+ Multi Channel Timers + Floating Point Unit
2014
KV1x Family
BLDC, entry level PMSM
+ Motor Control Software
Feature Integration
l飞思卡尔ecture2-introductions-2
• 0.1 CMOS • 1-2+ MByte FLASH • 64+ KB RAM •2-4X perfomnace 1998: MPC555 7,000,000 Transistors 32-bit, 4 Execution Units, 448KByte FLASH 0.35 CMOS 40Mhz 2000: MPC565 14.000.000 Transistors 32-bit RISC, 4 Execution Units, 1.0MByte FLASH 0.25 CMOS 56Mhz
PowerPC
PPC821,823, 860,8260,… PPC555, 561/2/3/4/5… PPC55xx
ARM
MX1, MXII…
M.Core
2104,2107
单片机的认识与实践
Lecture2 Page 20
单片机的认识与实践
Lecture2 Page 21
单片机的认与实践
Lecture2 Page 3
Freescale MCU roadmap
MPC7xx
High Performance PowerPC
Star*Core MCF54xx DSP563xx DSP566xx
High End DSP
Star*Core
MPC6xx Relative Performance 68060 68040
Lecture2 Page 8
工业控制
楼宇控制:三表,电力线载波,语音控制, 电梯 照明系统:荧光照明,固态照明 制造:机械手,现场总线,不间断电源 医疗器械:心电监护器械 零售终端: 磁卡读卡器,ATM 安全:指纹识别,OCR,语音识别
飞思卡尔单片机教学课件
THANKS
具体实现方法:首先需要将LED灯连接到单片机的某个I/O端口上,然后在程序 中配置该I/O端口的输出模式,通过循环语句控制LED灯的亮灭状态,从而实现 LED闪烁的效果。
按键输入程序
按键输入程序是单片机编程中常见的应用之一,通过编实现方法:首先需要将按键连接到单片机的某个I/O端口 上,然后在程序中配置该I/O端口的输入模式,通过检测该 I/O端口的电平变化来判断按键是否被按下,从而实现按键输 入的功能。
随着物联网和嵌入式系统 的发展,对单片机的功耗 要求越来越高,低功耗设 计成为未来的重要趋势。
多核处理器
为了提高处理能力和效率, 单片机将向多核处理器方 向发展,实现更复杂的功 能和更高的性能。
无线连接
无线连接技术的发展,使 得单片机能够更好地与外 部设备进行通信和控制, 扩展了应用范围。
飞思卡尔单片机的未来
IAR Embedded Workbench: 另一款流行的单片机开发软件,
提供丰富的工具链。
MPLAB X IDE:适用于XC8和 XC16系列单片机的开发环境,
由Microchip公司出品。
03 飞思卡尔单片机编程实 践
LED闪烁程序
LED闪烁程序是单片机编程的基础实践之一,通过编写程序控制LED灯的亮灭, 可以帮助学生理解单片机的I/O端口操作和程序执行流程。
更高效的生产工艺
更智能的算法支持
随着半导体技术的不断发展,飞思卡 尔单片机的生产工艺将更加高效,性 能和集成度更高。
随着人工智能和机器学习技术的发展, 飞思卡尔单片机将集成更智能的算法, 实现更高级的功能和应用。
更丰富的外设接口
为了满足各种应用需求,飞思卡尔单 片机将提供更丰富的外设接口,如 USB、HDMI等。
飞思卡尔单片机增强型定时器计数器ECT
基准计时器的核心仍然是一个16 位的可编程计数器,其时钟源来自一个预分频器。
该计时器可以被应用于多个方面,包括在对输入波形进行测量的同时产生一个输出波形。
波形的脉宽可以在几微秒到数秒的范围内变化。
增强型定时器模块(ECT)的结构框图如下,ECT功能相当于高速的I/O口,由一个4位预分频器、一个16位自由运行计数器,8个16位IC/OC通道,2个16位脉冲累加器以及一个16位模数递减计数器组成。
ECT实际上是一个16位的可编程计数器,它的基本时钟频率可以通过预分频器设置,用于产生波形输出,测量输入波形,统计脉冲个数,可以作为定时中断功能和独立时钟基准。
2、运行模式停止:由于时钟停止,计时器和计数器均关闭。
冻结:计时器和计数器均保持运行,直到TSCR($06)的TSFRZ 位被置1。
等待:计数器保持运行,直到TSCR($06)的TSWAI 位被置1。
正常:计时器和计数器均保持运行,直到TSCR($06)的TEN 位和MCCTL($26)的MCEN 位被分别清0。
IC 通道组由四个标准的缓冲通道IC0-IC3 和四个非缓冲通道IC4-IC7 组成,两部分的基本功能都是捕捉外部事件发生的时刻,但是缓冲通道除了IC/OC 寄存器TCn 外,还设有保持寄存器TCnH,此外还在入口设置了延迟计数器,用来提高抗干扰能力。
非缓冲通道没有保持寄存器,入口也没有延迟计数器,但每个通道入口设置了一个 2 输入端的多路器,事件触发信号可以是来自本通道的输入引脚PORTn,也可以是来自其关联通道PORT(n-4)的延迟计数器输出,使用更加灵活。
当延迟功能有效时,输入引脚检测到一个有效的边沿后,延迟计数器开始对P 时钟(模块时钟)进行计数,当到达设定的计数值后,延迟计数器在其输出端有条件地产生一个脉冲,这个条件就是延迟前后的引脚电平相反。
这样可以避免对窄输入脉冲做出反应。
延迟计数结束后,计数器自动清除。
输入信号两个有效边沿之间的持续时间必须大于设定的延迟时间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9S12 系列单片机的ECT (Enhanced Capture Timer Module)模块是在原68HC12 的 Standard Timer module 基础上加以增强功能形成的。
ECT 模块主要由以下几部分组成,参看图1:•一个带可编程预分频的16位向上计数的自由运行计数器•8个独立的定时器通道,每个通道具备输入捕捉/输出比较功能•4个8位脉冲累加器,也可设置成2个16位脉冲累加器•一个带可编程预分频的16位的向下计数的计数器•从上面示意图中可以就看出,ECT 模块相当的复杂,不是简单的几句话就能说明白的。
我也是通过很长时间的学习实践,才逐步掌握了ECT模块的使用。
本文将通过一系列的实例,从最简单的功能开始,逐步展开。
一步一步的展示ECT 模块的强大功能。
实验1:自由运行计数器(TCNT)与溢出中断自由运行计数器(TCNT)也称为自由运行主定时器,是一个16位的计数器,可以说是ECT的核心。
在系统复位时,这个自由运行计数器的初值为$0000。
当ECT 模块运行时,自由运行计数器从$0000~$FFFF 循环递增计数。
当计数器溢出复零时,会置位中断标志。
利用这个计数器,可以产生一个周期的中断信号。
TCNT 的输入时钟也是可以选择的,图2 给出了TCNT 的时钟源的示意图。
可以看出,TCNT的输入时钟可以来源于总线时钟、总线时钟经过预分频、外部引脚输入的脉冲、外部引脚输入脉冲经过脉冲累加器分频这四种选择。
当然,选择哪个时钟源其实就是在程序中设置一下相应的寄存器这么简单。
了解了上面的介绍,就可以开始本文的第一个例子了,这个例子非常简单,将BUS CLOCK 分频后作为TCNT 的输入时钟,使能TCNT 溢出中断。
在开始代码之前,还需要介绍几个程序中用到的寄存器。
TCNT寄存器(Timer Count Register)这个寄存器其实已经介绍过了,它是一个16 位的只读寄存器。
在每个时钟输入下计数值会自动加1,当计数值为0xFFFF 后下一个时钟脉冲会使计数器溢出为0x0000。
程序中可以随时读取TCNT 的值,唯一需要注意的是TCNT 是个16位的寄存器,读取时要一次将其读出,如果分为高低两个字节读取,读到的数据不一定能拼接成一个有效的计数值。
图 3 TCNT 寄存器TFLG2寄存器(Main Timer Interrupt Flag 2)这个寄存器只有最高位TOF 是有意义的。
当TCNT 溢出时会置位TOF 位,程序中可以轮询这一位来判断TCNT 是否溢出了。
当然这种轮询的方法效率很低,更实用的方法是利用TCNT 溢出中断。
向TOF 位写 1 会清除TOF,在TCNT 溢出中断中就必须清除TOF,否则就不会响应下一次溢出中断。
图 4 TFLG2 寄存器TSCR2 寄存器(Timer System Control Register 2)这个寄存器由三部分功能组成。
TOI 位是Timer Overflow Interrupt Enable 的简写。
TOI 位为0时表示禁止TCNT 溢出中断,这时只能通过轮询TOF 位来判断是TCNT计数器是否溢出了。
TOI 位为 1 表示使能TCNT溢出中断。
TCRE 位是Timer Counter Reset Enable 的简写。
TCRE 位为0表示TCNT自由运行,TCRE 位为1表示当TCNT = OC7 时复位。
PR2、PR1、PR0 是总线时钟的预分频因子。
当PR2-0 组成的三位2进制数为N 时,表示将BUS CLOCK 分频2^N。
图 5 TSCR2 寄存器TSCR1寄存器(Timer System Control Register 1)TEN 位为0时ECT模块被禁用。
TEN 位为1时ECT模块被使能。
TSWAI(Timer Module Stops While in Wait)位为0时,ECT 模块在STOP 模式下仍旧运行。
TSWAI位为1时,ECT 模块在STOP 模式停止运行。
TSFRZ (Timer and Modulus Counter Stop While in Freeze Mode),这一位与TSWAI 位类似。
TFFCA (Timer Fast Flag Clear All)我还没仔细研究,作用不明。
图 6 TSCR1 寄存器有了上面这些介绍,就可以很容易的看懂下面的代码了。
在我的实验板上,晶振频率为16.384MHz,因为没有开启PLL,BUS CLOCK 为8.192MHz,内核频率为16.384MHz。
8.192MHz被128预分频后为64KHz,16位计数器溢出频率为0.98Hz(64000/65536)[cpp]view plaincopy图 9 TCTL1/TCTL2 寄存器TFLG1寄存器(Main Timer Interrupt Flag 1)用来标识中断条件发生了,对某一位写1则清除对应位。
图10 TFLG1寄存器有了这些就可以开始第二个例子了。
第二个例子利用通道0和通道1的输出比较功能。
在TCNT = TC0 时将对应的PT0 管腿的输出电平翻转,并且产生相应中断。
在TCNT = TC1时将对应的PT1 管腿的输出电平翻转,并且产生相应中断。
这样,PT0和PT1 就会输出两个具有恒定相位差的同频方波信号了。
[cpp]view plaincopy下面是用USBee 抓下来的波形图。
Port M 0 是在溢出中断中翻转的。
PT0 、PT1分别对应两个输出比较通道,两个上升沿的时间间隔为1/8192=1.22ms,测量结果与理论值完全相同。
下面将程序做一个很小的修改。
将 TC0 和TC1 的值改成相同的。
[cpp]view plaincopy从波形图中可以看出,输出是正常的。
但是有些低版本的 ECT 模块有些问题,在这种情况下只有通道0 的中断能够响应,通道1的中断无法响应。
实验3:输出比较 7 通道的特殊功能输出比较通道OC7 具有特殊的权限,可以废止其他输出比较通道的动作,直接决定各个输出通道的状态。
这种特权功能是通过配置两个额外的寄存器OC7M和OC7D来实现的。
OC7M寄存器(Output Compare 7 Mask Register)使OC7Mx=1,OC7强行参与管理通道x的输出,但通道OC7 对通道OC0~OC6的管理仅限于使其引脚PT0~PT6 清0或置1,不能将引脚电平翻转,引脚的动作来自于输出比较7数据寄存器OC7D中的对应位OC7Dx定义的电平状态,必须事先通过程序设置。
图 11 OC7M寄存器OC7D寄存器(Output Compare 7 Data Register)OC7Dx=0,则对应事件发生时相应PTx位将被输出为低电平,OC7Dx=1,则对应事件发生时相应PTx位将被输出为高电平。
图 12 OC7D寄存器可以开始我们的实验了。
这个实验将在PT0 管腿上输出一个占空比位1/4 的方波。
实现方法为在TCNT = 10000 时将PT0 置为高电平,TCNT = 26384 时将PT0 置为低电平。
下面是程序片段。
[cpp]view plaincopy利用这种方式可以模拟个PWM 功能出来。
不过模拟出来的PWM周期只有8种选择。
在第一篇应用笔记中,我提到过TCSR2寄存器有一位叫TCRE。
TCRE 位是Timer Counter Reset Enable 的简写。
TCRE 位为0表示TCNT自由运行,TCRE 位为1表示当TCNT = OC7 时复位。
下面将给出一个利用TCRE的例子。
同样是占空比25%,但是同时还调整了波形的周期。
这个例子中,TC0 = 1000, TC7 = 4000。
PT0 在1000时翻转一下,在4000时再翻转一下。
同时4000时将TCNT值复位到0重新计数。
这样波形的频率就成了4000/8192000=4.88ms。
[cpp]view plaincopy上面是实际波形,这里出现了个有意思的现象。
PM0 一直为低电平,这表明TCNT 的Overflow 中断没有进去。
说明这个中断只有在TCNT为自由计数器时才有用,这点需要特别注意。
实验4:定时器溢出翻转功能所谓定时器溢出翻转就是在TCNT溢出时将某个通道的输出管腿PTx电平翻转一下。
这个功能很实用,可以实现PWM 功能。
首先,还是要介绍个相关的寄存器TTOV。
TTOV寄存器(Timer Toggle On Overflow Register 1)定时器溢出触发寄存器TTOV很简单,8位寄存器每一位对应一个输出比较通道,相应位置1后表示允许根据溢出特性翻转对应输出比较引脚。
置0则禁止这一功能。
图 13 TTOV寄存器有这些知识就足够了,下面开始我们的实验。
这个实验的输出和上一个实验相同,将在PT0 管腿上输出一个占空比位1/4 的方波,不同的是实现方法。
在TCNT = TC0 = 49152 时将PT0管腿置1,然后在TCNT溢出时翻转PT0。
程序片段如下。
[cpp]view plaincopy程序运行后就能在PT0 管腿上观测到1/4 占空比的方波了。
这里需要特别说明的是TTOV不能与TCRE同时使用,比如下面这个例子。
这个例子本意是在TCNT = 10000 时翻转PT0 通道,然后当TCNT = 20000 时利用TTOV 功能再次翻转PT0 的输出,同时由于开启了TCRE,让TCNT 直接回到0。
[cpp]view plaincopy图 14 TCTL3/TCTL4 寄存器TCxH寄存器(Timer Input Capture Holding Registers 0-3)当开启输入捕捉功能时,对应事件发生时TCNT的值会被拷贝到TCx 寄存器中。
对于输入捕捉的前4个通道,在这个拷贝发生之前还要完成一件事情,就是将TCx 的值拷贝到TCxH中。
因此,当输入捕捉中断发生时,TCx 中存储的是发生当前事件时的TCNT 的值,TCxH 中存放的则是上一次事件发生时TCNT 的值。
这两个值的差可以计算出两次事件间隔的时间。
程序中还要使用到的寄存器包括TIOS寄存器(Timer Input Capture/Output Compare Select)、TSCR1寄存器(Timer System Control Register 1)、TFLG1寄存器(Main Timer Interrupt Flag 1)和TIE寄存器(Timer Interrupt Enable Register)。
在前面的介绍中已经提到过这些寄存器了,这里就不重复了。
下面是例子程序的部分代码,功能很简单。
连续捕捉十次上升沿对应的TCNT,然后计算周期。
[cpp]view plaincopy信号源还是采用USBee AX,利用通道7 输出的7.8125KHz 方波。