Other Parts Discussed in Thread: MSP-EXP430FR2433
你好
我们使用的MSP-EXP430FR2433开发模块,目前关于CS及capture timerA进行了如下配置:
CS 配置:(配置MCLK为16Mhz时钟)
#define CS_MCLK_DESIRED_FREQUENCY_IN_KHZ 16000//16Mhz
#define CS_MCLK_FLLREF_RATIO 489//16Mhz/32768hz
//Set DCO FLL reference = REFO
CS_initClockSignal(
CS_FLLREF,
CS_REFOCLK_SELECT,
CS_CLOCK_DIVIDER_1
);
//Set ACLK = REFO
CS_initClockSignal(
CS_ACLK,
CS_REFOCLK_SELECT,
CS_CLOCK_DIVIDER_1
);
//Create struct variable to store proper software trim values
CS_initFLLParam param = {0};
//Set Ratio/Desired MCLK Frequency, initialize DCO, save trim values
CS_initFLLCalculateTrim(
CS_MCLK_DESIRED_FREQUENCY_IN_KHZ,
CS_MCLK_FLLREF_RATIO,
¶m
);
//Clear all OSC fault flag
CS_clearAllOscFlagsWithTimeout(1000);
//For demonstration purpose, change DCO clock freq to 16MHz
CS_initFLLSettle(
16000,
487
);
//Clear all OSC fault flag
CS_clearAllOscFlagsWithTimeout(1000);
//Reload DCO trim values that were calculated earlier
CS_initFLLLoadTrim(
CS_MCLK_DESIRED_FREQUENCY_IN_KHZ,
CS_MCLK_FLLREF_RATIO,
¶m
);
//Clear all OSC fault flag
CS_clearAllOscFlagsWithTimeout(1000);
//Enable oscillator fault interrupt
SFR_enableInterrupt(SFR_OSCILLATOR_FAULT_INTERRUPT);
capture配置(P1.1捕获引脚):
//capture
P1SEL1 |= BIT1; // TA0.CCI1A input capture pin, second function
P1REN |= BIT1; // enable internal pull-down resistor
P1OUT |= BIT1;
TA0CCTL1 |= CM_3 | CCIS_0 | CCIE | CAP | SCS;
TA0CTL |= TASSEL_2 | MC_2 | TACLR | TAIE;
/* 捕获触发中断 */
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = TIMER0_A1_VECTOR
__interrupt void TIMER0_A1_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(TIMER0_A1_VECTOR))) TIMER0_A1_ISR (void)
#else
#error Compiler not supported!
#endif
{
switch(__even_in_range(TA0IV,TA0IV_TAIFG))
{
case TA0IV_NONE:
break; // No interrupt
case TA0IV_TACCR1:
if (GPIO_INPUT_PIN_LOW == GPIO_getInputPinValue(GPIO_PORT_P1, GPIO_PIN1))
{
overflowCounter = 0; //Reset number of overflows
startTime = 0; //Reset timer variable and CCR2, start timer in cont mode
TA0CCR1 = 0;
TA0CTL |= TACLR | MC_2;
}
else
{
endTime = TA0CCR1; //Stop timer
TA0CTL |= MC_0;
//elapsedTime(单位 ms) 4.096ms = ((1/16Mhz)*0xFFFF * 10^3)
elapsedTime = (float)(4.096*(float)(overflowCounter)) + (float)((float)(endTime) / 16000);
}
edgeFlag ^= 1;
break; // CCR1 not used
case TA0IV_TACCR2:
break; // CCR2 not used
case TA0IV_TAIFG:
overflowCounter++;
break; // overflow
default:
break;
}
}
目前有两个问题想确认一下:
1.CS的配置接口调用是否正常,同时16Mhz情况下关于ratio参数的计算方法是否正常,16Mhz/32678hz ≈489

2.capture 中断内TA0IV_TAIFG的elapsedTime计算方法是否正确?以ms为单位计算
//elapsedTime(单位 ms) 4.096ms = ((1/16Mhz)*0xFFFF * 10^3)
elapsedTime = (float)(4.096*(float)(overflowCounter)) + (float)((float)(endTime) / 16000);
