📄 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 <iom64v.h>
; #include <macros.h>
; //#include <stdio.h>
; #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
ldi R17,>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
ldi R17,>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 R19,>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 R19,>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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -