我使用计时器 TA1的 SMCLK 来捕获输入信号。 软件重复进入 LPM3模式以等待 RF 中断和捕获的输入信号。 根据 CC430用户指南中的"表3-1时钟请求系统和电源模式"、我需要将寄存器 USCTL8中的 SMCLKREQEN 位置为高电平、以便当 CC430F5137处于 LPM3模式时、SMCLK 可以被激活。
我还使用超低功耗模式使 CC430F5137在 LPM3模式下仅消耗几 uA 电流。
我在 cc430f5137.h 文件中看不到寄存器 USCTL8。 请告诉您是否应该将 寄存器 USCTL8中的 SMCLKREQEN 位置为高电平以及如何设置。
以下是我的软件的一部分:
TA1CTL = tassel_2 + MC_2 + TACLR;// SMCLK、contmode、clear TAR
TA1CCTL0 = CM1和 MSK_0 |// CM[1:0]= 10 =>在上升沿进行捕捉
CM0和 MSK_1 |
CCIS1和 MSK_0 |// CCIS[1:0]= 00 =>选择输入 CCI0A (引脚)
CCIS0和 MSK_0 |
// SCS = 1 =>将捕捉与时钟同步(推荐)
SCS 和 MSK_0 |
// SCCI 是同步 CCI 输入,此处无关
SCCI 和 MSK_0 |
CAP 和 MSK_1 |// CAP = 1 =>捕获模式
OUTMOD2 & MSK_0 |// OUTMOD[2:0]= 000 =>比较输出= OUT 位
OUTMOD1和 MSK_0 |
OUTMOD0和 MSK_0 |
CCIE 和 MSK_0 |// CCIE = 0 => CC 中断最初被禁用
CCI 和 MSK_0 |// CCI 是非同步 CC 输入、只读
当 OUTMOD[2:0]= 000时、// OUT = 0 => CC 输出= 0
OUT 和 MSK_0 |
COV 和 MSK_0 |// COV = 0 =>清除捕捉溢出标志
CCIFG 和 MSK_0;// CCIFG = 0 =>清除 CC 中断标志
WiredRx_State = 0;//状态0 =>等待捕获第一个上升沿
TA1CCR0 = 0;
TA1CCTL0 &=~CCIFG;
TA1CCTL0 |= CCIE;//为第一个起始位上升沿启用中断
一
//==================================================================================================================
//主循环
//==================================================================================================================
while (1)
{
CLRWDT_16
//make VLO (10kHz)作为 ACLK 的时钟源
UCSCTL4 = SELA_VLOCLK + SELESS__DCOCLKDIV + SELM_DCOCLKDIV;
…
STROBE (RF_Sidle);
STROBE (RF_SPWD);//关闭射频
WDTCTL =WDTPW+WDTTMSEL+WDTCNTCL+WDTIS2+WDTSSEL_2+WDTIS1;//1/16s
SFRIE1 |= WDTIE;//启用 WDT 中断
_bis_SR_register (LPM3_bits + GIE);//输入 LPM3并重新启用中断
// CPU 在这里休眠!
__delay_cycles (800ul);//等待
SFRIE1 ~WDTIE;//禁用 WDT 中断
//ACLK = XT1 (默认值)、SMCLK = DCOCLKDIV (默认值)、MCLK = DCOCLKDIV (默认值)
UCSCTL4 = SELA_XT1CLK + SELESS__DCOCLKDIV + SELM_DCOCLKDIV;
//delay_cycles (x)在代码中停止并等待 x 个 MCLK 周期
…
}