引言:MSP430的教科书通读了一遍,只是对其有一个整体的朦胧感.于是昨天开始准备编些程序试下自己的水平.可对着空荡荡的代码区硬是一个字都写不下去.涉及到细节问题,基本就是无从下手.现把一些细节问题整理在这个专栏里面,以备后面查证.同时觉得自己欠缺的还是一个对总体框架的把握,看来是要多读一些东西了.
正文:MSP430根据型号的不同最多可以选择使用3个振荡器。我们可以根据需要选择合适的振荡频率,并可以在不需要时随时关闭振荡器,以节省功耗。这3个振荡器分别为: (1)DCO 数控RC振荡器。它在芯片内部,不用时可以关闭。DCO的振荡频率会受周围环境温度和MSP430工作电压的影响,且同一型号的芯片所产生的频率也不相同。但DCO的调节功能可以改善它的性能,他的调节分为以下3步:a:选择BCSCTL1.RSELx确定时钟的标称频率;b:选择DCOCTL.DCOx在标称频率基础上分段粗调;c:选择DCOCTL.MODx的值进行细调。 (2)LFXT1 接低频振荡器。典型为接32768HZ的时钟振荡器,直接连接在XIN与XOUT之间,此时振荡器不需要接负载电容。也可以接450KHZ~8MHZ的标准晶体振荡器,此时需要接负载电容.LXFT1产生的频率信号为ACLK.低速时钟需要上百毫秒的建立时间才能稳定下来. (3)XT2 接450KHZ~8MHZ的标准晶体振荡器。外部标准晶体振荡器接在XT2IN和XT2OUT之间,此时需要接负载电容,不用时可以关闭。 低频振荡器主要用来降低能量消耗,如使用电池供电的系统,高频振荡器用来对事件做出快速反应或者供CPU进行大量运算。 MSP430的3种时钟信号:MCLK系统主时钟;SMCLK系统子时钟;ACLK辅助时钟。 (1)MCLK系统主时钟。除了CPU运算使用此时钟以外,外围模块也可以使用。MCLK可以选择任何一个振荡器所产生的时钟信号并进行1、2、4、8分频作为其信号源。 (2)SMCLK系统子时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。SMCLK可以XT2CLK或者DCOCLK振荡器所产生的时钟信号并进行1、2、4、8分频作为其信号源。 (3)ACLK辅助时钟。供外围模块使用。并在使用前可以通过各模块的寄存器实现分频。但ACLK只能由LFXT1进行1、2、4、8分频作为信号源。可以作为后台时钟用来唤醒CPU. (4)ACLK/N, ACK缓冲输出,他可以有ACL.1.2.4.8分频获得 ,且只能为外部所用. PUC复位后,MCLK和SMCLK的信号源为DCO,DCO的振荡频率为800KHZ。ACLK的信号源为LFXT1。 MSP430内部含有晶体振荡器失效监测电路,监测LFXT1(工作在高频模式)和XT2输出的时钟信号。当时钟信号丢失50us时,监测电路捕捉到振荡器失效。如果MCLK信号来自LFXT1或者XT2,那么MSP430自动把MCLK的信号切换为DCO,这样可以保证程序继续运行。但MSP430不对工作在低频模式的LFXT1进行监测。 关于MSP430的定时器A 16位TIMER_A的主要功能模块包括: 。一个可连续增计数至预定值并返回0的计数器,也可是其停止.。软件可选择的时钟源. 。 选定的时钟源可作1,2,4和8分频. 。5个捕获/比较寄存器.每个都有独立的捕获事件,即硬件和软件控制的2个捕获信号. 。5个输出模块,支持脉宽调制需要. 定时器操作: 模式控制 模式 具体操作 MC1 MC0 (TATCL寄存器4~5位) 0 0 停止 定时器暂停 0 1 增计数 定时器增计数到等于比较寄存器0的值 1 0 连续 定时器连续增计数 1 1 增/减计数 定时器增计数到等于比较寄存器0的值,然后减计数到0 输入分频控制位(TACTL6~7) ID1 ID2 分频 说明 0 0 PASS 输入信号直通定时器 0 1 /2 输入信号2分频 1 0 /4 输入信号8分频 定时器的时钟源: SSEL2 SSEL1 SSEL0 输入信号 说明 0 0 0 TACLK 用特定的外部引脚信号 0 0 1 ACL 用辅助时钟ACLK 0 1 0 MCLK 用系统时钟MCLK 0 1 1 INCLK 见器件说明 1 X X ---- 保留 捕获模式: 位于控制字CCTLX中的模式位CAPX的置位将选择捕获模式。 捕获模式用于时间时间的精确定位,她可以用在速度计算或时间测量中.若在选定的输入引脚上发生选定脉冲触发沿.则定时器计数的值将被复制到捕获寄存器CCRX中.完成捕获后。控制字CCTLX中的中断标志CCIFGX置位;。如果通用中断允许位GIE和相应的中断标志位CCIEX置位,则产生中断请求.复位表示在下一次捕获完成前捕获数据已被读取.如果捕获数据还未读取时第二次捕获数据已锁存,则寄存器CCTLX中的溢出位COVX置位,检查这一位可以使程序从失去同步状态中恢复.需要用软件来复位COVX. CCRX_Int_hand ... ;中断处理 ... ... MOV &CCRX,RAM_Buffer BIT #COV,&CCTLX ;BIT指令对各标志位的影响:N最高位为时置位,Z结果为0时置位, ;C结果非零时置位;V复位 JNZ Overflow_Hand ;JNZ非0跳转,溢出出错处理,否则正常处理 .... .... RETI Overflow_Hand BIC #COV,&CCTLX ;复位捕捉溢出标志,恢复同步 .... .... RETI 定时器暂停时捕获应该停止.顺序应是先停止捕获功能,再停止定时器计数.捕获功能重新开始时,顺序应先开始捕获功能,再开始定时器计数. 比较模式: 如果控制字CCTLX中CAPX复位,则选择比较模式.这时所有的捕获硬件停止工作.如果定时器计数值等于比较寄存器X中的值,那么。位于控制字CCTLX中的中断标志CCIFX置位.。如果GIE和CCIEX置位,则产生中断请求.。EQUX信号输出到输出单元OUTX中.根据选定输出模式,信号可以是置位、复位、或将输出OUTX翻转(如果OUTMODX>0)当定时器值大于或者等于CCR0的值时,EUQ0信号为真;当定时器值等于相应的CCR1~CCR4的值时,EQU1~EQU4信号为真. 输出单元:输出单元支持PWM或者DAC应用 OUTMODX 模式 说明 000 输出模式 OUTX位的数据即OUTX信号 001 置位 比较信号EQUX使OUTX信号置位 010 PWM翻转/置位 比较信号EQUX使OUTX信号翻转,EQU0使OUTX信号复位 011 PWM置位/复位 比较信号EQUX使OUTX信号置位,EQU0使OUTX信号复位 100 翻转 比较信号EQUX使OUTX翻转 101 复位 比较信号EQUX使OUTX复位 110 PWM翻转/复位 比较信号EQUX使OUTX信号翻转,EQU0使OUTX信号置位 111 PWM复位/置位 比较信号EQUX使OUTX信号复位,EQU0使OUTX信号置位 输出从现有的电平开始,而与选定的模式无关.1.增计数模式:当定时器增计数到CCRX以及由CCR0计数到0时,OUTX信号根据选定的输出模式发生变化.2.连续计数模式:当定时器计数到CCRX和计数到CCR0时,OUTX信号根据选定的输出模式发生变化.3.增/减计数模式:当定时器增计数到CCRX和减计数到CCRX时,OUTX信号根据选定的输出模式发生改变. 暂告一段落,感觉感觉现在的自己超级笨,这么一点东西就折腾半天,而且具体怎么用还不是很清楚,真是惭愧~看来还是要有针对性的实验以下或者看看别人的历程会有效果。稍后把例程呈上 |
|