www.pudn.com > iccavrUCOS_m64.rar > test2._c


 
#define Test1_GLOBALS 
#include "includes.h" 
 
//****************************************************************************** 
// Constants 
#define TaskStartPrio	10		// Task-Prioritaeten 
//***************************************************************************** 
// Variablen 
INT8U    display[5]; 
INT8U    h,m,s,state; 
OS_STK	Task1Stack[OS_TASK_DEF_STK_SIZE];		// startup task stack 
OS_STK	Task2Stack[OS_TASK_DEF_STK_SIZE]; 
//ICC-AVR application builder : 2003-12-28 21:52:56 
// Target : M8 
// Crystal: 8.0000Mhz 
 
#include  
#include  
//#include  
#include "uart.h" 
 
//***************************************************************************** 
// Prototypes 
/* 
#define BAUD 	9600 
#define CRYSTAL	11059200 
#define BAUD_SETTING	(unsigned int)((unsigned long)CRYSTAL/(16*(unsigned long)BAUD)-1) 
#define BAUD_H	(unsigned char)(BAUD_SETTING>>8) 
#define BAUD_L	(unsigned char)(BAUD_SETTING) 
void uartInit(uint8 uartNum) 
{ 
	if(1==uartNum) 
	{ 
		 UCSR1B = 0x00; //disable while setting baud rate 
	 	 UCSR1A = 0x00; 
	 	 UCSR1C = 0x06; 
	 	 UBRR1L = BAUD_L; //set baud rate lo 
	 	 UBRR1H = BAUD_H; //set baud rate hi 
	 	 UCSR1B = 0x18; 
	 	 ///共有3个中断源, 接受, 发送, 寄存器空, 对应此寄存器的高3位 
	}	 
	else 
	{ 
		UCSR0B = 0x00; //disable while setting baud rate 
	 	UCSR0A = 0x00; 
		UCSR0C = 0x06;	//set frame format, 8 bits, 2stop] 
		UBRR0H = BAUD_H; 
		UBRR0L = BAUD_L; 
		UCSR0B = 0x18;	//enable receive and transmite 
		 
	}	 
} 
void putChar(uint8 num, uint8 dat) 
{ 
	ENTER_CRITICAL(); 
	if(1==num) 
	{ 
		UDR1 = dat; 
		while(!(UCSR1A&BIT(TXC1)));	  //发送寄存器空 
		UCSR1A|=BIT(TXC1); 
	} 
	else 
	{ 
		UDR0 = dat; 
		while(!(UCSR0A&BIT(TXC0))); 
		UCSR0A|=BIT(TXC0); 
	} 
	EXIT_CRITICAL(); 
} 
*/	 
//***************************************************************************** 
//			TickISR 
//***************************************************************************** 
// WGM: 0) Normal, TOP=0xFFFF 
// desired value: 1Hz 
// actual value: Out of range 
void t1Init(void) 
{ 
	TCCR1B = 0x00; //stop 
	TCNT1H = 0x79; //setup 
	TCNT1L = 0x02; 
	OCR1AH = 0x00; 
	OCR1AL = 0x00; 
	OCR1BH = 0x00; 
	OCR1BL = 0x00; 
	OCR1CH = 0x00; 
	OCR1CL = 0x00; 
	ICR1H  = 0x00; 
	ICR1L  = 0x00; 
	TCCR1A = 0x00; 
	TCCR1B = 0x02; //start Timer 
	//时钟源选择 
} 
 
//***************************************************************************** 
//8倍分频, 11.0592M晶振, 定时25ms 
//#pragma interrupt_handler OSTickISR:15 
 
void OSTickISR(void); 
#pragma interrupt_handler fuc:15 
void fuc() 
{ 
 TCNT1H = 0x79; 
 TCNT1L = 0x00; 
 OSTickISR(); 
} 
//call this routine to initialize all peripherals 
void init_devices(void) 
{ 
	//stop errant interrupts until set up 
	CLI(); 			//disable all interrupts 
	XDIV  = 0x00; 	//xtal divider 
	XMCRA = 0x00; 	//external memory 
	t1Init(); 
	 
	MCUCR = 0x00; 
	EICRA = 0x00; 	//extended ext ints 
	EICRB = 0x00; 	//extended ext ints 
	EIMSK = 0x00; 
	TIMSK = 0x04; 	//timer interrupt sources 
	ETIMSK = 0x00; 	//extended timer interrupt sources 
	//SEI(); 			//re-enable interrupts 
} 
 
void Task1(void *pdata); 
void Task2(void *pdata); 
 
//***************************************************************************** 
// Start 
#define LED()	 	PORTC = PORTC^BIT(4); 
void main(void){ 
	PORTC=BIT(4); 
	DDRC=BIT(4); 
	LED(); 
	OSInit();		// OS init 
	OSTaskCreate(Task1, 
				(void *)0, 
				&Task1Stack[OS_TASK_DEF_STK_SIZE-1], 
				7); 
	OSTaskCreate(Task2, 
				(void *)0, 
				&Task2Stack[OS_TASK_DEF_STK_SIZE-1], 
				6);  
	// init und start tick 
    init_devices(); 
    uartInit(1); 
    OSStart();		// start multitasking 
     
} 
 
//***************************************************************************** 
void Task1(void *data) 
{ 
	SEI(); 
   	for (;;) 
 	{ 
 		LED(); 
		putStr(1, "task 1!\n\r"); 
		OSTimeDly (20); 
	} 
			 
} 
void Task2(void *data) 
{ 
	SEI(); 
 	for (;;) 
 	{ 
		putStr(1, "task 2!\n\r"); 
		OSTimeDly (40); 
	} 
}