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

📄 main.s

📁 程序下载在M16中后
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module main.c
	.area data(ram, con, rel)
_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\iccv7avr\AVRBOO~1/para.h
	.dbsym e flag _flag c
	.area bss(ram, con, rel)
	.dbfile D:\iccv7avr\AVRBOO~1/para.h
L2:
	.blkb 2
	.area text(rom, con, rel)
	.dbfile D:\iccv7avr\AVRBOO~1/para.h
	.dbfile D:\iccv7avr\AVRBOO~1\main.c
	.dbfunc e main _main fV
	.dbsym s msgCounter L2 i
;       rec_data -> R20
	.even
_main::
	.dbline -1
	.dbline 29
; /****************************************Copyright (c)**************************************************                                                 
; **                              
; ** 文   件    名: main.c
; ** 描         述: M16_BOOTLOADER
; ** 版	      本: V1.0
; ** 主  控  芯 片: M16  晶振频率:7.3728MHZ, 波特率115200
; ** 编  译  环 境:ICCAVR 6.31A	
; 
; 描    述:使用STK500_2 协议的bootloader,监控芯片 M16,数据通讯RS232
; 		  已经非常精简的使用STK500_2 协议的MEGA16的bootloader.使用
; 		  ATMEL AVRStudio 4.xx STK500工具的进行软件升级。
; 		  	
; **********************************************************************************************************/
; #include <iom16v.h>
; #include <macros.h>
; #include <string.h>
; #include "define.h"
; #include "function.h"
; #include "command.h"
; #include "para.h"
; 
; 
; 
; /**********************************************************************
; functionName:void main(void)
; description:主函数
; **********************************************************************/
; void main(void)
; {
	.dbline 32
; 	uint08 rec_data;
; 	static uint16 msgCounter;
; 	allInit();
	xcall _allInit
	xjmp L4
L3:
	.dbline 34
; 	while(1)
; 	{
	.dbline 35
; 		rec_data=getChar();
	xcall _getChar
	mov R20,R16
	.dbline 36
; 		if(statusMachine == ST_START)
	lds R24,_statusMachine
	cpi R24,240
	brne L6
	.dbline 37
; 		{
	.dbline 38
; 		 	flag = 1;
	ldi R24,1
	sts _flag,R24
	.dbline 39
; 			TCCR1B = 0x00;
	clr R2
	out 0x2e,R2
	.dbline 40
; 			if(rec_data==MESSAGE_START)
	cpi R16,27
	breq X1
	xjmp L7
X1:
	.dbline 41
; 			{
	.dbline 42
; 				statusMachine = ST_GET_SEQ_NUM;	
	ldi R24,241
	sts _statusMachine,R24
	.dbline 43
; 				checkSum = MESSAGE_START;
	ldi R24,27
	sts _checkSum,R24
	.dbline 44
; 			}
	.dbline 45
; 		}
	xjmp L7
L6:
	.dbline 46
; 		else if(statusMachine == ST_GET_SEQ_NUM)
	lds R24,_statusMachine
	cpi R24,241
	brne L10
	.dbline 47
; 		{
	.dbline 48
; 			seqNumber = rec_data;
	sts _seqNumber,R20
	.dbline 49
; 			checkSum ^= rec_data; 
	lds R2,_checkSum
	eor R2,R20
	sts _checkSum,R2
	.dbline 50
; 			statusMachine = ST_MSG_SIZE_1;
	ldi R24,242
	sts _statusMachine,R24
	.dbline 51
; 		}
	xjmp L11
L10:
	.dbline 52
; 		else if(statusMachine == ST_MSG_SIZE_1)
	lds R24,_statusMachine
	cpi R24,242
	brne L12
	.dbline 53
; 		{
	.dbline 54
; 			msgSize = rec_data;
	mov R2,R20
	clr R3
	sts _msgSize+1,R3
	sts _msgSize,R2
	.dbline 55
; 			msgSize <<=8;
	mov R3,R2
	clr R2
	sts _msgSize+1,R3
	sts _msgSize,R2
	.dbline 56
; 			checkSum ^= rec_data;
	lds R2,_checkSum
	eor R2,R20
	sts _checkSum,R2
	.dbline 57
; 			statusMachine = ST_MSG_SIZE_2;	
	ldi R24,243
	sts _statusMachine,R24
	.dbline 58
; 		}
	xjmp L13
L12:
	.dbline 59
; 		else if(statusMachine == ST_MSG_SIZE_2)
	lds R24,_statusMachine
	cpi R24,243
	brne L14
	.dbline 60
; 		{
	.dbline 61
; 			msgSize |= rec_data;
	mov R2,R20
	clr R3
	lds R4,_msgSize
	lds R5,_msgSize+1
	or R4,R2
	or R5,R3
	sts _msgSize+1,R5
	sts _msgSize,R4
	.dbline 62
; 			checkSum ^= rec_data;
	lds R2,_checkSum
	eor R2,R20
	sts _checkSum,R2
	.dbline 63
; 			statusMachine = ST_GET_TOKEN;	
	ldi R24,244
	sts _statusMachine,R24
	.dbline 64
; 		}
	xjmp L15
L14:
	.dbline 65
; 		else if(statusMachine == ST_GET_TOKEN)
	lds R24,_statusMachine
	cpi R24,244
	brne L16
	.dbline 66
; 		{
	.dbline 67
; 			if(rec_data==TOKEN)
	cpi R20,14
	brne L18
	.dbline 68
; 			{
	.dbline 69
; 				checkSum ^= rec_data;
	lds R2,_checkSum
	eor R2,R20
	sts _checkSum,R2
	.dbline 70
; 				statusMachine = ST_GET_DATA;
	ldi R24,245
	sts _statusMachine,R24
	.dbline 71
; 				msgCounter=0;
	clr R2
	clr R3
	sts L2+1,R3
	sts L2,R2
	.dbline 72
; 			}
	xjmp L17
L18:
	.dbline 74
; 			else
; 			{
	.dbline 75
; 				statusMachine = ST_START;
	ldi R24,240
	sts _statusMachine,R24
	.dbline 76
; 			}
	.dbline 77
; 		}
	xjmp L17
L16:
	.dbline 78
; 		else if(statusMachine == ST_GET_DATA)
	lds R24,_statusMachine
	cpi R24,245
	brne L20
	.dbline 79
; 		{
	.dbline 80
; 			msg_buffer[msgCounter++]=rec_data;
	lds R2,L2
	lds R3,L2+1
	movw R24,R2
	adiw R24,1
	sts L2+1,R25
	sts L2,R24
	ldi R24,<_msg_buffer
	ldi R25,>_msg_buffer
	movw R30,R2
	add R30,R24
	adc R31,R25
	std z+0,R20
	.dbline 81
; 			checkSum ^= rec_data;
	lds R2,_checkSum
	eor R2,R20
	sts _checkSum,R2
	.dbline 82
; 			if(msgCounter==msgSize)
	lds R2,_msgSize
	lds R3,_msgSize+1
	lds R4,L2
	lds R5,L2+1
	cp R4,R2
	cpc R5,R3
	brne L21
	.dbline 83
; 			{
	.dbline 84
; 				statusMachine = ST_GET_CHECK;
	ldi R24,246
	sts _statusMachine,R24
	.dbline 85
; 			}
	.dbline 86
; 		}
	xjmp L21
L20:
	.dbline 87
; 		else if(statusMachine == ST_GET_CHECK)
	lds R24,_statusMachine
	cpi R24,246
	brne L24
	.dbline 88
; 		{
	.dbline 89
; 			if(rec_data == checkSum)
	lds R2,_checkSum
	cp R20,R2
	brne L26
	.dbline 90
; 			{
	.dbline 91
; 				packageProcess(seqNumber);
	lds R16,_seqNumber
	xcall _packageProcess
	.dbline 92
; 			}		
L26:
	.dbline 93
; 			statusMachine = ST_START;	
	ldi R24,240
	sts _statusMachine,R24
	.dbline 94
; 		}
L24:
L21:
L17:
L15:
L13:
L11:
L7:
	.dbline 95
L4:
	.dbline 33
	xjmp L3
X0:
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r rec_data 20 c
	.dbend
	.dbfunc e packageProcess _packageProcess fV
;         temp16 -> R10,R11
;  start_address -> y+2
;            cmd -> R14
;            tmp -> y+8
;      num_bytes -> y+6
;              i -> R12,R13
;         seqNum -> y+19
	.even
_packageProcess::
	st -y,r17
	st -y,r16
	xcall push_gset5
	sbiw R28,9
	.dbline -1
	.dbline 106
; 	}
; }
; 
; 	
; 	
; 
; /**********************************************************************
; functionName:void packageProcess(uint08 seqNum) 
; description:数据包的处理过程
; **********************************************************************/		
; void packageProcess(uint08 seqNum) 
; {
	.dbline 108
; 	uint08 cmd;
; 	uint08 tmp=0;
	clr R0
	std y+8,R0
	.dbline 110
; 	uint16 i;
; 	uint16 num_bytes=0;
	clr R1
	std y+7,R1
	std y+6,R0
	.dbline 111
; 	uint32 start_address = address;
	lds R2,_address
	lds R3,_address+1
	clr R4
	clr R5
	movw R30,R28
	std z+2,R2
	std z+3,R3
	std z+4,R4
	std z+5,R5
	.dbline 113
; 	
; 	cmd = msg_buffer[0];
	lds R14,_msg_buffer
	.dbline 115
; 	//命令CMD_SIGN_ON
; 	if(cmd==CMD_SIGN_ON)
	mov R24,R14
	cpi R24,1
	brne L29
	.dbline 116
; 	{
	.dbline 117
; 		num_bytes = 11;
	ldi R24,11
	ldi R25,0
	std y+7,R25
	std y+6,R24
	.dbline 118
; 		msg_buffer[0] = CMD_SIGN_ON;
	ldi R24,1
	sts _msg_buffer,R24
	.dbline 119
; 		msg_buffer[1] = STATUS_CMD_OK;
	clr R2
	sts _msg_buffer+1,R2
	.dbline 120
; 		msg_buffer[2] = 8;
	ldi R24,8
	sts _msg_buffer+2,R24
	.dbline 121
; 		memcpy(msg_buffer+3,"STK500_2",8);
	std y+1,R25
	std y+0,R24
	ldi R18,<L34
	ldi R19,>L34
	ldi R16,<_msg_buffer+3
	ldi R17,>_msg_buffer+3
	xcall _memcpy
	.dbline 122
; 	}
	xjmp L30
L29:
	.dbline 124
; 	//命令CMD_SET_PARAMETER
; 	else if(cmd==CMD_SET_PARAMETER)
	mov R24,R14
	cpi R24,2
	brne L35
	.dbline 125
; 	{
	.dbline 126
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+7,R25
	std y+6,R24
	.dbline 127
; 		msg_buffer[0] = CMD_SET_PARAMETER;
	sts _msg_buffer,R24
	.dbline 128
; 		msg_buffer[1] = STATUS_CMD_OK;
	clr R2
	sts _msg_buffer+1,R2
	.dbline 129
; 	}
	xjmp L36
L35:
	.dbline 131
; 	//命令CMD_GET_PARAMETER
; 	else if(cmd==CMD_GET_PARAMETER)
	mov R24,R14
	cpi R24,3
	brne L38
	.dbline 132
; 	{
	.dbline 133
; 		switch(msg_buffer[1])
	lds R10,_msg_buffer+1
	clr R11
	movw R24,R10
	cpi R24,146
	ldi R30,0
	cpc R25,R30
	breq L44
	cpi R24,148
	ldi R30,0
	cpc R25,R30
	breq L46
	cpi R24,149
	ldi R30,0
	cpc R25,R30
	breq L47
	cpi R24,146
	ldi R30,0
	cpc R25,R30
	brlt L40
L48:
	movw R24,R10
	cpi R24,158
	ldi R30,0
	cpc R25,R30
	breq L45
	xjmp L40
X2:
	.dbline 134
; 		{
L44:
	.dbline 148
; 			/*case PARAM_BUILD_NUMBER_LOW:
; 				tmp = CONFIG_PARAM_BUILD_NUMBER_LOW;
; 				break;
; 			case PARAM_BUILD_NUMBER_HIGH:
; 				tmp = CONFIG_PARAM_BUILD_NUMBER_HIGH;
; 				break;
; 			case PARAM_HW_VER:
; 				tmp = CONFIG_PARAM_HW_VER;
; 				break;
; 			case PARAM_SW_MAJOR:
; 				tmp = CONFIG_PARAM_SW_MAJOR;
; 				break;*/
; 			case PARAM_SW_MINOR:
; 				tmp = CONFIG_PARAM_SW_MINOR;
	ldi R24,4
	std y+8,R24
	.dbline 149
; 				break;
	xjmp L41
L45:
	.dbline 151
; 			case PARAM_RESET_POLARITY:
; 				tmp = resetPolarity;
	lds R2,_resetPolarity
	std y+8,R2
	.dbline 152
; 				break;
	xjmp L41
L46:
	.dbline 154
; 			case PARAM_VTARGET:				//目标电压
; 				tmp = 50;
	ldi R24,50
	std y+8,R24
	.dbline 155
; 				break;	
	xjmp L41
L47:
	.dbline 157
; 			case PARAM_VADJUST:
; 				tmp = 50;				//参考电压
	ldi R24,50
	std y+8,R24
	.dbline 158
; 				break;
	xjmp L41
L40:
	.dbline 169
; 			/*case PARAM_TOPCARD_DETECT:
; 				tmp = TOP_CARD_STK520;
; 				break;
; 			case PARAM_CONTROLLER_INIT:
; 				tmp = paramControllerInit;
; 				break;
; 			case PARAM_SCK_DURATION:
; 				tmp = clockSpeed;
; 				break;*/
; 			default:
; 				tmp = CONFIG_PARAM_SW_MAJOR;
	ldi R24,2
	std y+8,R24
	.dbline 170
; 				break;		
L41:
	.dbline 172
; 		}
; 		num_bytes = 3;
	ldi R24,3
	ldi R25,0
	std y+7,R25
	std y+6,R24
	.dbline 173
; 		msg_buffer[0] = CMD_GET_PARAMETER;
	sts _msg_buffer,R24
	.dbline 174
; 		msg_buffer[1] = STATUS_CMD_OK;
	clr R2
	sts _msg_buffer+1,R2
	.dbline 175
; 		msg_buffer[2] = tmp;
	ldd R0,y+8
	sts _msg_buffer+2,R0
	.dbline 176
; 	}
	xjmp L39
L38:
	.dbline 185
; 	//命令CMD_OSCCAL
; 	/*else if(cmd==CMD_OSCCAL)
; 	{
; 		num_bytes = 2;
; 		msg_buffer[0] = CMD_OSCCAL;
; 		msg_buffer[1] = STATUS_CMD_OK;
; 	}*/
; 	//命令CMD_LOAD_ADDRESS
; 	else if(cmd==CMD_LOAD_ADDRESS)
	mov R24,R14
	cpi R24,6
	brne L51
	.dbline 186
; 	{
	.dbline 189
; 		//address =  ((unsigned long)msg_buffer[1])<<24;
; 		//address |= ((unsigned long)msg_buffer[2])<<16;
; 		address = ((unsigned long)msg_buffer[3])<<8;
	ldi R24,8
	ldi R25,0
	lds R2,_msg_buffer+3
	clr R3
	clr R4
	clr R5
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsl32
	sts _address+1,R17
	sts _address,R16
	.dbline 190
; 		address |= ((unsigned long)msg_buffer[4]);
	lds R2,_msg_buffer+4
	clr R3
	clr R4
	clr R5
	movw R6,R16
	clr R8
	clr R9
	or R6,R2
	or R7,R3
	or R8,R4
	or R9,R5
	sts _address+1,R7
	sts _address,R6
	.dbline 191
; 		num_bytes = 2;
	ldi R24,2
	ldi R25,0
	std y+7,R25
	std y+6,R24
	.dbline 192

⌨️ 快捷键说明

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