主题中讨论的其他器件: MSP430G2553
我尝试从我找到的现有库映射代码、以便可以驱动 ws2812b LED 条图。 我在 https://github.com/mjmeli/MSP430-NeoPixel-WS2812-Library 上找到了该库。 我尝试将其映射到我的特定器件、但代码似乎仍然无法正常工作。 我需要针对特定器件更改3个小部分、以下是我的尝试。 3个代码块包括原始代码以及我的等效代码。 我需要有关识别问题的帮助或有关如何将代码从一个 MSP 映射到另一个 MSP 的一些提示、因为我没有这样做的经验。
第一部分需要将 UCB0SIMO 配置为 SPI 输出
// ORIGINAL
#define OUTPUT_PIN (0x80) // Set to whatever UCB0SIMO is on your processor (Px.7 here)
P1SEL |= OUTPUT_PIN; // configure output pin as SPI output
P1SEL2 |= OUTPUT_PIN;
//My equivalent code
P5SEL0 |= BIT2; // configure output pin as SPI output
第二个是检查 UCB 中断标志。 我认为问题可能来自哪里? 在我的器件的数据表中、这是数据表中的数据: UCB0RXIFG、UCB0TXIFG (SPI 模式)、但当我使用它们时、我会得到一个未定义的错误。
// Original Code while (!(IFG2 & UCB0TXIFG)) ; // wait to transmit // My equivalent code while (!(SFRIFG1 & UCTXIFG)) ; // wait to transmit
第三部分是初始化16MHz 时钟
//Original Code
if (CALBC1_16MHZ==0xFF) // If calibration constant erased
{
while(1); // do not load, trap CPU!!
}
// configure clock to 16 MHz
BCSCTL1 = CALBC1_16MHZ; // DCO = 16 MHz
DCOCTL = CALDCO_16MHZ;
// My equivalent code
void initClockTo16MHz()
{
// Configure one FRAM waitstate as required by the device datasheet for MCLK
// operation beyond 8MHz _before_ configuring the clock system.
FRCTL0 = FRCTLPW | NWAITS_1;
__bis_SR_register(SCG0); // disable FLL
CSCTL3 |= SELREF__REFOCLK; // Set REFO as FLL reference source
CSCTL0 = 0; // clear DCO and MOD registers
CSCTL1 &= ~(DCORSEL_7); // Clear DCO frequency select bits first
CSCTL1 |= DCORSEL_5; // Set DCO = 16MHz
CSCTL2 = FLLD_0 + 487; // set to fDCOCLKDIV = (FLLN + 1)*(fFLLREFCLK/n)
// = (487 + 1)*(32.768 kHz/1)
// = 16 MHz
__delay_cycles(3);
__bic_SR_register(SCG0); // enable FLL
while(CSCTL7 & (FLLUNLOCK0 | FLLUNLOCK1)); // FLL locked
CSCTL4 = SELMS__DCOCLKDIV | SELA__REFOCLK;
}

