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

📄 main.s

📁 本源码为C语言环境的ATMAGE8的BootLoader开发程序
💻 S
📖 第 1 页 / 共 2 页
字号:
;     unsigned char i;							
;     unsigned int TempInt;
;     unsigned int TempInt2;
; 
;     for (i=0;i<PageByte;i+=2)
	clr R20
	rjmp L29
L26:
	.dbline 183
;       {
	.dbline 184
; 	TempInt = read_program_memory(PageAddress + i,0x00);
	clr R18
	mov R2,R20
	clr R3
	lds R16,_PageAddress
	lds R17,_PageAddress+1
	add R16,R2
	adc R17,R3
	rcall _read_program_memory
	movw R10,R16
	.dbline 185
; 	TempInt2 = PageBuffer[i] +(PageBuffer[i+1]<<8);
	ldi R24,<_PageBuffer+1
	ldi R25,>_PageBuffer+1
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	clr R3
	mov R3,R2
	clr R2
	ldi R24,<_PageBuffer
	ldi R25,>_PageBuffer
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R12,z+0
	clr R13
	add R12,R2
	adc R13,R3
	.dbline 186
; 	if (TempInt != TempInt2) return 0;
	cp R16,R12
	cpc R17,R13
	breq L31
X8:
	.dbline 186
	clr R16
	rjmp L25
L31:
	.dbline 187
;       }
L27:
	.dbline 182
	subi R20,254    ; addi 2
L29:
	.dbline 182
	cpi R20,64
	brlo L26
X9:
	.dbline 188
;     return 1;
	ldi R16,1
	.dbline -2
L25:
	.dbline 0 ; func end
	rjmp pop_xgset303C
	.dbsym r TempInt2 12 i
	.dbsym r TempInt 10 i
	.dbsym r i 20 c
	.dbend
	.dbfunc e RecChar _RecChar fc
	.even
_RecChar::
	.dbline -1
	.dbline 194
;   }
; 
; /*****************************************************************************/
; /*  		字符输入函数 		 */	
; unsigned char RecChar(void)
;   {
L34:
	.dbline 195
;      while(!(UCSRA & 0x80));
L35:
	.dbline 195
	sbis 0xb,7
	rjmp L34
X10:
	.dbline 196
;      return UDR;
	in R16,0xc
	.dbline -2
L33:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e SendChar _SendChar fV
;              c -> R16
	.even
_SendChar::
	.dbline -1
	.dbline 200
;   }		
; /*****************************************************************************/
; void SendChar(unsigned char c)
;   {	 
L38:
	.dbline 201
;     while (!(UCSRA&(1<<UDRE)));
L39:
	.dbline 201
	sbis 0xb,5
	rjmp L38
X11:
	.dbline 202
;     UDR=c;
	out 0xc,R16
	.dbline -2
L37:
	.dbline 0 ; func end
	ret
	.dbsym r c 16 c
	.dbend
	.dbfunc e delay _delay fV
;              i -> R16,R17
	.even
_delay::
	.dbline -1
	.dbline 205
;   }
; void delay(void)  
;   {
	.dbline 207
;     unsigned int i;
;     for (i=0;i<65530;i++);
	clr R16
	clr R17
	rjmp L45
L42:
	.dbline 207
L43:
	.dbline 207
	subi R16,255  ; offset = 1
	sbci R17,255
L45:
	.dbline 207
	ldi R24,250
	ldi R25,255
	ldi R26,0
	ldi R27,0
	movw R2,R16
	clr R4
	clr R5
	cp R2,R24
	cpc R3,R25
	cpc R4,R26
	cpc R5,R27
	brlt L42
X12:
	.dbline -2
L41:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e ExecCode _ExecCode fV
	.even
_ExecCode::
	.dbline -1
	.dbline 212
;   }
; 
; /*****************************************************************************/
; void ExecCode(void)
;   {
	.dbline 213
;     GICR=0X01;           //中断向量表移位允许
	ldi R24,1
	out 0x3b,R24
	.dbline 214
;     GICR=0X00;           //中断向量指向应用程序区
	clr R2
	out 0x3b,R2
	.dbline 215
;     asm("jmp 0x0000");              
	jmp 0x0000
	.dbline -2
L46:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;           iTry -> R20
;        TempInt -> R22,R23
;       BootFlag -> R22
	.even
_main::
	.dbline -1
	.dbline 218
;   }	
; void main(void)
;   {
	.dbline 222
;     unsigned char BootFlag;
;     unsigned int TempInt;
; 	char iTry;
; 	CLI();
	cli
	.dbline 229
;     #ifdef InteClk                //如果使用内部时钟,读取时钟校准值
;        OSCCAL=read_flash(OscAddress);
;     #endif
; 
; #ifdef W0	
;  //pei 拷贝W0的PortInit
;  	PORTB = 0x0F;//rfslp,fs123=1
	ldi R24,15
	out 0x18,R24
	.dbline 230
;  	DDRB  = 0xFF;//bit1=output
	ldi R24,255
	out 0x17,R24
	.dbline 231
;  	PORTC = 0x21;//0x20;//rfrst=1,not reset! 
	ldi R24,33
	out 0x15,R24
	.dbline 232
;  	DDRC  = 0x7F;
	ldi R24,127
	out 0x14,R24
	.dbline 233
;  	PORTD = 0x0C;
	ldi R24,12
	out 0x12,R24
	.dbline 234
;  	DDRD  = 0xF0;
	ldi R24,240
	out 0x11,R24
	.dbline 238
; #else
; #endif
;     
;     UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据+1位停止
	ldi R24,134
	out 0x20,R24
	.dbline 239
;     UCSRB = (1<<RXEN)|(1<<TXEN);       //允许串口发送和接收
	ldi R24,24
	out 0xa,R24
	.dbline 240
;     UBRR = BAU;
	ldi R24,51
	out 0x9,R24
	.dbline 242
; 
; 	iTry=20;
	ldi R20,20
L48:
	.dbline 245
; STARTBOOT://pei未下载程序时重复等待
; #ifdef W0	
;     PORTC=PORTC^0x03;//指示灯闪烁
	ldi R24,3
	in R2,0x15
	eor R2,R24
	out 0x15,R2
	.dbline 247
; #endif
;  	 delay();                    //延时等待PC机响应
	rcall _delay
	.dbline 248
;      SendChar('>');              //通知PC机,BOOT下载准备就绪
	ldi R16,62
	rcall _SendChar
	.dbline 249
;      delay();                    //延时等待PC机响应
	rcall _delay
	.dbline 250
;      BootFlag=UDR;
	in R22,0xc
	.dbline 252
; 
;     if (BootFlag == '<') 
	cpi R22,60
	brne L49
X13:
	.dbline 253
;       {
	.dbline 254
; 	     SendChar(ChipType);   //芯片版本信息
	ldi R16,48
	rcall _SendChar
	.dbline 255
;          SendChar(BootSize);
	ldi R16,99
	rcall _SendChar
	.dbline 256
;          SendChar(BootVer);
	ldi R16,103
	rcall _SendChar
	rjmp L52
L51:
	.dbline 258
;          while (1)
; 	   {
	.dbline 259
; 	     switch (RecChar())
	rcall _RecChar
	mov R22,R16
	clr R23
	cpi R22,69
	ldi R30,0
	cpc R23,R30
	breq L58
X14:
	cpi R22,69
	ldi R30,0
	cpc R23,R30
	brlt L55
X15:
L59:
	cpi R22,87
	ldi R30,0
	cpc R23,R30
	breq L57
X16:
	rjmp L55
L57:
	.dbline 261
; 	       {
; 	         case 'W': FlashLoad();
	rcall _FlashLoad
	.dbline 262
; 			 	   break;
	rjmp L55
L58:
	.dbline 263
; 	         case 'E': { 
	.dbline 264
; 	         	     SendChar('E');  //通知PC机,进入运用程序区
	ldi R16,69
	rcall _SendChar
	.dbline 265
; 	         	     ExecCode();  
	rcall _ExecCode
	.dbline 266
; 	         	   } break;
	.dbline 266
	.dbline 267
; 	         default : break;
L55:
	.dbline 269
; 	       }
; 	   }
L52:
	.dbline 257
	rjmp L51
L49:
	.dbline 271
;       }
;     SendChar('E');  
	ldi R16,69
	rcall _SendChar
	.dbline 273
; 	
; 	TempInt = read_program_memory(0,0);//pei
	clr R18
	clr R16
	clr R17
	rcall _read_program_memory
	movw R22,R16
	.dbline 274
; 	if (TempInt==0xFFFF) goto STARTBOOT;
	cpi R16,255
	ldi R30,255
	cpc R17,R30
	brne L60
X17:
	.dbline 274
	rjmp L48
L60:
	.dbline 275
; 	  else{ iTry--;
	.dbline 275
	dec R20
	.dbline 276
; 	        if (iTry>0) goto STARTBOOT;}
	ldi R24,0
	cp R24,R20
	brsh L62
X18:
	.dbline 276
	rjmp L48
L62:
	.dbline 276
	.dbline 277
; 	SEI();
	sei
	.dbline 278
;     ExecCode();//执行用户区程序
	rcall _ExecCode
	.dbline -2
L47:
	.dbline 0 ; func end
	ret
	.dbsym r iTry 20 c
	.dbsym r TempInt 22 i
	.dbsym r BootFlag 22 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\AVR常用函数\BootLooderMage8\BootLoad_8M\main.c
_PageAddress::
	.blkb 2
	.dbsym e PageAddress _PageAddress i
_PageBuffer::
	.blkb 64
	.dbsym e PageBuffer _PageBuffer A[64:64]c
;   }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -