In: Electrical Engineering
Below is a code created on CCS for a ti MSP-432 lauchpad. Port 2(LED2) is showing a total of 7 colors instead of the 3 colors wanted. What can I change on the code, so it only displays RED, GREEN, and BLUE one after another?
#include <stdint.h> //exact-width integer types
#include <ti\devices\msp432p4xx\driverlib\driverlib.h>
//driver library
#define DCO_FREQ 48e6 //unit: Hz
void main(void)
{
    uint32_t n;
    uint16_t p2_data = 0;
WDT_A_holdTimer(); //stop watchdog timer
    //Enable FPU for DCO Frequency
calculation.
    FPU_enableModule();
    //Change VCORE to 1 to support a frequency
larger than 24MHz.
    //See data sheet for Flash wait-state
requirement for a given frequency.
    PCM_setCoreVoltageLevel(PCM_VCORE1);
    FlashCtl_setWaitState(FLASH_BANK0, 1);
    FlashCtl_setWaitState(FLASH_BANK1, 1);
    //Set the DCO Frequency.
    //DCO nominal frequencies: 1.5, 3, 6, 12, 24, 48
MHz.
    CS_setDCOFrequency(DCO_FREQ);
    //Init clock signals: MCLK, HSMCLK,
SMCLK.
    //Can be divided by 1, 2, 4, 8, 16, 32, 64, or
128.
    CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT,
CS_CLOCK_DIVIDER_1);
    CS_initClockSignal(CS_HSMCLK, CS_DCOCLK_SELECT,
CS_CLOCK_DIVIDER_8);
    CS_initClockSignal(CS_SMCLK, CS_DCOCLK_SELECT,
CS_CLOCK_DIVIDER_16);
    //Configure P1.0, P2.0, P2.1, P2.2 as
output.
    //P1.0 is connected to a red LED on
LaunchPad.
    //P2.0, P2.1, P2.2 are connected to a RGB
tri-color LED on LaunchPad.
    GPIO_setAsOutputPin(GPIO_PORT_P1,
GPIO_PIN0);
    GPIO_setAsOutputPin(GPIO_PORT_P2,
GPIO_PIN0|GPIO_PIN1|GPIO_PIN2);
    while(1)
    {
        //simple delay
loop
        for(n=0; n<1000000;
n++)
        {
           
//do nothing
        }
       
GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
       
GPIO_setOutputLowOnPin(GPIO_PORT_P2, (~p2_data)&0x07);
       
GPIO_setOutputHighOnPin(GPIO_PORT_P2, p2_data);
        p2_data++;
        if(p2_data >=
0x08)
        {
           
p2_data = 0;
        }
    } //end of while
}
#include <stdint.h> //exact-width integer types
#include <ti\devices\msp432p4xx\driverlib\driverlib.h>
//driver library
#define DCO_FREQ 48e6 //unit: Hz
void main(void)
{
    uint32_t n;
    uint16_t p2_data = 1; //make here
initial value as 1 instead of zero
WDT_A_holdTimer(); //stop watchdog timer
    //Enable FPU for DCO Frequency
calculation.
    FPU_enableModule();
    //Change VCORE to 1 to support a frequency
larger than 24MHz.
    //See data sheet for Flash wait-state
requirement for a given frequency.
    PCM_setCoreVoltageLevel(PCM_VCORE1);
    FlashCtl_setWaitState(FLASH_BANK0, 1);
    FlashCtl_setWaitState(FLASH_BANK1, 1);
    //Set the DCO Frequency.
    //DCO nominal frequencies: 1.5, 3, 6, 12, 24, 48
MHz.
    CS_setDCOFrequency(DCO_FREQ);
    //Init clock signals: MCLK, HSMCLK,
SMCLK.
    //Can be divided by 1, 2, 4, 8, 16, 32, 64, or
128.
    CS_initClockSignal(CS_MCLK, CS_DCOCLK_SELECT,
CS_CLOCK_DIVIDER_1);
    CS_initClockSignal(CS_HSMCLK, CS_DCOCLK_SELECT,
CS_CLOCK_DIVIDER_8);
    CS_initClockSignal(CS_SMCLK, CS_DCOCLK_SELECT,
CS_CLOCK_DIVIDER_16);
    //Configure P2.0, P2.1, P2.2 as output.
  
    //P2.0, P2.1, P2.2 are connected to a RGB
tri-color LED on LaunchPad.
   
/*   GPIO_setAsOutputPin(GPIO_PORT_P1,
GPIO_PIN0);   */   //not
required
GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN0|GPIO_PIN1|GPIO_PIN2); //only this is required now for RGB
while(1)
    {
        //simple delay
loop
        for(n=0; n<1000000;
n++)
        {
           
//do nothing
        }
/* GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0); */ //not required now
/* GPIO_setOutputLowOnPin(GPIO_PORT_P2,
(~p2_data)&0x07); */ //not required
       
GPIO_setOutputHighOnPin(GPIO_PORT_P2, p2_data);
        p2_data *= 2;
        if(p2_data >=
0x04)
        {
           
p2_data = 1;
        }
    } //end of while
}
Note:-
Now we need to glow RGB LEDs one after another. Initially p2_data = 1 i.e 0b000_0001, so LED zero on port2 will glow. After this p2_data changes to twice of it i.e 1 x 2 = 2 = 0b00000010, so LED one on port2 will glow. Next time p2_data = 2x2 = 4 = 0b00000100 i.e LED 2 on port2 will glow.
Now p2_data = 4x2 =8 i.e. greater than 4, so again p2_data = 1. Infinite loop do the same again and again.