![]() |
| 首页-> 产品信息-> 8位单片机 | |||||||
|
其它硬件功能模块原理及应用
8.1 复位 SPMC65 系列单片机共提供 5 种复位方式,分别是: 1 .上电复位( POR ) 2 .外部复位( RESET ) 3 .低电压复位( LVR ) 4 .看门狗复位( WDTR ) 5 .非法地址复位( IAR ) 复位时序请参考 图 8.1 。
图 8 . 1 复位时序图 按照复位结果可以分为系统复位和 CPU 复位。系统复位不仅复位 CPU ,同时还会复位所有的内部模块(包括 I/O 、 Timer 、 A/D 、 D/A 、各种控制寄存器等都将初始化为默认值);而 CPU 复位只会复位 CPU ,即 PC 指针重新指向初始地址,程序重新从头开始执行,同时也会复位堆栈指针,指向堆栈的最高地址。具体请参考 表 8.1 。 表 8 . 1 复位源功能列表
8.1.1 上电复位( POR ) 当单片机的电源电压 VDD 上升到 1.45V ,便会开始上电复位;首先要等 40ms 的时间以待电源稳定,然后会再等待 40ms 的时间以待系统时钟稳定;最后还要经过 1024 个系统时钟周期后,完成系统复位和 CPU 复位。上电复位为系统复位,复位后所有的寄存器都初始化为默认值。 上电复位时序请参考 图 8.2 。
图 8 . 2 上电复位时序图 8.1.2 外部复位( RESET ) SPMC65 系列单片机提供了一个外部复位管脚
图 8 . 3 外部复位电路图
图 8 . 4 外部复位时序图 8.1.3 低电压复位( LVR )低电压复位即当单片机的电源电压低于设定的复位电压值大于 1024 个系统时钟时,芯片便会产生复位,以保证单片机不会在非正常的电压范围内工作;当电源电压恢复后,会经过 1024 个系统时钟后,完成系统复位(包括 CPU 复位),进入正常工作状态。导致电源电压过低的原因很多,如电压的反跳、负载过重等。低电压复位时序图请参考 图 8.5 。
图 8 . 5 低电压复位时序图 低电压复位功能使能 / 禁止可以在芯片配置选项寄存器中进行设置,可以参考软硬件开发工具的章节。 复位电压值可以通过复位电压选择寄存器 P_LVR_Opt ( $36 ) Bit0 位选择 。 SPMC65 系列单片机提供的复位电压为 4.0V 和 2.5V 可选;该寄存器默认值为 #00h 。 表 8 . 2 低电压复位选择寄存器 P_LVR_Opt ( $36,R/W )
Bit [7:1] 保留 Bit [0] LVRV40 :复位电压选择位 0 = 低电压复位电压为 2.5V 1 = 低电压复位电压为 4.0V (该位在芯片运行后仅可设置一次,上电复位才可将其清除) 注:寄存器 P_LVR_Opt 进行设置时需要连续写两次才能将值有效写入。 8.1.4 看门狗复位( WDTR ) SPMC65 系列单片机提供了看门狗复位方式,以保证程序的正常运行。看门狗定时器的计数频率可以通过设置相关寄存器进行选择,看门狗定时器每次溢出会产生一次看门狗中断信号,若连续 8 次看门狗定时器溢出中断,则会发生一次看门狗复位;所以在这个时间内,看门狗定时器必须被清除(向 P_WDT_Clr 寄存器中写入 #55h )。看门狗复位功能使能 / 禁止可以在芯片配置选项寄存器中进行设置,可以参考软硬件开发工具的章节。 CPU 复位时只会清除看门狗定时器并重新开始计数,但不能清除看门狗的复位标志。清除看门狗的复位标志请参考 9.1.6 。 看门狗复位时序请参考 图 8.6 。
图 8 . 6 看门狗复位时序图 8.1.5 非法地址复位( IAR ) 非法地址复位( IAR ),可以防止系统进入非法地址。当程序对某个地址进行读写操作时,如果超出 SPMC65 系列单片机的寻址范围,或预留不能被访问的地址区域时,便会产生非法地址复位信号,复位 CPU 。 8.1.6 系统控制寄存器 P_SYS_Ctrl ( $30,R/W ) 系统复位标志寄存器主要是用来标识上述五种复位是否发生,可以进行读 / 写操作。读操作:读相应位可以查看是否发上了复位动作;写操作:写相应位为 1 ,清除相应的复位标志。 表 8 . 3 系统控制寄存器 P_SYS_Ctrl ( $30,R/W )
Bit [7] POR :上电复位标志位 【例 8-1 】 保存寄存器 P_SYS_Ctrl 的值,然后将其清除。
SPMC65 系列单片机支持三种时钟输入方式:晶体输入、 RC 振荡输入和外部时钟输入。
A .晶体输入 B . RC 振荡输入 C .外部时钟输入 图 8 . 7 SPMC65 系列时钟输入方式 晶体和外部时钟输入振荡频率 F OSC 最大为 16MHz ,经片内二分频电路后,得到系统时钟 FSYS (即 CPU 工作的频率),即系统时钟最大为 8MHz 。 RC 振荡电路中建议电容值为 50pf ,电阻 R 和频率的对应关系请参考 表 8.4 , RC 振荡方式提供的最大系统时钟为 8MHz 。 表 8 . 4 电阻 R 和频率对应关系
晶体、 RC 振荡和外部时钟输入三种时钟源输入方式可根据不同的需要,通过对芯片配置选项进行设置进行选择,详细的请参考第十章中的介绍。 在使用 RC 振荡输入模式时,为便于测量振荡信号,判断 RC 振荡器是否起振以及振荡情况是否正常,可以通过设置芯片配置选项,使能管脚 XO 输出振荡频率。 有关芯片配置选项的设置请参考第十章有关 FortisIDE 的介绍。 SPMC65 系列单片机提供三种工作模式,分别是正常模式( NORMAL )、掉电模式( STOP )、挂起模式( HALT )。芯片上电后直接进入 NORMAL 模式,所有的硬件功能模块均为可用。为了降低整个芯片的功耗,还提供了 STOP 和 HALT 两种低功耗模式。低功耗模式可以被唤醒源唤醒,进入正常工作模式。而外部复位都可以使芯片从低功耗模式强行进行复位,并进入正常工作模式,所以可以把外部复位看为特殊的唤醒源。 系统进入 STOP 模式,片上振荡器停止, CPU 以及所有的硬件功能模块也停止。但是 RAM 区的数据包括控制寄存器的设置仍然保持不变( RAM 区的数据、寄存器中的值和锁存器中的内容保持不变)。由于 I/O 口的相关的寄存器(数据寄存器、方向寄存器和属性寄存器)设置不变,所以 I/O 端口管脚状态保持不变。 来自 I/O 管脚的外部中断或者看门狗中断可以唤醒系统重新进入正常模式,所以在进入 STOP 模式之前必须打开相应的中断。若使用看门狗进行唤醒,则必须先打开看门狗定时器。而外部复位可看作特殊的唤醒源,当系统工作在 STOP 模式下时,外部复位的效果实际上就是使系统复位,然后再进入正常工作模式(程序从头执行)。 系统在 STOP 模式下由外部中断或看门狗中断唤醒时,系统会延时 40ms 的时间(延时波动为 20ms~60ms )以待系统时钟稳定,之后才进入正常的唤醒后操作。 在 HALT 模式下,所有的周边保持原来状态,正常工作。只有 CPU 停止工作以节省功耗,所以 HALT 模式下功耗大于 STOP 模式下的功耗。 HALT 模式下,所有的中断源都可以作为唤醒源。 表 8.5 为三种模式下 CPU 和周边硬件的运行情况。 表 8 . 5 CPU 和周边硬件运行表
三种工作模式之间的关系请参考 图 8.8 。
图 8 . 8 工作模式转换 低功耗模式控制寄存器 P_MODE_Ctrl($31) 默认值为 #00h ,其功能请参考 表 8.6 。表 8 . 6低功耗模式控制寄存器 P_MODE_Ctrl($31,R/W)
Bit [7:0] Mode_Ctrl[7:0] : 工作模式选择位 读操作: 数值总是 0x00 写操作: 0x5A= 进入 Stop 模式 0xA5= 进入 HALT 模式 0x66= 复位除了 CPU 外的所有内部模块 注:寄存器 P_Mode_Ctrl 进行设置时需要连续写两次才能将值有效写入。 操作: 进入 STOP 模式操作 在进入 STOP 模式前必须清除所有的中断请求标志 (P_INT_Flag0, P_INT_Flag1, P_INT_Flag2) ,和使能相应的外部中断作为唤醒源。然后执行进入 STOP 模式指令,即连续两次写 # 5Ah 到 低功耗控制寄存器 P_Mode_Ctrl ,由于系统可能会受到外界干扰等情况,所以为了增加程序的可靠性,可以插入多于 2 条的 NOP 指令 。 唤醒 STOP 模式操作 外部复位或外部中断都可以将单片机从 STOP 模式唤醒到正常工作模式。而外部复位实际上是系统复位的操作,会将初始化所有控制寄存器为默认值,但并不改变片内 RAM 的数值。外部中断唤醒方式将保留片内 RAM 和控制寄存器的数值。 当使用中断将 CPU 唤醒后,程序会产生分支:如果状态寄存器 P 中的中断屏蔽位( I )为 1 ,主程序会继续执行“进入 STOP 语句”的下一句指令,继续执行。但是如果( I )为 0 ,主程序便会跳转到中断服务子程序去执行,执行完后会返回到“进入 STOP 语句”的下一句指令,继续执行。
图 8 . 9 STOP 模式操作流程图 进入 HALT 模式 在进入 HALT 模式前必须清除所有的中断请求标志( P_INT_Flag0, P_INT_Flag1, P_INT_Flag2 ),和使能相应的外部中断作为唤醒源。然后执行进入 HALT 模式指令,即连续两次写 # A5h 到 低功耗控制寄存器 P_Mode_Ctrl ,由于系统可能会受到外界干扰等情况,所以为了增加程序的可靠性,可以插入多于 2 条的 NOP 指令。 唤醒 HALT 模式 所有的中断都可以作为 HALT 模式的唤醒源,例如:外部中断、定时 / 计数器溢出中断、看门狗中断、 ADC 中断、捕获中断、 SPI 中断和 UART 通讯中断等。同样外部复位也可以使系统从 HALT 模式“唤醒”,使系统复位;外部复位唤醒将初始化控制寄存器为默认值但并不改变 RAM 的值;通过外部中断则二者的值都不会改变。 当使用中断将 CPU 唤醒后,程序会产生分支:如果状态寄存器 P 中的中断屏蔽位( I )为 1 ,主程序会继续执行“进入 HALT 语句”的下一句指令,继续执行。但是如果( I )为 0 ,主程序便会跳转到中断服务子程序去执行,执行完后会返回到“进入 HALT 语句”的下一句指令,继续执行。
图 8 . 10 HALT 模式操作流程图
【例 8 - 2 】 设置进入 STOP 模式,并使能 INT0 作为唤醒源。
8.4.1 看门狗定时器结构 看门狗定时器用来产生定时信号,从而判断系统是否运行正常,其时钟源来自片内 RC 振荡电路,振荡频率典型值为 25kHz 。看门狗定时器的中断频率可以通过软件设置改变(看门狗定时器控制寄存器 P_WDT_Ctrl 设置),当其连续中断 8 次,便会溢出产生看门狗复位信号,复位 CPU 。其结构图请参考 图 8.11 。
图 8 . 11 看门狗定时器结构图 8.4.2 看门狗定时器控制寄存器 看门狗定时器的相关设置是通过写看门狗定时器控制寄存器 P_WDT_Ctrl ( $32 )实现的,其默认初值为 #F0h ;看门狗定时器控制寄存器的功能请参考 表 8.7 。表 8 . 7 看门狗定时器控制寄存器( $32,R/W )
Bit [7] SCKEN : STOP 模式下看门狗定时器(即慢速的 25KHz 振荡器)使能位 程序正常运行时,需要在规定的时间内清狗,具体操作为向清狗寄存器 P_WDT_Clr ( $10 )中写入 #55h 。 表 8 . 8 清狗寄存器 P_WDT_Clr ( $10,R/W )
Bit [7:0] WDT_CLR[7:0] : 清狗指令 2 、在看门狗功能使能的情况下,要在特定的时间间隔内写 #55h 到寄存器 P_WDT_Clr ( $10 )进行清狗操作。 8.4.3 看门狗中断 使能看门狗中断的设置步骤如下: 使能看门狗中断; 用“ SEI ”指令关闭中断 ; 设置看门狗操作相关的寄存器,如 P_INT_Ctrl0 中的 WDT 使能位和 P_WDT_Ctrl 中的 WDT 周期; 用“ CLI ”指令打开中断 ; 等待中断产生 。 【例 8 - 3 】 设置看门狗定时器
8.5.1 时基 SPMC65 系列单片机提供了一个 8 位时基定时器,用来产生时间基准信号(简称时基信号),即产生一所选定频率的时基中断信号;时基信号的周期从 16us ~ 1s 共 15 种可选,通过设置时基 / 蜂鸣器控制寄存器 P_BUZ_Ctrl ( $2D )的 Bit [7:4] 位 ( 即 INTIMS [3:0]) 选择,以提供系统控制中需要的时钟信号。 8.5.2 蜂鸣器SPMC65 系列单片机支持蜂鸣器驱动输出。通过输出频率可调、占空比为 50 %的方波来驱动蜂鸣器,频率在 1KHz ( 976Hz )到 2MHz 之间可选,通过设置时基 / 蜂鸣器控制寄存器 P_BUZ_Ctrl ( $2D )的 Bit [3:0] 位(即 BZFS [3:0] )进行选择。 8.5.3 时基和蜂鸣器输出控制寄存器 P_BUZ_Ctrl( $2D ) 时基和蜂鸣器输出控制寄存器 P_BUZ_Ctrl ( $2D )用来选择时基时钟和蜂鸣器驱动输出的频率。其默认初始值为 #00h ,具体功能请参考 表 8.9 。 表 8 . 9 时基和蜂鸣器输出控制寄存器 P_BUZ_Ctrl ( $2D,R/W )
【例 8 - 4 】 利用时基定时器产生 512 us 为周期的中断 (FSYS = 8MHz) 。
【例 8 - 5 】 利用蜂鸣器输出 128 u s ,占空比为 50 %的信号 (FSYS = 8MHz) 。
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 版权所有:北京凌阳爱普科技有限公司 www.sunplusmcu.com 本站网络实名、通用网址:凌阳单片机 未经许可网站内容严禁复制、转载,任何人不得擅自使用 京ICP备05061966号 |