Advertisement
Guest User

Untitled

a guest
Sep 30th, 2016
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.47 KB | None | 0 0
  1. /*
  2. Mitch Costa
  3. September 16th 2016
  4. Built with IAR Embedded Workbench Version: V7.3.1.3987 (6.40.1)
  5. */
  6.  
  7. #include "msp430.h"
  8. #include "functions.h"
  9. #include "macros.h"
  10.  
  11. volatile unsigned int Time_Sequence;
  12. volatile char one_time;
  13. volatile unsigned int five_msec_count;
  14. volatile unsigned int five_msec_flag;
  15. volatile unsigned int fifty_msec_flag = 0;
  16.  
  17. /*
  18. Global Variables Used
  19. None
  20. Local Variables
  21. None
  22. Arguments Passed
  23. None
  24. Arguments Returned
  25. None
  26. */
  27. void Init_Timers(void){
  28. //------------------------------------------------------------------------------
  29. // Timer Configurations
  30. //------------------------------------------------------------------------------
  31. Init_Timer_A0(); //
  32. // Init_Timer_A1(); //
  33. // Init_Timer_B0(); //
  34. // Init_Timer_B1(); //
  35. // Init_Timer_B2(); // Required for provided compiled code to work
  36. //------------------------------------------------------------------------------
  37. }
  38.  
  39.  
  40. /*
  41. Global Variables Used
  42. Time_Sequence
  43. one_time
  44. five_msec_count
  45. Local Variables
  46. None
  47. Arguments Passed
  48. None
  49. Arguments Returned
  50. None
  51. */
  52. void Timer_code(void){
  53. //------------------------------------------------------------------------------
  54. // Timer A0 interrupt code
  55. //------------------------------------------------------------------------------
  56. Time_Sequence++;
  57. one_time = Pos_1;
  58. if (five_msec_count < One_Sec){
  59. five_msec_count++;
  60. }
  61. //------------------------------------------------------------------------------
  62. }
  63.  
  64.  
  65. /*
  66. Global Variables Used
  67. five_msec_count
  68. Local Variables
  69. None
  70. Arguments Passed
  71. fivemsec
  72. Arguments Returned
  73. None
  74. */
  75. /*
  76. void five_msec_sleep(unsigned int fivemsec){
  77. //------------------------------------------------------------------------------
  78. //Each count passed is at least x times 5 milliseconds
  79. five_msec_count = Reset1;
  80. while(fivemsec > (five_msec_count+Pos_1));
  81. //------------------------------------------------------------------------------
  82. }
  83. */
  84.  
  85. void five_msec_sleep(unsigned int fivemsec){
  86. five_msec_count = Reset1;
  87. int old_five_msec_flag = five_msec_flag;
  88. while(fivemsec>(five_msec_count))
  89. {
  90. if(old_five_msec_flag != five_msec_flag){
  91. five_msec_count++;
  92. old_five_msec_flag = five_msec_flag;
  93. }
  94.  
  95. }
  96.  
  97. }
  98.  
  99. //------------------------------------------------------------------------------
  100. // Timer A0 initialization sets up both A0_0 and A0_1-A0_2
  101. void Init_Timer_A0(void) {
  102. TA0CTL = TASSEL__SMCLK; // SMCLK source
  103. TA0CTL |= TACLR; // Resets TA0R, clock divider, count direction
  104. TA0CTL |= MC__CONTINOUS; // Continuous up
  105. TA0CTL |= ID__2; // Divide clock by 2
  106. TA0CTL &= ~TAIE; // Disable Overflow Interrupt
  107. TA0CTL &= ~TAIFG; // Clear Overflow Interrupt flag
  108. TA0EX0 = TAIDEX_7; // Divide clock by an additional 8
  109. TA0CCR0 = TA0CCR0_INTERVAL; // CCR0
  110. TA0CCTL0 |= CCIE; // CCR0 enable interrupt
  111. TA0CCR1 = TA0CCR1_INTERVAL; // CCR1
  112. TA0CCTL1 |= CCIE; // CCR1 enable interrupt
  113. // TA0CCR2 = TA0CCR2_INTERVAL; // CCR2
  114. // TA0CCTL2 |= CCIE; // CCR2 enable interrupt
  115. }
  116. //--
  117.  
  118. //------------------------------------------------------------------------------
  119. // TimerA0 0 Interrupt handler
  120. #pragma vector = TIMER0_A0_VECTOR
  121. __interrupt void Timer0_A0_ISR(void){
  122. if(five_msec_flag == 0){
  123. five_msec_flag = 1;
  124. }
  125. else{
  126. five_msec_flag = 0;
  127. }
  128. fifty_msec_flag++;
  129. TA0CCR0 += TA0CCR0_INTERVAL; // Add Offset to TACCR0
  130. }
  131. //----------------------------------------------------------------------------
  132.  
  133. //------------------------------------------------------------------------------
  134. // TimerA0 0 Interrupt handler
  135. #pragma vector = TIMER1_A0_VECTOR
  136. __interrupt void Timer1_A0_ISR(void){
  137. fifty_msec_flag++;
  138. TA0CCR1 += TA0CCR1_INTERVAL; // Add Offset to TACCR0
  139. }
  140. //----------------------------------------------------------------------------
  141.  
  142.  
  143. // TimerA0 1-2, Overflow Interrupt Vector (TAIV) handler
  144. #pragma vector=TIMER0_A1_VECTOR
  145. __interrupt void TIMER0_A1_ISR(void){
  146. switch(__even_in_range(TA0IV,14)){
  147. case 0: break; // No interrupt
  148. case 2: // CCR1 not used
  149. //...... Add What you need happen in the interrupt ......
  150. //TA0CCR1 += TA0CCR1_INTERVAL; // Add Offset to TACCR1
  151. break;
  152. case 4: // CCR2 not used
  153. //...... Add What you need happen in the interrupt ......
  154. //TA0CCR2 += TA0CCR2_INTERVAL; // Add Offset to TACCR2
  155. break;
  156. case 14: // overflow
  157. //...... Add What you need happen in the interrupt ......
  158. break;
  159. default: break;
  160. }
  161. }
  162.  
  163. //----------------------------------------------------------------------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement