⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atmega32.lst

📁 这是AVR单片机上能跑的嵌入式操作系统salvo
💻 LST
📖 第 1 页 / 共 4 页
字号:
__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 + -