我正在尝试编写 C 语言软件对 MSP430进行编程、以便为 WS2812b LED 条创建数据信号。 我需要使用需要1.25微秒周期的数据脉冲发送24位数据。 我尝试使用 SMCLK 创建这些文件、据我所知、SMCLK 的频率为16MHz。 我的计时器在此频率上计数、这意味着如果计数到我在 TACCR0寄存器中设置的20、我将得到1.25us 的周期。 然后、我将 TACCR1设置为7以获得所需的占空比信号。 我将使用计时器 ISR、然后输出具有所需周期和占空比的脉冲。
但是、当我用示波器监视数据脉冲时、我得到的频率为~37us、但我不确定是什么导致了这种情况。 我还尝试通过设置 P8SEL0 ||位0来监控 SMCLK 的频率 、从而根据 64引脚 PM 封装的引脚分配选择 SMCLK 连接到的引脚16上的主要模块功能。 这种情况没有发生,所以我不知道我是否做得正确。
对于 MCU、我不是专家、非常希望获得有关创建频率为16MHz 的计时器以及如何确保计时器处于该频率的建议。 我附上了我的守则,并尽量解释问题,但如果有任何问题不清楚,请随时提出问题。
#include <msp430.h>
#pragma vector = TIMER0_A0_VECTOR
__interrupt void ISR_TA0_CCR0(void)
{
P1OUT |= BIT3;
TA0CCTL0 &= ~CCIFG;
}
#pragma vector = TIMER0_A1_VECTOR
__interrupt void ISR_TA0_CCR1(void)
{
P1OUT &= ~BIT3;
TA0CCTL1 &= ~CCIFG;
}
int main(void)
{
WDTCTL = WDTPW | WDTHOLD;
//configADC();
// Disable the GPIO power-on default high-impedance mode
// to activate previously configured port settings
PMM_unlockLPM5();
__enable_interrupt();
//Setting up timer for data signal
TA0CTL |= TACLR;
TA0CTL |= MC_1;
TA0CTL |= TASSEL_2;
TA0CCR0 = 20;
TA0CCR1 = 6;
TA0CCTL0 |= CCIE;
TA0CCTL1 |= CCIE;
TA0CCTL0 &= ~CCIFG;
TA0CCTL1 &= ~CCIFG;
//Setting P1.3 as an output
P1DIR |= BIT3;
//Trying to check freuency of SMCLK
P8DIR |= BIT0;
P8SEL0 |= BIT0;
while(1)
{
}
}