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


	.module test2.c 
	.area text(rom, con, rel) 
	.even 
_t1Init:: 
;  
; #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 
	clr R2 
	out 0x2e,R2 
; 	TCNT1H = 0x79; //setup 
	ldi R24,121 
	out 0x2d,R24 
; 	TCNT1L = 0x02; 
	ldi R24,2 
	out 0x2c,R24 
; 	OCR1AH = 0x00; 
	out 0x2b,R2 
; 	OCR1AL = 0x00; 
	out 0x2a,R2 
; 	OCR1BH = 0x00; 
	out 0x29,R2 
; 	OCR1BL = 0x00; 
	out 0x28,R2 
; 	OCR1CH = 0x00; 
	sts 121,R2 
; 	OCR1CL = 0x00; 
	sts 120,R2 
; 	ICR1H  = 0x00; 
	out 0x27,R2 
; 	ICR1L  = 0x00; 
	out 0x26,R2 
; 	TCCR1A = 0x00; 
	out 0x2f,R2 
; 	TCCR1B = 0x02; //start Timer 
	out 0x2e,R24 
L2: 
	.dbline 0 ; func end 
	ret 
	.area vector(rom, abs) 
	.org 56 
	jmp _fuc 
	.area text(rom, con, rel) 
	.even 
_fuc:: 
	xcall push_lset 
; 	//时钟源选择 
; } 
;  
; //***************************************************************************** 
; //8倍分频, 11.0592M晶振, 定时25ms 
; //#pragma interrupt_handler OSTickISR:15 
;  
; void OSTickISR(void); 
; #pragma interrupt_handler fuc:15 
; void fuc() 
; { 
;  TCNT1H = 0x79; 
	ldi R24,121 
	out 0x2d,R24 
;  TCNT1L = 0x00; 
	clr R2 
	out 0x2c,R2 
;  OSTickISR(); 
	xcall _OSTickISR 
L3: 
	xcall pop_lset 
	.dbline 0 ; func end 
	reti 
	.even 
_init_devices:: 
; } 
; //call this routine to initialize all peripherals 
; void init_devices(void) 
; { 
; 	//stop errant interrupts until set up 
; 	CLI(); 			//disable all interrupts 
	cli 
; 	XDIV  = 0x00; 	//xtal divider 
	clr R2 
	out 0x3c,R2 
; 	XMCRA = 0x00; 	//external memory 
	sts 109,R2 
; 	t1Init(); 
	xcall _t1Init 
; 	 
; 	MCUCR = 0x00; 
	clr R2 
	out 0x35,R2 
; 	EICRA = 0x00; 	//extended ext ints 
	sts 106,R2 
; 	EICRB = 0x00; 	//extended ext ints 
	out 0x3a,R2 
; 	EIMSK = 0x00; 
	out 0x39,R2 
; 	TIMSK = 0x04; 	//timer interrupt sources 
	ldi R24,4 
	out 0x37,R24 
; 	ETIMSK = 0x00; 	//extended timer interrupt sources 
	sts 125,R2 
L4: 
	.dbline 0 ; func end 
	ret 
	.even 
_main:: 
	sbiw R28,3 
; 	//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); 
	ldi R24,16 
	out 0x15,R24 
; 	DDRC=BIT(4); 
	out 0x14,R24 
; 	LED(); 
	in R2,0x15 
	eor R2,R24 
	out 0x15,R2 
; 	OSInit();		// OS init 
	xcall _OSInit 
; 	OSTaskCreate(Task1, 
	ldi R24,7 
	std y+2,R24 
	ldi R24,<_Task1Stack+99 
	ldi R25,>_Task1Stack+99 
	std y+1,R25 
	std y+0,R24 
	clr R18 
	clr R19 
	ldi R16,PL_Task1 
	xcall _OSTaskCreate 
; 				(void *)0, 
; 				&Task1Stack[OS_TASK_DEF_STK_SIZE-1], 
; 				7); 
; 	OSTaskCreate(Task2, 
	ldi R24,6 
	std y+2,R24 
	ldi R24,<_Task2Stack+99 
	ldi R25,>_Task2Stack+99 
	std y+1,R25 
	std y+0,R24 
	clr R18 
	clr R19 
	ldi R16,PL_Task2 
	xcall _OSTaskCreate 
; 				(void *)0, 
; 				&Task2Stack[OS_TASK_DEF_STK_SIZE-1], 
; 				6);  
; 	// init und start tick 
;     init_devices(); 
	xcall _init_devices 
;     uartInit(1); 
	ldi R16,1 
	xcall _uartInit 
;     OSStart();		// start multitasking 
	xcall _OSStart 
L5: 
	adiw R28,3 
	.dbline 0 ; func end 
	ret 
;           data -> R10,R11 
	.even 
_Task1:: 
	xcall push_gset3x 
	movw R10,R16 
;      
; } 
;  
; //***************************************************************************** 
; void Task1(void *data) 
; { 
; 	SEI(); 
	sei 
;    	for (;;) 
L9: 
;  	{ 
;  		LED(); 
	ldi R24,16 
	in R2,0x15 
	eor R2,R24 
	out 0x15,R2 
; 		putStr(1, "task 1!\n\r"); 
	ldi R18,L13 
	ldi R16,1 
	xcall _putStr 
; 		OSTimeDly (20); 
	ldi R16,20 
	ldi R17,0 
	xcall _OSTimeDly 
; 		LED(); 
	ldi R24,16 
	in R2,0x15 
	eor R2,R24 
	out 0x15,R2 
; 		OSTimeDly (20); 
	ldi R16,20 
	ldi R17,0 
	xcall _OSTimeDly 
; 	} 
	xjmp L9 
X0: 
L8: 
	xcall pop_gset3x 
	.dbline 0 ; func end 
	ret 
;           data -> R10,R11 
	.even 
_Task2:: 
	xcall push_gset3x 
	movw R10,R16 
; 			 
; } 
; void Task2(void *data) 
; { 
; 	SEI(); 
	sei 
;  	for (;;) 
L15: 
;  	{ 
; 		putStr(1, "task 2!\n\r"); 
	ldi R18,L19 
	ldi R16,1 
	xcall _putStr 
; 		OSTimeDly (80); 
	ldi R16,80 
	ldi R17,0 
	xcall _OSTimeDly 
; 	} 
	xjmp L15 
X1: 
L14: 
	xcall pop_gset3x 
	.dbline 0 ; func end 
	ret 
	.area bss(ram, con, rel) 
_Task2Stack:: 
	.blkb 100 
_Task1Stack:: 
	.blkb 100 
_state:: 
	.blkb 1 
_s:: 
	.blkb 1 
_m:: 
	.blkb 1 
_h:: 
	.blkb 1 
_display:: 
	.blkb 5 
	.area data(ram, con, rel) 
L19: 
	.blkb 10 
	.area idata 
	.byte 't,'a,'s,'k,32,50,33,10,13,0 
	.area data(ram, con, rel) 
L13: 
	.blkb 10 
	.area idata 
	.byte 't,'a,'s,'k,32,49,33,10,13,0 
	.area data(ram, con, rel) 
	.area func_lit 
PL_Task2:	.word `_Task2 
PL_Task1:	.word `_Task1