Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <msp430.h>
- #include "rand.h"
- unsigned char* dataptr;
- unsigned int data_len = 28;
- unsigned int count = 0;
- unsigned char seq[] = {0x00, 0x00, 0x00, 0x00, \
- 0xE2, 0xFF, 0x00, 0x00, \
- 0xE2, 0xFF, 0x00, 0x00, \
- 0xE2, 0xFF, 0x00, 0x00, \
- 0xE2, 0xFF, 0x00, 0x00, \
- 0xE2, 0xFF, 0x00, 0x00, \
- 0xFF, 0xFF, 0xFF, 0xFF};
- const unsigned int lights[360]={
- 0, 0, 0, 0, 0, 1, 1, 2,\
- 2, 3, 4, 5, 6, 7, 8, 9,\
- 11, 12, 13, 15, 17, 18, 20, 22,\
- 24, 26, 28, 30, 32, 35, 37, 39,\
- 42, 44, 47, 49, 52, 55, 58, 60,\
- 63, 66, 69, 72, 75, 78, 81, 85,\
- 88, 91, 94, 97, 101, 104, 107, 111,\
- 114, 117, 121, 124, 127, 131, 134, 137,\
- 141, 144, 147, 150, 154, 157, 160, 163,\
- 167, 170, 173, 176, 179, 182, 185, 188,\
- 191, 194, 197, 200, 202, 205, 208, 210,\
- 213, 215, 217, 220, 222, 224, 226, 229,\
- 231, 232, 234, 236, 238, 239, 241, 242,\
- 244, 245, 246, 248, 249, 250, 251, 251,\
- 252, 253, 253, 254, 254, 255, 255, 255,\
- 255, 255, 255, 255, 254, 254, 253, 253,\
- 252, 251, 251, 250, 249, 248, 246, 245,\
- 244, 242, 241, 239, 238, 236, 234, 232,\
- 231, 229, 226, 224, 222, 220, 217, 215,\
- 213, 210, 208, 205, 202, 200, 197, 194,\
- 191, 188, 185, 182, 179, 176, 173, 170,\
- 167, 163, 160, 157, 154, 150, 147, 144,\
- 141, 137, 134, 131, 127, 124, 121, 117,\
- 114, 111, 107, 104, 101, 97, 94, 91,\
- 88, 85, 81, 78, 75, 72, 69, 66,\
- 63, 60, 58, 55, 52, 49, 47, 44,\
- 42, 39, 37, 35, 32, 30, 28, 26,\
- 24, 22, 20, 18, 17, 15, 13, 12,\
- 11, 9, 8, 7, 6, 5, 4, 3,\
- 2, 2, 1, 1, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0,\
- 0, 0, 0, 0, 0, 0, 0, 0};
- /**\
- * main.c
- */
- int main(void)
- {
- BCSCTL3 |= LFXT1S_2; //Set VLO as smckl
- WDTCTL = WDT_ADLY_16; //Set multiplier for VLO
- IE1 |= WDTIE; //Set watchdog timer interrupts
- P1DIR |= BIT5 + BIT7; //Set p1.5 and p1.7 as output
- P1SEL = BIT5 + BIT7; //Enable UCB0CLK and UCB0SIMO
- P1SEL2 = BIT5 + BIT7; //Enable UCB0CLK and UCB0SIMO
- UCB0CTL1 |= UCSWRST; // Reset software on USB0
- UCB0CTL0 |= UCMST + UCCKPH + UCSYNC + UCMSB; // Set for 3-pin and 8-bit master
- UCB0CTL1 |= UCSSEL_2; // Set values for SMCLK
- UCB0BR0 |= 0;
- UCB0BR1 = 0;
- UCB0CTL1 &= ~UCSWRST; //Start USCI state machine
- IE2 |= UCB0TXIE; // Enable USCI0 TX interrupt
- __bis_SR_register(GIE); //Enable interrupts
- TA1CCR0 = 1000; // Set timer A1 frequency
- TA1CTL = TASSEL_1 + MC_1; // Set timer multiplier
- dataptr = &seq[0]; // Set pointer to first entry in sequence
- UCB0TXBUF = *dataptr; //Initially push to transmit buffer
- srand(20);
- int last_change = 0;
- //Initialize angle
- int angle = 0;
- // Given step size
- int step_size = rand();
- // Variables for holding the colors values
- int red;
- int blue;
- int green;
- while(1 == 1){
- __bis_SR_register(LPM3_bits); //Enter LPM3 to delay cycle
- int cur_rand = rand();
- step_size = (7*last_change + 16 - cur_rand)>>3;
- if(step_size == last_change){
- angle = 0;
- }
- angle += step_size;
- if(angle > 360){
- angle -= 360;
- }
- if(angle < 0){
- angle += 360;
- }
- red = lights[(angle+120)%360];
- blue = lights[angle];
- green = lights[(angle+240)%360];
- seq[7] = red; //Update the R, G, B message to all be the same color
- seq[6] = green;
- seq[5] = blue;
- seq[11] = red;
- seq[10] = green;
- seq[9] = blue;
- seq[15] = red;
- seq[14] = green;
- seq[13] = blue;
- seq[19] = red;
- seq[18] = green;
- seq[17] = blue;
- seq[23] = red;
- seq[22] = green;
- seq[21] = blue;
- seq[27] = red;
- seq[26] = green;
- seq[25] = blue;
- last_change = step_size;
- UCB0TXBUF = *dataptr; //Add current message to the transmit buffer
- }
- }
- #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
- #pragma vector=USCIAB0TX_VECTOR
- __interrupt void USCIB0TX_ISR(void)
- #elif defined(__GNUC__)
- void __attribute__((interrupt(USCIAB0TX_VECTOR))) USCIB0TX_ISR (void)
- #else
- #error Compiler not supported!
- #endif
- {
- // Send all other sequence elements
- if (count <= data_len){
- UCB0TXBUF = *dataptr;
- dataptr++;
- count++;
- }
- // Reset data pointer and sequence
- else {
- IFG2 &= ~UCB0TXIFG;
- count = 0;
- dataptr = &seq[0];
- }
- }
- #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
- #pragma vector = WDT_VECTOR
- __interrupt void watchdog_timer(void)
- #elif defined(__GNUC__)
- void __attribute__((interrupt(WDT_VECTOR))) watchdog_timer(void)
- #else
- #error Compiler not supported!
- #endif
- {
- __bic_SR_register_on_exit(LPM3_bits);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement