主题中讨论的其他器件: 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; }