Advertisement
Guest User

Untitled

a guest
Dec 1st, 2015
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.47 KB | None | 0 0
  1. /*-------------------------------------------------------------*
  2. * 4b: "uCOS - timer handling" *
  3. *-------------------------------------------------------------*/
  4.  
  5. /***************************************************************
  6. * "AVR ExperimentBoard" port assignment information:
  7. ***************************************************************
  8. *
  9. * LED0(P):PortC.0 LED4(P):PortC.4
  10. * LED1(P):PortC.1 LED5(P):PortC.5
  11. * LED2(S):PortC.2 LED6(S):PortC.6
  12. * LED3(Z):PortC.3 LED7(Z):PortC.7 INT:PortE.4
  13. *
  14. * SW0:PortG.0 SW1:PortG.1 SW2:PortG.4 SW3:PortG.3
  15. *
  16. * BT0:PortE.5 BT1:PortE.6 BT2:PortE.7 BT3:PortB.7
  17. *
  18. * INT[4-7] is on PORTE.[4-7]
  19. *
  20. ***************************************************************
  21. *
  22. * AIN:PortF.0 NTK:PortF.1 OPTO:PortF.2 POT:PortF.3
  23. *
  24. ***************************************************************
  25. *
  26. * LCD1(VSS) = GND LCD9(DB2): -
  27. * LCD2(VDD) = VCC LCD10(DB3): -
  28. * LCD3(VO ) = GND LCD11(DB4): PortA.4
  29. * LCD4(RS ) = PortA.0 LCD12(DB5): PortA.5
  30. * LCD5(R/W) = GND LCD13(DB6): PortA.6
  31. * LCD6(E ) = PortA.1 LCD14(DB7): PortA.7
  32. * LCD7(DB0) = - LCD15(BLA): VCC
  33. * LCD8(DB1) = - LCD16(BLK): PortB.5 (1=Backlight ON)
  34. *
  35. ***************************************************************
  36. *
  37. * CPU frequency: 11,0592 MHz
  38. *
  39. ***************************************************************/
  40.  
  41. /******************************************************************
  42. * THE COMMON INCLUDE FILE *
  43. ******************************************************************/
  44.  
  45. #include "includes.h"
  46.  
  47. /******************************************************************
  48. * CONSTANTS *
  49. ******************************************************************/
  50.  
  51. // Stack sizes
  52. #define TASK1_STK_SIZE 128
  53. #define TASK2_STK_SIZE 128
  54. #define TASK3_STK_SIZE 128
  55.  
  56. /******************************************************************
  57. * Task priorities: *
  58. * - the lower number means the greater priority! *
  59. * - the first four (0..3) and *
  60. * the last four (OS_LOWEST_PRIO-3..OS_LOWEST_PRIO) *
  61. * priority levels are reserved by the OS *
  62. ******************************************************************/
  63. #define TASK1_PRIO 10
  64. #define TASK2_PRIO 15
  65. #define TASK3_PRIO 16
  66.  
  67. /******************************************************************
  68. * VARIABLES *
  69. ******************************************************************/
  70.  
  71. // Stacks
  72. OS_STK Task1Stk[TASK1_STK_SIZE];
  73. OS_STK Task2Stk[TASK2_STK_SIZE];
  74. OS_STK Task3Stk[TASK3_STK_SIZE];
  75.  
  76.  
  77.  
  78. /******************************************************************
  79. * FUNCTION DECLARATIONS *
  80. ******************************************************************/
  81.  
  82. void Task1(void *data);
  83. void Task2(void *data);
  84. void Task3(void *data);
  85.  
  86. volatile int dir;
  87. OS_EVENT* szemafor;
  88.  
  89. /******************************************************************
  90. * MAIN *
  91. ******************************************************************/
  92.  
  93. int main (void)
  94. {
  95. /* Initializing inner OS variables, creating idle task, ... */
  96. OSInit();
  97.  
  98. szemafor=OSSemCreate(1);
  99.  
  100. /* Creating the initializing task */
  101. OSTaskCreate(Task1, NULL, &Task1Stk[TASK1_STK_SIZE - 1], TASK1_PRIO);
  102.  
  103. /* Start multitasking. ( OSStart() never returns! ) */
  104. OSStart();
  105.  
  106. return 0;
  107. }
  108.  
  109. /******************************************************************
  110. * Tasks *
  111. ******************************************************************/
  112.  
  113. /* Initialize timer interrupt AND create other tasks */
  114. void Task1(void *data) {
  115.  
  116. /* Initialize timer interrupt */
  117. OS_ENTER_CRITICAL();
  118. TCCR0=0x07; // Set TIMER0 prescaler to CLK/1024
  119. TIMSK=_BV(TOIE0); // Enable TIMER0 overflow interrupt
  120. // Set the counter initial value (it is reloaded by the OS
  121. // with the same value upon every timer IT):
  122. TCNT0=256-(CPU_CLOCK_HZ/OS_TICKS_PER_SEC/1024);
  123. OS_EXIT_CRITICAL();
  124.  
  125. LCD_init();
  126. LCD_light_on();
  127. stdout=&LCD_stdout;
  128. printf("asdasd");
  129.  
  130. /* Create other tasks */
  131. OSTaskCreate(Task2, NULL, &Task2Stk[TASK2_STK_SIZE - 1], TASK2_PRIO);
  132. OSTaskCreate(Task3, NULL, &Task3Stk[TASK3_STK_SIZE - 1], TASK3_PRIO);
  133.  
  134.  
  135. /* Delete current task (single-shot task architecture) */
  136. OSTaskDel(TASK1_PRIO);
  137. }
  138.  
  139.  
  140. void Task2(void *data) {
  141. DDRC=255;
  142.  
  143. while(1){
  144. OSSemPend(szemafor,0,NULL);
  145. if(dir){
  146. if(PORTC==0x80)PORTC=1;
  147. else PORTC<<==1;
  148. }
  149. else{
  150. if(PORTC==1)PORTC=0x80;
  151. else PORTC>>==1;
  152. }
  153. OSSemPost(szemafor);
  154. OSTimeDlyHMSM(0,0,0,400);
  155. }
  156. }
  157.  
  158.  
  159. void Task3(void *data) {
  160. int prev=0x20;
  161. int mask=0x20;
  162. while(1){
  163. OSTimeDlyHMSM(0,0,0,10);
  164. if(prev==0 && (PINE&mask)==0x20)
  165. OSSemPend(szemafor,0,NULL);
  166. if(dir)=0;else dir=0;
  167. OSSemPost(szemafor);
  168. prev=PINE&mask;
  169.  
  170. }
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement