📄 atmega32.lst
字号:
__start:
__text_start:
0030 E5CF LDI R28,0x5F
0031 E0D4 LDI R29,4
0032 BFCD OUT 0x3D,R28
0033 BFDE OUT 0x3E,R29
0034 51C4 SUBI R28,0x14
0035 40D0 SBCI R29,0
0036 EA0A LDI R16,0xAA
0037 8308 STD Y+0,R16
0038 2400 CLR R0
0039 E6E0 LDI R30,0x60
003A E0F0 LDI R31,0
003B E010 LDI R17,0
003C 3BE6 CPI R30,0xB6
003D 07F1 CPC R31,R17
003E F011 BEQ 0x0041
003F 9201 ST R0,Z+
0040 CFFB RJMP 0x003C
0041 8300 STD Z+0,R16
0042 E6E0 LDI R30,0x60
0043 E0F0 LDI R31,0
0044 E6A0 LDI R26,0x60
0045 E0B0 LDI R27,0
0046 E010 LDI R17,0
0047 36E0 CPI R30,0x60
0048 07F1 CPC R31,R17
0049 F021 BEQ 0x004E
004A 95C8 LPM
004B 9631 ADIW R30,1
004C 920D ST R0,X+
004D CFF9 RJMP 0x0047
004E 940E00AF CALL _main
_exit:
0050 CFFF RJMP _exit
_TaskA:
i --> R20
0051 940E0530 CALL push_gset1
FILE: E:\PROGRAMS\controller\salvo-M32\main.c
(0001) /************************************************************
(0002) Copyright (C) 1995-2002 Pumpkin, Inc. and its
(0003) Licensor(s). Freely distributable.
(0004)
(0005) $Source: C:\\RCS\\d\\salvo\\tut\\tu5\\main.c,v $
(0006) $Author: aek $
(0007) $Revision: 3.7 $
(0008) $Date: 2003-06-13 17:05:12-07 $
(0009)
(0010) Source for tutorial programs.
(0011)
(0012) ************************************************************/
(0013)
(0014) #include "main.h"
(0015) #include "salvo.h"
(0016) #include "app.h"
(0017) #pragma interrupt_handler UART_RX_interrupt:iv_USART_RX
(0018) #pragma interrupt_handler SPI_isr: 13
(0019)
(0020) #define TASK_A_P OSTCBP(1) /* task #1 */
(0021) #define TASK_B_P OSTCBP(2) /* "" #2 */
(0022) #define TASK_C_P OSTCBP(3) /* "" #3 */
(0023) #define PRIO_A 10 /* task priorities*/
(0024) #define PRIO_B 10 /* "" */
(0025) #define PRIO_C 2 /* "" */
(0026) #define BINSEM_UPDATE_PORT_P OSECBP(1) /* binSem #1 */
(0027)
(0028) _OSLabel(TaskA1)
(0029) _OSLabel(TaskB1)
(0030) _OSLabel(TaskC1)
(0031)
(0032) void TaskA( void )
(0033) {
(0034) Uchar i;
(0035) Uart_init();
0053 D052 RCALL _Uart_init
0054 C02B RJMP _TaskA1
(0036)
(0037) while(1)
(0038) {
(0039) if(SPI_validFrame)
0055 918000A2 LDS R24,bit_flag
0057 9582 SWAP R24
0058 708F ANDI R24,0xF
0059 7081 ANDI R24,1
005A F109 BEQ 0x007C
(0040) {
(0041) SPI_validFrame=FALSE;
005B 918000A2 LDS R24,bit_flag
005D 7E8F ANDI R24,0xEF
005E 938000A2 STS bit_flag,R24
(0042) for(i=0;i<SPI_DatLen+3;i++)
0060 2744 CLR R20
0061 C00F RJMP 0x0071
(0043) SPI_TranFifo[i]=SPI_RecvFifo[i];
0062 E88B LDI R24,0x8B
0063 E090 LDI R25,0
0064 2FE4 MOV R30,R20
0065 27FF CLR R31
0066 0FE8 ADD R30,R24
0067 1FF9 ADC R31,R25
0068 8020 LDD R2,Z+0
0069 E78B LDI R24,0x7B
006A E090 LDI R25,0
006B 2FE4 MOV R30,R20
006C 27FF CLR R31
006D 0FE8 ADD R30,R24
006E 1FF9 ADC R31,R25
006F 8220 STD Z+0,R2
0070 9543 INC R20
0071 9180009E LDS R24,SPI_DatLen
0073 5F8D SUBI R24,0xFD
0074 1748 CP R20,R24
0075 F360 BCS 0x0062
(0044) SPI_SendPacket(SPI_DatLen+3,SPI_TranFifo);
0076 E72B LDI R18,0x7B
0077 E030 LDI R19,0
0078 9100009E LDS R16,SPI_DatLen
007A 5F0D SUBI R16,0xFD
007B D07C RCALL _SPI_SendPacket
(0045) //Uart_SendPacket(SPI_DatLen+3,SPI_RecvFifo);
(0046) }
(0047) OS_Yield(TaskA1);
007C E50E LDI R16,0x5E
007D E010 LDI R17,0
007E 940E0291 CALL _OSCtxSw
_TaskA1:
0080 CFD4 RJMP 0x0055
0081 940E0533 CALL pop_gset1
0083 9508 RET
(0048) //OS_Delay(30, TaskA1);
(0049) }
(0050) }
(0051)
(0052) void TaskB( void )
(0053) {
_TaskB:
0084 C004 RJMP _TaskB1
(0054) while(1)
(0055) {
(0056) //OS_WaitBinSem(BINSEM_UPDATE_PORT_P, OSNO_TIMEOUT, TaskShow1);
(0057)
(0058) OS_Yield(TaskB1);
0085 E50C LDI R16,0x5C
0086 E010 LDI R17,0
0087 940E0291 CALL _OSCtxSw
_TaskB1:
0089 CFFB RJMP 0x0085
008A 9508 RET
(0059) //OS_Delay(10, TaskB1);
(0060) }
(0061) }
(0062)
(0063) void TaskC( void )
(0064) {
(0065) ADC_init();
_TaskC:
008B D190 RCALL _ADC_init
(0066) for (;;) {
(0067) PORTD ^= 0x40;
008C E480 LDI R24,0x40
008D B222 IN R2,0x12
008E 2628 EOR R2,R24
008F BA22 OUT 0x12,R2
(0068)
(0069) OS_Delay(90, TaskC1);
0090 E50A LDI R16,0x5A
0091 940E047B CALL _OSDelay
0093 E50A LDI R16,0x5A
0094 E010 LDI R17,0
0095 940E0291 CALL _OSCtxSw
_TaskC1:
0097 CFF4 RJMP 0x008C
0098 9508 RET
(0070) }
(0071) }
(0072) void port_init(void)
(0073) {
(0074) PORTA = 0x00;
_port_init:
0099 2422 CLR R2
009A BA2B OUT 0x1B,R2
(0075) DDRA = 0xff;
009B EF8F LDI R24,0xFF
009C BB8A OUT 0x1A,R24
(0076) PORTB = 0x00;
009D BA28 OUT 0x18,R2
(0077) DDRB = 0x01;
009E E081 LDI R24,1
009F BB87 OUT 0x17,R24
(0078) PORTC = 0x00; //m103 output only
00A0 BA25 OUT 0x15,R2
(0079) DDRC = 0xff;
00A1 EF8F LDI R24,0xFF
00A2 BB84 OUT 0x14,R24
(0080) PORTD = 0x00;
00A3 BA22 OUT 0x12,R2
(0081) DDRD = 0xff;
00A4 BB81 OUT 0x11,R24
00A5 9508 RET
(0082) }
(0083) void Uart_init(void)
(0084) {
(0085) UCSRC = BIT(URSEL) | 0x06;
_Uart_init:
00A6 E886 LDI R24,0x86
00A7 BD80 OUT 0x20,R24
(0086) UBRRH = 0x00;
00A8 2422 CLR R2
00A9 BC20 OUT 0x20,R2
(0087) UBRRL = 0x33;
00AA E383 LDI R24,0x33
00AB B989 OUT 0x09,R24
(0088) UCSRB = ( (1<<RXCIE) |(1<<RXEN) | (1<<TXEN) );
00AC E988 LDI R24,0x98
00AD B98A OUT 0x0A,R24
00AE 9508 RET
_main:
00AF 9721 SBIW R28,1
(0089) }
(0090)
(0091) void main( void )
(0092) {
(0093) CLI();
00B0 94F8 BCLR 7
(0094) port_init();
00B1 DFE7 RCALL _port_init
(0095) SPI_SlaveInit();
00B2 D035 RCALL _SPI_SlaveInit
(0096) SEI();
00B3 9478 BSET 7
(0097) Init();
00B4 2422 CLR R2
00B5 BE23 OUT 0x33,R2
00B6 BE22 OUT 0x32,R2
00B7 E286 LDI R24,0x26
00B8 BF8C OUT 0x3C,R24
00B9 E082 LDI R24,2
00BA BF89 OUT 0x39,R24
00BB E08D LDI R24,0xD
00BC BF83 OUT 0x33,R24
(0098) OSInit();
00BD 940E0428 CALL _OSInit
(0099)
(0100) OSCreateTask(TaskA, TASK_A_P, PRIO_A);
00BF E08A LDI R24,0xA
00C0 8388 STD Y+0,R24
00C1 EB28 LDI R18,0xB8
00C2 E030 LDI R19,0
00C3 E508 LDI R16,0x58
00C4 E010 LDI R17,0
00C5 940E03FC CALL _OSCreateTask
(0101) OSCreateTask(TaskB, TASK_B_P, PRIO_B);
00C7 E08A LDI R24,0xA
00C8 8388 STD Y+0,R24
00C9 EB2F LDI R18,0xBF
00CA E030 LDI R19,0
00CB E506 LDI R16,0x56
00CC E010 LDI R17,0
00CD 940E03FC CALL _OSCreateTask
(0102) OSCreateTask(TaskC, TASK_C_P, PRIO_C);
00CF E082 LDI R24,2
00D0 8388 STD Y+0,R24
00D1 EC26 LDI R18,0xC6
00D2 E030 LDI R19,0
00D3 E504 LDI R16,0x54
00D4 E010 LDI R17,0
00D5 940E03FC CALL _OSCreateTask
(0103)
(0104) OSCreateBinSem(BINSEM_UPDATE_PORT_P, 0);
00D7 2722 CLR R18
00D8 EC0F LDI R16,0xCF
00D9 E010 LDI R17,0
00DA 940E049F CALL _OSCreateBinSem
(0105)
(0106) OSEi();
00DC 9478 BSET 7
(0107)
(0108) for (;;)
(0109) OSSched();
00DD 940E02BB CALL _OSSched
00DF CFFD RJMP 0x00DD
00E0 9621 ADIW R28,1
00E1 9508 RET
(0110) }
(0111) void SPI_MasterInit(void)
(0112) {
(0113) DDRB=0xB0;
_SPI_MasterInit:
00E2 EB80 LDI R24,0xB0
00E3 BB87 OUT 0x17,R24
(0114) PORTB|=(1<<4);
00E4 9AC4 SBI 0x18,4
(0115) SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR0);
00E5 E581 LDI R24,0x51
00E6 B98D OUT 0x0D,R24
00E7 9508 RET
(0116) }
(0117)
(0118) void SPI_SlaveInit(void)
(0119) {
(0120) DDRB=0x20;
_SPI_SlaveInit:
00E8 E280 LDI R24,0x20
00E9 BB87 OUT 0x17,R24
(0121) SPCR=(1<<SPIE)|(1<<SPE)|(1<<SPR0);
00EA EC81 LDI R24,0xC1
00EB B98D OUT 0x0D,R24
00EC 9508 RET
(0122) }
(0123) void SPI_MasterTransmit(void)
(0124) {
(0125) PORTB&=~(1<<4);
_SPI_MasterTransmit:
00ED 98C4 CBI 0x18,4
(0126) SPDR=(*Pout_SPI_TranFIfo);
00EE 91E00073 LDS R30,Pout_SPI_TranFIfo
00F0 91F00074 LDS R31,Pout_SPI_TranFIfo+1
00F2 8020 LDD R2,Z+0
00F3 B82F OUT 0x0F,R2
(0127) while(!(SPSR&(1<<SPIF)));
00F4 9B77 SBIS 0x0E,7
00F5 CFFE RJMP 0x00F4
(0128) PORTB|=(1<<4);
00F6 9AC4 SBI 0x18,4
00F7 9508 RET
_SPI_SendPacket:
Pbuffer --> R22
len --> R20
00F8 940E052E CALL push_gset2
00FA 01B9 MOVW R22,R18
00FB 2F40 MOV R20,R16
(0129) }
(0130) /*Uchar SPI_SlaveReveive(void)
(0131) {
(0132) while(!(SPSR&(1<<SPIF)));
(0133) return SPDR;
(0134)
(0135) }*/
(0136) void SPI_SendPacket(Uchar len, Uchar * Pbuffer)
(0137) {
(0138) SPI_MasterInit();
00FC DFE5 RCALL _SPI_MasterInit
(0139) Pout_SPI_TranFIfo=Pbuffer;
00FD 93700074 STS Pout_SPI_TranFIfo+1,R23
00FF 93600073 STS Pout_SPI_TranFIfo,R22
0101 C00B RJMP 0x010D
(0140) while(len>0)
(0141) {
(0142) SPI_MasterTransmit();
0102 DFEA RCALL _SPI_MasterTransmit
(0143) len--;
0103 954A DEC R20
(0144) Pout_SPI_TranFIfo++;
0104 91800073 LDS R24,Pout_SPI_TranFIfo
0106 91900074 LDS R25,Pout_SPI_TranFIfo+1
0108 9601 ADIW R24,1
0109 93900074 STS Pout_SPI_TranFIfo+1,R25
010B 93800073 STS Pout_SPI_TranFIfo,R24
010D 2422 CLR R2
010E 1624 CP R2,R20
010F F390 BCS 0x0102
(0145) }
(0146) SPI_SlaveInit();
0110 DFD7 RCALL _SPI_SlaveInit
0111 940E0525 CALL pop_gset2
0113 9508 RET
_SPI_isr:
0114 922A ST R2,-Y
0115 938A ST R24,-Y
0116 939A ST R25,-Y
0117 93EA ST R30,-Y
0118 93FA ST R31,-Y
0119 B62F IN R2,0x3F
011A 922A ST R2,-Y
(0147) }
(0148) void SPI_isr(void)
(0149) {
(0150) PORTD=0x80;
011B E880 LDI R24,0x80
011C BB82 OUT 0x12,R24
(0151) if(SPI_validFrame)
011D 918000A2 LDS R24,bit_flag
011F 9582 SWAP R24
0120 708F ANDI R24,0xF
0121 7081 ANDI R24,1
0122 F009 BEQ 0x0124
(0152) {return;}
0123 C061 RJMP 0x0185
(0153) if(SPI_Status==0x00)
0124 902000A1 LDS R2,SPI_Status
0126 2022 TST R2
0127 F489 BNE 0x0139
(0154) {
(0155) SPI_data=SPDR;
0128 B02F IN R2,0x0F
0129 922000A0 STS SPI_data,R2
(0156) if(SPI_data!=0x68)
012B 2D82 MOV R24,R2
012C 3688 CPI R24,0x68
012D F021 BEQ 0x0132
(0157) {
(0158) SPI_Status=0x00;
012E 2422 CLR R2
012F 922000A1 STS SPI_Status,R2
(0159) }
0131 C053 RJMP 0x0185
(0160) else
(0161) {
(0162) SPI_RecvFifo[0]=0x68;
0132 E688 LDI R24,0x68
0133 9380008B STS SPI_RecvFifo,R24
(0163) SPI_Status=0x01;
0135 E081 LDI R24,1
0136 938000A1 STS SPI_Status,R24
(0164) }
(0165) }
0138 C04C RJMP 0x0185
(0166) else if(SPI_Status==0x01)
0139 918000A1 LDS R24,SPI_Status
013B 3081 CPI R24,1
013C F449 BNE 0x0146
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -