Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*-------------------------------------------------------------*
- * 4b: "uCOS - timer handling" *
- *-------------------------------------------------------------*/
- /***************************************************************
- * "AVR ExperimentBoard" port assignment information:
- ***************************************************************
- *
- * LED0(P):PortC.0 LED4(P):PortC.4
- * LED1(P):PortC.1 LED5(P):PortC.5
- * LED2(S):PortC.2 LED6(S):PortC.6
- * LED3(Z):PortC.3 LED7(Z):PortC.7 INT:PortE.4
- *
- * SW0:PortG.0 SW1:PortG.1 SW2:PortG.4 SW3:PortG.3
- *
- * BT0:PortE.5 BT1:PortE.6 BT2:PortE.7 BT3:PortB.7
- *
- * INT[4-7] is on PORTE.[4-7]
- *
- ***************************************************************
- *
- * AIN:PortF.0 NTK:PortF.1 OPTO:PortF.2 POT:PortF.3
- *
- ***************************************************************
- *
- * LCD1(VSS) = GND LCD9(DB2): -
- * LCD2(VDD) = VCC LCD10(DB3): -
- * LCD3(VO ) = GND LCD11(DB4): PortA.4
- * LCD4(RS ) = PortA.0 LCD12(DB5): PortA.5
- * LCD5(R/W) = GND LCD13(DB6): PortA.6
- * LCD6(E ) = PortA.1 LCD14(DB7): PortA.7
- * LCD7(DB0) = - LCD15(BLA): VCC
- * LCD8(DB1) = - LCD16(BLK): PortB.5 (1=Backlight ON)
- *
- ***************************************************************
- *
- * CPU frequency: 11,0592 MHz
- *
- ***************************************************************/
- /******************************************************************
- * THE COMMON INCLUDE FILE *
- ******************************************************************/
- #include "includes.h"
- /******************************************************************
- * CONSTANTS *
- ******************************************************************/
- // Stack sizes
- #define TASK1_STK_SIZE 128
- #define TASK2_STK_SIZE 128
- #define TASK3_STK_SIZE 128
- /******************************************************************
- * Task priorities: *
- * - the lower number means the greater priority! *
- * - the first four (0..3) and *
- * the last four (OS_LOWEST_PRIO-3..OS_LOWEST_PRIO) *
- * priority levels are reserved by the OS *
- ******************************************************************/
- #define TASK1_PRIO 10
- #define TASK2_PRIO 15
- #define TASK3_PRIO 16
- /******************************************************************
- * VARIABLES *
- ******************************************************************/
- // Stacks
- OS_STK Task1Stk[TASK1_STK_SIZE];
- OS_STK Task2Stk[TASK2_STK_SIZE];
- OS_STK Task3Stk[TASK3_STK_SIZE];
- /******************************************************************
- * FUNCTION DECLARATIONS *
- ******************************************************************/
- void Task1(void *data);
- void Task2(void *data);
- void Task3(void *data);
- volatile int dir;
- OS_EVENT* szemafor;
- /******************************************************************
- * MAIN *
- ******************************************************************/
- int main (void)
- {
- /* Initializing inner OS variables, creating idle task, ... */
- OSInit();
- szemafor=OSSemCreate(1);
- /* Creating the initializing task */
- OSTaskCreate(Task1, NULL, &Task1Stk[TASK1_STK_SIZE - 1], TASK1_PRIO);
- /* Start multitasking. ( OSStart() never returns! ) */
- OSStart();
- return 0;
- }
- /******************************************************************
- * Tasks *
- ******************************************************************/
- /* Initialize timer interrupt AND create other tasks */
- void Task1(void *data) {
- /* Initialize timer interrupt */
- OS_ENTER_CRITICAL();
- TCCR0=0x07; // Set TIMER0 prescaler to CLK/1024
- TIMSK=_BV(TOIE0); // Enable TIMER0 overflow interrupt
- // Set the counter initial value (it is reloaded by the OS
- // with the same value upon every timer IT):
- TCNT0=256-(CPU_CLOCK_HZ/OS_TICKS_PER_SEC/1024);
- OS_EXIT_CRITICAL();
- LCD_init();
- LCD_light_on();
- stdout=&LCD_stdout;
- printf("asdasd");
- /* Create other tasks */
- OSTaskCreate(Task2, NULL, &Task2Stk[TASK2_STK_SIZE - 1], TASK2_PRIO);
- OSTaskCreate(Task3, NULL, &Task3Stk[TASK3_STK_SIZE - 1], TASK3_PRIO);
- /* Delete current task (single-shot task architecture) */
- OSTaskDel(TASK1_PRIO);
- }
- void Task2(void *data) {
- DDRC=255;
- while(1){
- OSSemPend(szemafor,0,NULL);
- if(dir){
- if(PORTC==0x80)PORTC=1;
- else PORTC<<==1;
- }
- else{
- if(PORTC==1)PORTC=0x80;
- else PORTC>>==1;
- }
- OSSemPost(szemafor);
- OSTimeDlyHMSM(0,0,0,400);
- }
- }
- void Task3(void *data) {
- int prev=0x20;
- int mask=0x20;
- while(1){
- OSTimeDlyHMSM(0,0,0,10);
- if(prev==0 && (PINE&mask)==0x20)
- OSSemPend(szemafor,0,NULL);
- if(dir)=0;else dir=0;
- OSSemPost(szemafor);
- prev=PINE&mask;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement