大家好,
我有一个基于 MSP430I2021的项目,它没有外部时钟源,晶体或示波器,所以我需要使用 DCO。
我正在使用 CCS v7。
我还想使用计时器模块来发生1毫秒中断。 我的代码如下:
#include <MSP4C.h>
void board_init(void);
void initTimer_A(void);
void Blynk();
易失性无符号 int TimerCnt;
主无效(无效){
Board_init();
initTimer_a();
_enable_interrupt ();
for (;;){
Blynk();
}
}
void board_init()
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
/* DCO = 16.384MHz
* MCLK = 16.384MHz
* SMCLK = 1.024MHz
* ACLK = 32KHz
**
CSCTL1 =(DIVM0 | DIVS2);
P2DIR |= BIT0;
}
Blynk()无效
{
IF (TimerCnt = 1000)
{
P2OUT ^= BIT0;
TimerCnt = 0;
}
}
使 initTimer_A 无效(无效)
{
/*设置1ms 计时器中断*/
TACCTL0和=~CCIE;
TACR0 = 0;//初始时,停止计时器
TACTL0 = CCIE;
TACR0 = 1000-1;
TACTL = tassel_2 + ID_0 + MC_1;//选择 SMCLK,SMCLK/1,UP 模式
}
//计时器 ISR
#pragma 矢量= TIMER0_A0_Vector
中断无效计时器_a_CCR0_ISR (无效)
{
TimerCnt++;
}
当此代码运行时,LED 闪烁速度超过1秒。 我认为 DCO 校准错误,但我不理解如何校准 DCO。
我找到了一些像 slaa336这样的文档,但 它们是 msp430g2553或 f 系列的写。 430i2021没有 DCOCTL 或 BCSCTL 寄存器。
我在下面找到了代码,但我不理解什么是“TLC_ADDRESS_ORT_解 析”?
/*校准参考*/
REFCAL1 =*(TLC_ADDRESS_ORT_parse + TLL_CAL_REFCAL1);
REFCAL0 =*(TLL_ADDRESS_ORT_parse + TLL_CAL_REFCAL0);
/*校准 DCO */
CSIRFCAL =*(TLV_ADDRESS_ORT_SAME + TLV_CAL_CSIRFCAL);
CSIRTCAL =*(TLV_ADDRESS_ORT_SAME + TLV_CAL_CSIRTCAL);
CSRFCAL =*(TLL_ADDRESS_ORT_SAME + TLL_CAL_CSRFCAL);
CACERTTM =*(TLC_ADDRY_FOR _SAME + TLL_CAL_CACERTTM);
如何校准 DCO?
谢谢