我正在尝试编写 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) { } }