MSP430各功能模块的介绍
- 格式:doc
- 大小:263.00 KB
- 文档页数:21
各个时钟信号源介绍如下:
1、 LFXT1CLK:低频/高频时钟源。可以外接32768Hz的时钟芯片或频率为450KHz~8MHz的标准警惕或共振器。
2、 XT2CLK:高频时钟源。需要外接两个震荡电容器。可以外接32768Hz的时钟芯片或频率为450KHz~8MHz的标准警惕或共振器和外部时钟输入。较常用的晶体是8MHz的。
3、 DCOCLK:内部数字可控制的RC振荡器。MSP430单片机时钟模块提供3个时钟信号以供给片内各部分电路使用,这3个时钟信号分别是:
(1) ACLK:辅助时钟信号。ACLK是从LFXT1CLK信号由1/2/4/8分频器分频后得到的。由BCSCTL1寄存器设置DIVA相应位来决定分频因子。ACLK可提供给CPU外围功能模块做时钟信号使用。
(2) MCLK:主时钟信号。MCLK是由3个时钟源所提供的。它们分别是:LFXT1CLK、XT2CLK、和DCO时钟源信号。MCLK主要用于MCU和相关 模块做时钟。同样可设置相关寄存器来决定分频因子及相关设置。
(3) SMCLK:子系统时钟。SMCLK由2个时钟源信号提供,他们分别是XT2CLK和DCO。如果是F11或F11X1系列单片机,则由LFXT1CLK代替XT2CLK。同样可设置相关寄存器来决定分频因子及相关的设置。
低频振荡器LFXT1:
LFXT1支持超低功耗,它在低频模式下使用一个32768Hz的晶体。不需要任何电容因为在低频模式下内部集成了电容。低频振荡器也支持高频模式和高速晶体,但连接时每端必须加电容。电容的大小根据所接晶体频率的高低来选择。低频振荡器在低频和高频模式下都可以选择从XIN引脚接入一个外部输入时钟信号,但所接频率必须根据所设定的工作模式来选择,并且OSCOFF位必须复位。
高频振荡器LFXT2:
LFXT2作为MSP430的第二晶体振荡器。与低频相比,其功耗更大。高频晶体真大气外接在XIN2和XOUT2两个引脚,并且必须外接电容。高频振荡器可以作为SMCLK和MCLK的时钟源。高频振荡器可以选择从XIN2引脚接入一个外部输入时钟信号,但是所接的频率必须根据所设定的工作模式来选择,兵器XT2OFF必须复位。
数字控制振荡器DCO:
DCO是内部集成的RC类型振荡器。DCO的频率会随温度和电压的变化而变化。DCO的频率精度比较差,但可以通过软件设置DCOx、MODx、和RSLEx等位来调整其频率,从而增加它的稳定性。当DCO不是作为SMCLK或MCLK的时钟源时,可以通过设置SCG0位来使DCOCLK失效。
当系统复位(PUC)后,DCO被选择为系统的MCLK和SMCLK时钟源,RC选择为内部电阻产生振荡器。RSELx=3,DC0x=4,DCO频率处于中间频率。
DCO频率设置是经过一下几步来实现的:
通过设置DCOR位来选择是外部或内部电阻
通过外部电阻或内部电阻来确定一个基准频率
通过设置3个RSELx位来分频
通过设置3个DCOz位来选择DCOx和DCOx+1之间的频率。
当DCO=07H时,MODx位对选择没有效果,因为已经达到最高频率了。
DCO可以工作在很高的频率上,内部电阻大约为300K,此时DCO的工作频率大约为5MHz,当使用一个100K的外部电阻时,此时DCO的工作频率可以达到10MHz。
需要注意的是,MCLK不能高于该器件所规定的最高频率。DCO的调制器混合DCO到DCO+1的频率产生一个稳定有效的中频频率来减小电磁干扰。这个功能是通过设置MODx位来实现的。当MODx位为0时,该功能失效。
而实际DCO周期t的计算公式为:
t=(32-MODx)*tDCO+MODx*tDCO+1
MSP430的中断分为3种:系统复位中断、不可屏蔽中断和可屏蔽中断。
系统复位后的地址位0FFFEH
不可屏蔽中断
不可屏蔽中断的中断向量为0FFFCH。响应不可屏蔽中断时,硬件将OFIE、NMIE、ACCVIE复位。软件首先判断中断源并复位中断标志,接着执行用户代码。退出中断之前需要置位OFIE、NMIE、ACCVIE,以便能够再次响应中断。需要特别注意的是:置位OFIE、NMIE、ACCVIE后,必须立即退出中断响应程序,否则会再次触发中断,导致中断嵌套,从而导致堆栈溢出,使得程序执行结果无法预料。产生不可屏蔽中断有3种情况:上升沿电平出现在NMI引脚,当NMI引脚配置为NMI模式时;振荡器发生错误,Flash的误操作。
当系统上电复位时,RST/NMI引脚被设置为复位模式。RST/NMI引脚选择RST或者NMI功能是通过设置看门狗的寄存器WDTCTL实现的。 当此引脚设置为复位状态时,CPU会保持复位状态。当该引脚保持低电平且输入变成高电平时,CPU开始从0FFFEH所指定的起始地址处执行程序。
当次引脚配置成NMI功能时,如果有一个边沿信号(上升沿或下降沿)被WDTNMIES位选择并且NMIE中断允许,将会产生NMI中断,并且会产生NMI中断标志NMIIFG。
当此引脚配置成NMI模式时,一个NMI中断产生,不会锁定NMI引脚为低电平。如果此时有不同原因产生PUC复位并且NMI引脚为低电平时,系统将保持复位状态,这是因为PUC复位后将该引脚配置为复位模式。
当此引脚配置成NMI模式时,修改WDTNMIES位是否产生中断取决于该引脚实际的电平。当NMI中断边沿选择位在配置为NMI模式前修改时,则不会产生中断。
可屏蔽中断
可屏蔽中断的中断源来源于具有中断能力的外围模块,包括看门狗定时器工作在定时器模式时溢出产生的中断。每一个中断都可以由各自的中断控制器寄存器中的对应控制位进行屏蔽,也可以由全局中断控制位屏蔽。
中断响应的过程
多个中断请求发生时,响应最高优先级中断。响应中断时,MSP430单片机将不可屏蔽中断控制位SR.GIE复位。因此,一旦响应了中断,即使有优先级更高的可屏蔽中断出现,也不会中断当前正在响应的中断而去响应较高优先级的中断。但SR.GIE复位不影响不可屏蔽中断,所以仍可接受不可屏蔽中断的中断请求。
中断响应的过程如下:
如果CPU处于活动状态,则完成当前指令
如果CPU处于低功耗状态,则退出低功耗状态
将下一条指令的PC值压入堆栈
将状态寄存器SR压入堆栈
若有多个中断请求,则响应最高优先级中断
单中断源的中断请求标志位自动复位,多中断源的标志位不变,等待软件复位。
总中断允许位SR.GIE复位;SR状态寄存器中的CPUOFF、OSCOFF、SCG1、V、N、Z、C位复位。
相应的中断向量值装入PC寄存器,程序从此地址开始执行。
中断返回的过程如下:
从堆栈中恢复PC值,若响应中断前CPU处于低功耗模式,则可屏蔽中断仍然恢复低功耗模式
从堆栈中恢复PC值,若响应中断前CPU不处于低功耗模式,则从此地址继续执行程序。
特殊功能寄存器
中断使能寄存器1
中断使能寄存器1是一个8位的寄存器,该寄存器主要是使能某些模块的中断功能,其存储地址为00H。中断使能寄存器1中的位分配如下:
UTXIE0 Bit7 USART0、UART和SPI发送中断使能信号
URXIE0 Bit6 USART0、UART和SPI接收中断使能信号
ACCBIE Bit5 Flash访问错误中断使能信号
NMIIE Bit4 非屏蔽中断使能信号
OFIE Bit1 振荡器故障中断使能信号
WDTIE Bit0 看门狗定时器中断使能信号
中断使能寄存器2
中断使能寄存器2是一个8位的寄存器,该寄存器主要是使能某些模块的中断功能,其存储地址为01H。
UTXIE1 Bit5 USART1、UART和SPI发送中断使能信号
URXIE1 Bit4 USART1、UART和SPI接收中断使能信号
中断标志寄存器1
中断标志寄存器1是一个8位的寄存器,该寄存器主要是响应模块的中断标志位,其存储地址为02H。
UTXIFG0 Bit7 USART0、UART和SPI发送标志
URXIFG0 Bit6 USART0、UART和SPI接收标志
NMIIFG Bit4 通过RST/NMI引脚置位
OFIFG Bit1 振荡器发生故障时标志置位
WDTIFG Bit0 溢出,或安全值错误,或VCC上电复位,或RST/NMI有复位条件时置位
中断标志寄存器2
中断标志寄存器2是一个8位的寄存器,该寄存器主要是相应模块的中断标志位,其存储地址为03H。
UTXIFG1 Bit5 USART1UART和SPI发送标志
URXIFG1 Bit4 USART1UART和SPI接收标志
模块使能寄存器1
模块使能寄存器1是一个8位的寄存器,该寄存器主要是相应模块的中断标志位,其存储地址为04H。
UTXE0 Bit7 USART0、UART发送使能
URXE0 Bit6 USART0、UART和SPI接收使能
USPIE0 Bit6 USART0、SPI(同步外设接口)发送和接收使能
模块使能寄存器2
模块使能寄存器2是一个8位的寄存器,该寄存器主要是相应模块的中断标志位,其存储地址位05H。
UTXE1 Bit5 USART1、UART发送使能
URXE1 Bit4 USART1、UART和SPI接收使能
USPIE1 Bit4 USART1、SPI(同步外设接口)发送和接收使能
MSP430F149的I/O口操作是通过读/写寄存器来完成的。与I/O口相关的寄存器有PxDIR 、PxIN、PxOUT、PxSEL、PxIFG、PxIE和PxIES,其中后面三个是中断寄存器。
当I/O口作为一般的输入/输出口使用时,其基本操作流程如下:
选择I/O口功能,基本I/O口模式或其他模式(即设置PxSEL寄存器)
设置方向寄存器(PxDIR)
读出外部输入值(PxIN)或写入相应值(PxOUT)
对I/O口中断操作的基本流程如下:
设置I/O模式 设置中断触发方式(PxIES寄存器) 允许中断(PxIE)
开总中断(调用_EINT()或_BIS_SR(LPM4_bits+GIE)函数)
等待中断,有中断时执行中断服务程序