Advertisement
Guest User

Untitled

a guest
Mar 8th, 2012
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.59 KB | None | 0 0
  1. // Nathan Zimmerman
  2. // MSP430G2553 GUI COMM
  3. // 3/8/12
  4. //Rev 0.3
  5.  
  6. // A GUI to control all basic IO functions on the msp430G2553
  7.  
  8. #include <msp430g2553.h>
  9. #include "stdbool.h"
  10.  
  11.  
  12. ////////////////Defines////////////////
  13.  
  14. #define Green_LED   BIT6
  15. #define Button      BIT3
  16. #define ERROR       BIT0
  17.  
  18. unsigned int buffer = 0;
  19. unsigned int command = 0;
  20. unsigned int sub_command = 0;
  21. unsigned int data1 =0;
  22. unsigned int data2 =0;
  23. bool Command_Ready = false;
  24. unsigned int comm_p=0;
  25.  
  26. ////////////////Function Protos////////////////
  27.  
  28. void TX(char *tx_message);  // Transmit char string
  29. void DIR_P1(); //Set P1DIR
  30. void OUT_P1(); //Set P1OUT
  31. void REN_P1();
  32. void SEL_P1();
  33. void SEL2_P1();
  34. void DIR_P2();
  35. void OUT_P2();
  36. void REN_P2();
  37. void SEL_P2();
  38. void SEL2_P2();
  39.  
  40.  
  41. void process_command();     //Main function for doing actions based upon recieved data
  42.  
  43. ////////////////Main Program////////////////
  44.  
  45. void main(void)
  46. {
  47. //unsigned char buffer[2];
  48.  
  49.  
  50. WDTCTL = WDTPW + WDTHOLD;           // Stop WDT
  51.  
  52. BCSCTL1 = CALBC1_1MHZ;              // Set DCO to 1MHz
  53. DCOCTL = CALDCO_1MHZ;
  54.  
  55. ////////////////USCI setup////////////////
  56.  
  57.  
  58. P1SEL = BIT1 + BIT2;                // Set P1.1 to RXD and P1.2 to TXD
  59. P1SEL2 = BIT1 + BIT2;               //
  60.  
  61. UCA0CTL1 |= UCSSEL_2;               // Have USCI use SMCLK AKA 1MHz main CLK
  62.  
  63. UCA0BR0 = 104;                      // Baud: 9600, N= CLK/Baud, N= 10^6 / 9600
  64.  
  65. UCA0BR1 = 0;                        // Set upper half of baud select to 0
  66.  
  67. UCA0MCTL = UCBRS_1;                 // Modulation UCBRSx = 1
  68.  
  69. UCA0CTL1 &= ~UCSWRST;               // Start USCI
  70.  
  71. IE2 |= UCA0RXIE;                    //Enable interrupt for USCI
  72.  
  73. P1OUT = BIT1 + BIT2;                //Debug LEDs
  74.  
  75.  __enable_interrupt();              //Guess
  76.  
  77. ////////////////General GPIO Defines////////////////
  78.  
  79.  
  80. ////////////////Main Loop////////////////
  81.  
  82.  
  83. while(1)
  84. {
  85.     process_command();
  86. }
  87.  
  88.  
  89.  
  90. } // End Main Function
  91.  
  92.  
  93. ////////////////Interrupts////////////////
  94.  
  95. #pragma vector=USCIAB0RX_VECTOR
  96. __interrupt void USCI0RX_ISR(void)
  97. {
  98.     buffer =UCA0RXBUF;
  99.  
  100.     switch(comm_p)
  101.     {
  102.     case 0:
  103.         command = buffer;
  104.         comm_p++;
  105.         break;
  106.  
  107.     case 1:
  108.         data1 = buffer;
  109.         comm_p++;
  110.         break;
  111.  
  112.     case 2:
  113.         data2 = buffer;
  114.         Command_Ready = true;
  115.         comm_p++;
  116.         break;
  117.  
  118.     default:
  119.         Command_Ready = false;
  120.     } // End Switch
  121.  
  122. }
  123.  
  124. ////////////////Functions////////////////
  125.  
  126. void TX(char *tx_message)
  127. {
  128.     unsigned int i=0; //Define end of string loop int
  129.     char *message; // message variable
  130.     unsigned int message_num; // define ascii int version variable
  131.     message = tx_message; // move tx_message into message
  132.  
  133.     while(1)
  134.     {
  135.  
  136.  
  137.     message_num = (int)message[i]; //Cast string char into a int variable
  138.  
  139.     UCA0TXBUF = message_num; // write INT to TX buffer
  140.  
  141.     i++; // increase string index
  142.  
  143.     __delay_cycles(1500); //transmission delay
  144.  
  145.     if(i>20) //prevent infinite transmit
  146.     {
  147.     //P1OUT |= ERROR;
  148.     break;
  149.     }
  150.  
  151.     if(message[i]==0) // If end of input string is reached, break loop.
  152.     {
  153.         __delay_cycles(500);
  154.         UCA0TXBUF = 0;
  155.         break;
  156.     }
  157.  
  158.     } // End TX Main While Loop
  159. } // End TX Function
  160.  
  161.  
  162.  
  163.  
  164. ////////////////DIR_P1()////////////////
  165.  
  166. void DIR_P1()
  167. {
  168.  
  169. if((data1 & BIT0)== BIT0)
  170. {
  171.     P1DIR &=(~data2)|(BIT1 + BIT2);
  172. }
  173. else
  174. {
  175.     P1DIR |=data2;
  176. }
  177.  
  178. } // End Function
  179.  
  180.  
  181. ///////////////////////////////////////////
  182.  
  183.  
  184. ////////////////OUT_P1()////////////////
  185.  
  186. void OUT_P1()
  187. {
  188.  
  189. if((data1 & BIT0)== BIT0)
  190. {
  191.     P1OUT &=(~data2)|(BIT1 + BIT2);
  192. }
  193. else
  194. {
  195.     P1OUT |=data2;
  196. }
  197.  
  198. } // End Function
  199.  
  200. ///////////////////////////////////////////
  201.  
  202. ////////////////REN_P1()////////////////
  203.  
  204. void REN_P1()
  205. {
  206.  
  207. if((data1 & BIT0)== BIT0)
  208. {
  209.     P1REN &=(~data2)|(BIT1 + BIT2);
  210. }
  211. else
  212. {
  213.     P1REN |=data2;
  214. }
  215.  
  216. } // End Function
  217.  
  218. ///////////////////////////////////////////
  219.  
  220. ////////////////SEL1_P1()////////////////
  221.  
  222. void SEL_P1()
  223. {
  224.  
  225. if((data1 & BIT0)== BIT0)
  226. {
  227.     P1SEL &=(~data2)|(BIT1 + BIT2);
  228. }
  229. else
  230. {
  231.     P1SEL |=data2;
  232. }
  233.  
  234. } // End Function
  235.  
  236. ///////////////////////////////////////////
  237.  
  238. ////////////////SEL2_P1()////////////////
  239.  
  240. void SEL2_P1()
  241. {
  242.  
  243. if((data1 & BIT0)== BIT0)
  244. {
  245.     P1SEL2 &=(~data2)|(BIT1 + BIT2);
  246. }
  247. else
  248. {
  249.     P1SEL2 |=data2;
  250. }
  251.  
  252. } // End Function
  253.  
  254. ///////////////////////////////////////////
  255.  
  256. ////////////////DIR_P2()////////////////
  257.  
  258. void DIR_P2()
  259. {
  260.  
  261. if((data1 & BIT0)== BIT0)
  262. {
  263.     P2DIR &=(~data2);
  264. }
  265. else
  266. {
  267.     P2DIR |=data2;
  268. }
  269.  
  270. } // End Function
  271.  
  272.  
  273. ////////////////OUT_P2()////////////////
  274.  
  275. void OUT_P2()
  276. {
  277.  
  278. if((data1 & BIT0)== BIT0)
  279. {
  280.     P2OUT &=(~data2)|(BIT1 + BIT2);
  281. }
  282. else
  283. {
  284.     P2OUT |=data2;
  285. }
  286.  
  287. } // End Function
  288.  
  289. ///////////////////////////////////////////
  290.  
  291. ////////////////REN_P2()////////////////
  292.  
  293. void REN_P2()
  294. {
  295.  
  296. if((data1 & BIT0)== BIT0)
  297. {
  298.     P2REN &=(~data2)|(BIT1 + BIT2);
  299. }
  300. else
  301. {
  302.     P2REN |=data2;
  303. }
  304.  
  305. } // End Function
  306.  
  307. ///////////////////////////////////////////
  308.  
  309. ////////////////SEL1_P2()////////////////
  310.  
  311. void SEL_P2()
  312. {
  313.  
  314. if((data1 & BIT0)== BIT0)
  315. {
  316.     P2SEL &=(~data2)|(BIT1 + BIT2);
  317. }
  318. else
  319. {
  320.     P2SEL |=data2;
  321. }
  322.  
  323. } // End Function
  324.  
  325. ///////////////////////////////////////////
  326.  
  327. ////////////////SEL2_P2()////////////////
  328.  
  329. void SEL2_P2()
  330. {
  331.  
  332. if((data1 & BIT0)== BIT0)
  333. {
  334.     P2SEL2 &=(~data2)|(BIT1 + BIT2);
  335. }
  336. else
  337. {
  338.     P2SEL2 |=data2;
  339. }
  340.  
  341. } // End Function
  342.  
  343. ///////////////////////////////////////////
  344.  
  345. ////////////////process_command////////////////
  346.  
  347. void process_command()  // Main processing function
  348. {
  349.  
  350. while(!(Command_Ready));    //Wait till 2 packets are recieved
  351. Command_Ready = false;
  352. sub_command = command;
  353. command = 0;
  354.  
  355.     switch(sub_command)
  356.     {
  357.  
  358.     case 0x0:                   // Command has already been proccessed
  359.  
  360.         TX("ERORR");
  361.         break;
  362.  
  363.     case 0x1:               // IF Command = Connect
  364.         TX("Connected");
  365.         command = 0;
  366.         comm_p=0;
  367.         break;
  368.  
  369.     case 0x2:   // IF command = digital output port 1
  370.         DIR_P1();
  371.         TX("DIR");
  372.         command = 0;
  373.         comm_p = 0;
  374.         break;
  375.  
  376.     case 0x3:
  377.         OUT_P1();
  378.         TX("OUT");
  379.         command = 0;
  380.         comm_p = 0;
  381.         break;
  382.  
  383.     case 0x4:
  384.         REN_P1();
  385.         TX("REN");
  386.         command = 0;
  387.         comm_p = 0;
  388.         break;
  389.  
  390.     case 0x5:
  391.         SEL_P1();
  392.         TX("SEL");
  393.         command = 0;
  394.         comm_p = 0;
  395.         break;
  396.  
  397.     case 0x6:
  398.         SEL2_P1();
  399.         TX("SEL2");
  400.         command = 0;
  401.         comm_p = 0;
  402.         break;
  403.  
  404.     case 0x7:
  405.         DIR_P2();
  406.         TX("DIR2");
  407.         command = 0;
  408.         comm_p = 0;
  409.         break;
  410.  
  411.     case 0x8:
  412.         OUT_P2();
  413.         TX("OUT2");
  414.         command = 0;
  415.         comm_p = 0;
  416.         break;
  417.  
  418.     case 0x9:
  419.         REN_P2();
  420.         TX("REN2");
  421.         command = 0;
  422.         comm_p = 0;
  423.         break;
  424.  
  425.     case 0xA:
  426.         SEL_P2();
  427.         TX("SEL1p2");
  428.         command = 0;
  429.         comm_p = 0;
  430.         break;
  431.  
  432.     case 0xB:
  433.         SEL2_P2();
  434.         TX("SEL2p2");
  435.         command = 0;
  436.         comm_p = 0;
  437.         break;
  438.  
  439.  
  440.     default:
  441.     command =0;
  442.     TX("ERORR");            //Error Case
  443.  
  444.     } // End Main Switch
  445.  
  446. } // End Sub Command Function
  447.  
  448. ///////////////////////////////////////////
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement