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

📄 stk500_isp.lst

📁 很好的制作AVR32 ICE的资料
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0161)           else if (state==ST_GET_CHECK)
     27D 3046      CPI	R20,6
     27E EFE0      LDI	R30,0xF0
     27F 075E      CPC	R21,R30
     280 F431      BNE	0x0287
(0162)             {
(0163)               if (t==checksum)
     281 16A6      CP	R10,R22
     282 F411      BNE	0x0285
(0164)                 {
(0165)                   process_command(seq_num);
     283 810A      LDD	R16,Y+2
     284 D014      RCALL	_process_command
(0166)                 }
(0167) 
(0168)               state = ST_START;
     285 E040      LDI	R20,0
     286 EF50      LDI	R21,0xF0
     287 CF93      RJMP	0x021B
     288 9624      ADIW	R28,4
     289 9508      RET
(0169)             }
(0170) 
(0171)         }//if(rec_data!=-1)
(0172)     }//while(2)
(0173) 
(0174)   return 0;
(0175) 
(0176) }
(0177) 
(0178) /**
(0179) 	Returns the value of the selected adc channel
(0180) 
(0181) 	@param n Number of ADC channel
(0182) 
(0183) 	@return  Value of ADC channel
(0184) */
(0185) unsigned char adc_get(char n)
(0186) {
(0187)   ADMUX&=0xF0;
_adc_get:
  n                    --> R16
     28A B187      IN	R24,0x07
     28B 7F80      ANDI	R24,0xF0
     28C B987      OUT	0x07,R24
(0188)   ADMUX|=n&0x7;
     28D 2F80      MOV	R24,R16
     28E 7087      ANDI	R24,7
     28F B027      IN	R2,0x07
     290 2A28      OR	R2,R24
     291 B827      OUT	0x07,R2
(0189) 
(0190)   while (ADCSRA&0x40);
     292 9936      SBIC	0x06,6
     293 CFFE      RJMP	0x0292
(0191)   ADCSRA|=(1<<ADSC);
     294 9A36      SBI	0x06,6
(0192)   while (ADCSRA&0x40);
     295 9936      SBIC	0x06,6
     296 CFFE      RJMP	0x0295
(0193) 
(0194)   return ADCH;
     297 B105      IN	R16,0x05
     298 9508      RET
_process_command:
  bytes_to_transmit0   --> Y,+12
  rx_from0             --> Y,+14
  rx_bytes0            --> R12
  tx_bytes0            --> Y,+10
  Reg9                 --> R12
  Reg80                --> Y,+14
  Reg26                --> Y,+16
  Reg48                --> R12
  Reg17                --> Y,+16
  Reg39                --> R12
  Reg65                --> Y,+16
  Reg72                --> Y,+16
  Reg59                --> R12
  Reg29                --> Y,+20
  Reg12                --> Y,+16
  i29                  --> R12
  tmp47                --> R14
  i23                  --> R12
  i20                  --> R14
  tmp39                --> R14
  i16                  --> R14
  mode7                --> Y,+12
  block_size6          --> Y,+14
  i13                  --> R14
  tmp37                --> Y,+14
  block_size4          --> Y,+12
  i10                  --> R14
  tmp31                --> R12
  i6                   --> R14
  mode0                --> Y,+14
  block_size2          --> Y,+12
  i3                   --> R12
  tmp29                --> Y,+12
  block_size0          --> Y,+14
  tmp24                --> R14
  tmp23                --> R14
  tmp22                --> R14
  tmp21                --> R14
  tmp16                --> R14
  tmp15                --> R14
  tmp14                --> R14
  tmp13                --> R14
  tmp12                --> R14
  tmp11                --> R14
  tmp10                --> R14
  tmp9                 --> R14
  tmp8                 --> R14
  tmp7                 --> R14
  tmp6                 --> R14
  tmp5                 --> R14
  tmp2                 --> R12
  num_bytes1           --> R10
  i0                   --> R14
  cmd0                 --> Y,+10
  start_address0       --> Y,+6
  polling_address0     --> Y,+2
  tmp0                 --> Y,+18
  seq_num              --> Y,+32
     299 931A      ST	R17,-Y
     29A 930A      ST	R16,-Y
     29B 940E 0B2F CALL	push_xgsetF0FC
     29D 9766      SBIW	R28,0x16
(0195) }
(0196) 
(0197) /**
(0198) 	Processes a command packet received in main loop and located in the global buffer
(0199) 
(0200) 	@param	seq_num	The sequence number of the command packet
(0201) */
(0202) void process_command(unsigned char seq_num)
(0203) {
(0204)   unsigned char cmd;
(0205)   unsigned char tmp=0;
     29E 2400      CLR	R0
     29F 8A0A      STD	Y+18,R0
(0206)   unsigned char mode;
(0207)   unsigned int block_size;
(0208)   unsigned int i;
(0209)   unsigned int num_bytes=0;
     2A0 24AA      CLR	R10
     2A1 24BB      CLR	R11
(0210)   unsigned long polling_address=0;
     2A2 E040      LDI	R20,0
     2A3 E050      LDI	R21,0
     2A4 E060      LDI	R22,0
     2A5 E070      LDI	R23,0
     2A6 834A      STD	Y+2,R20
     2A7 835B      STD	Y+3,R21
     2A8 836C      STD	Y+4,R22
     2A9 837D      STD	Y+5,R23
(0211)   unsigned long start_address = address;
     2AA 9040 006F LDS	R4,address+2
     2AC 9050 0070 LDS	R5,address+3
     2AE 9020 006D LDS	R2,address
     2B0 9030 006E LDS	R3,address+1
     2B2 822E      STD	Y+6,R2
     2B3 823F      STD	Y+7,R3
     2B4 8648      STD	Y+8,R4
     2B5 8659      STD	Y+9,R5
(0212) 
(0213)   cmd = msg_buffer[0];
     2B6 9020 0075 LDS	R2,msg_buffer
     2B8 862A      STD	Y+10,R2
(0214) 
(0215)   //////////////////////////////////////
(0216)   //CMD_SIGN_ON
(0217)   //////////////////////////////////////
(0218)   if (cmd==CMD_SIGN_ON)
     2B9 2D82      MOV	R24,R2
     2BA 3081      CPI	R24,1
     2BB F4A9      BNE	0x02D1
(0219)     {
(0220)       num_bytes = 11;
     2BC E08B      LDI	R24,0xB
     2BD E090      LDI	R25,0
     2BE 015C      MOVW	R10,R24
(0221)       msg_buffer[0] = CMD_SIGN_ON;
     2BF E081      LDI	R24,1
     2C0 9380 0075 STS	msg_buffer,R24
(0222)       msg_buffer[1] = STATUS_CMD_OK;
     2C2 2422      CLR	R2
     2C3 9220 0076 STS	msg_buffer+1,R2
(0223)       msg_buffer[2] = 8;
     2C5 E088      LDI	R24,0x8
     2C6 9380 0077 STS	msg_buffer+2,R24
(0224)       memcpy(msg_buffer+3,"AVRISP_2",8);
     2C8 8399      STD	Y+1,R25
     2C9 8388      STD	Y+0,R24
     2CA E621      LDI	R18,0x61
     2CB E030      LDI	R19,0
     2CC E708      LDI	R16,0x78
     2CD E010      LDI	R17,0
     2CE 940E 0B11 CALL	_memcpy
(0225)     }
     2D0 C7FD      RJMP	0x0ACE
(0226)   //////////////////////////////////////
(0227)   //CMD_SET_PARAMETER
(0228)   //////////////////////////////////////
(0229)   else if (cmd==CMD_SET_PARAMETER)
     2D1 858A      LDD	R24,Y+10
     2D2 3082      CPI	R24,2
     2D3 F009      BEQ	0x02D5
     2D4 C061      RJMP	0x0336
(0230)     {
(0231)       switch (msg_buffer[1])
     2D5 90C0 0076 LDS	R12,msg_buffer+1
     2D7 2D8C      MOV	R24,R12
     2D8 3988      CPI	R24,0x98
     2D9 F059      BEQ	0x02E5
     2DA 3988      CPI	R24,0x98
     2DB F408      BCC	0x02DD
     2DC C050      RJMP	0x032D
     2DD 2D8C      MOV	R24,R12
     2DE 398E      CPI	R24,0x9E
     2DF F409      BNE	0x02E1
     2E0 C043      RJMP	0x0324
     2E1 398F      CPI	R24,0x9F
     2E2 F409      BNE	0x02E4
     2E3 C045      RJMP	0x0329
     2E4 C048      RJMP	0x032D
(0232)         {
(0233)         case PARAM_SCK_DURATION:
(0234)           clock_speed=SPI_SPEED_2MHZ;
     2E5 E081      LDI	R24,1
     2E6 9380 0074 STS	clock_speed,R24
(0235)           if ((msg_buffer[2]) >= 1  ) clock_speed=SPI_SPEED_2MHZ;
     2E8 9180 0077 LDS	R24,msg_buffer+2
     2EA 3081      CPI	R24,1
     2EB F018      BCS	0x02EF
     2EC E081      LDI	R24,1
     2ED 9380 0074 STS	clock_speed,R24
(0236)           if ((msg_buffer[2]) >= 2  ) clock_speed=SPI_SPEED_1MHZ;
     2EF 9180 0077 LDS	R24,msg_buffer+2
     2F1 3082      CPI	R24,2
     2F2 F018      BCS	0x02F6
     2F3 E082      LDI	R24,2
     2F4 9380 0074 STS	clock_speed,R24
(0237)           if ((msg_buffer[2]) >= 4  ) clock_speed=SPI_SPEED_500KHZ;
     2F6 9180 0077 LDS	R24,msg_buffer+2
     2F8 3084      CPI	R24,4
     2F9 F018      BCS	0x02FD
     2FA E083      LDI	R24,3
     2FB 9380 0074 STS	clock_speed,R24
(0238)           if ((msg_buffer[2]) >= 8  ) clock_speed=SPI_SPEED_250KHZ;
     2FD 9180 0077 LDS	R24,msg_buffer+2
     2FF 3088      CPI	R24,0x8
     300 F018      BCS	0x0304
     301 E084      LDI	R24,4
     302 9380 0074 STS	clock_speed,R24
(0239)           if ((msg_buffer[2]) >= 16 ) clock_speed=SPI_SPEED_125KHZ;
     304 9180 0077 LDS	R24,msg_buffer+2
     306 3180      CPI	R24,0x10
     307 F018      BCS	0x030B
     308 E085      LDI	R24,5
     309 9380 0074 STS	clock_speed,R24
(0240)           if ((msg_buffer[2]) >= 32 ) clock_speed=SPI_SPEED_62KHZ;
     30B 9180 0077 LDS	R24,msg_buffer+2
     30D 3280      CPI	R24,0x20
     30E F018      BCS	0x0312
     30F E086      LDI	R24,6
     310 9380 0074 STS	clock_speed,R24
(0241)           if (EEPROMread((int)&eeprom_sck_period)!=clock_speed) EEPROMwrite((int)&eeprom_sck_period,clock_speed);
     312 E000      LDI	R16,0
     313 E010      LDI	R17,0
     314 940E 0B52 CALL	_EEPROMread
     316 9020 0074 LDS	R2,clock_speed
     318 1502      CP	R16,R2
     319 F029      BEQ	0x031F
     31A 2D22      MOV	R18,R2
     31B E000      LDI	R16,0
     31C E010      LDI	R17,0
     31D 940E 0B59 CALL	_EEPROMwrite
(0242)           spi_set_speed(clock_speed);
     31F 9100 0074 LDS	R16,clock_speed
     321 940E 00DD CALL	_spi_set_speed
(0243)           break;
     323 C009      RJMP	0x032D
(0244)         case PARAM_RESET_POLARITY:
(0245)           reset_polarity = msg_buffer[2];
     324 9020 0077 LDS	R2,msg_buffer+2
     326 9220 0073 STS	reset_polarity,R2
(0246)           break;
     328 C004      RJMP	0x032D
(0247)         case PARAM_CONTROLLER_INIT:
(0248)           param_controller_init = msg_buffer[2];
     329 9020 0077 LDS	R2,msg_buffer+2
     32B 9220 0072 STS	param_controller_init,R2
(0249)           break;
(0250)         }
(0251) 
(0252)       num_bytes = 2;
     32D E082      LDI	R24,2
     32E E090      LDI	R25,0
     32F 015C      MOVW	R10,R24
(0253)       msg_buffer[0] = CMD_SET_PARAMETER;
     330 9380 0075 STS	msg_buffer,R24
(0254)       msg_buffer[1] = STATUS_CMD_OK;
     332 2422      CLR	R2
     333 9220 0076 STS	msg_buffer+1,R2
(0255)     }
     335 C798      RJMP	0x0ACE
(0256)   //////////////////////////////////////
(0257)   //CMD_GET_PARAMETER
(0258)   //////////////////////////////////////
(0259)   else if (cmd==CMD_GET_PARAMETER)
     336 858A      LDD	R24,Y+10
     337 3083      CPI	R24,3
     338 F009      BEQ	0x033A
     339 C043      RJMP	0x037D
(0260)     {
(0261)       switch (msg_buffer[1])
     33A 90C0 0076 LDS	R12,msg_buffer+1
     33C 2D8C      MOV	R24,R12
     33D 3980      CPI	R24,0x90
     33E F0F1      BEQ	0x035D
     33F 3981      CPI	R24,0x91
     340 F0F9      BEQ	0x0360
     341 3982      CPI	R24,0x92
     342 F101      BEQ	0x0363
     343 E982      LDI	R24,0x92
     344 158C      CP	R24,R12
     345 F030      BCS	0x034C
     346 2D8C      MOV	R24,R12
     347 3880      CPI	R24,0x80
     348 F071      BEQ	0x0357
     349 3881      CPI	R24,0x81
     34A F079      BEQ	0x035A
     34B C025      RJMP	0x0371
     34C 2D8C      MOV	R24,R12
     34D 3988      CPI	R24,0x98
     34E F0B9      BEQ	0x0366
     34F 3988      CPI	R24,0x98
     350 F100      BCS	0x0371
     351 2D8C      MOV	R24,R12
     352 398E      CPI	R24,0x9E
     353 F0B1      BEQ	0x036A
     354 398F      CPI	R24,0x9F
     355 F0C1      BEQ	0x036E
     356 C01A      RJMP	0x0371
(0262)         {
(0263)         case PARAM_BUILD_NUMBER_LOW:
(0264)           tmp = CONFIG_PARAM_BUILD_NUMBER_LOW;
     357 2400      CLR	R0
     358 8A0A      STD	Y+18,R0
(0265)           break;
     359 C017      RJMP	0x0371
(0266)         case PARAM_BUILD_NUMBER_HIGH:
(0267)           tmp = CONFIG_PARAM_BUILD_NUMBER_HIGH;
     35A 2400      CLR	R0
     35B 8A0A      STD	Y+18,R0
(0268)           break;
     35C C014      RJMP	0x0371
(0269)         case PARAM_HW_VER:
(0270)           tmp = CONFIG_PARAM_HW_VER;
     35D E08F      LDI	R24,0xF
     35E 8B8A      STD	Y+18,R24
(0271)           break;
     35F C011      RJMP	0x0371
(0272)         case PARAM_SW_MAJOR:
(0273)           tmp = CONFIG_PARAM_SW_MAJOR;
     360 E082      LDI	R24,2
     361 8B8A      STD	Y+18,R24
(0274)           break;
     362 C00E      RJMP	0x0371
(0275)         case PARAM_SW_MINOR:
(0276)           tmp = CONFIG_PARAM_SW_MINOR;
     363 E08A      LDI	R24,0xA
     364 8B8A      STD	Y+18,R24
(0277)           break;
     365 C00B      RJMP	0x0371
(0278)         case PARAM_SCK_DURATION:
(0279)           tmp = clock_speed;
     366 9020 0074 LDS	R2,clock_speed
     368 8A2A      STD	Y+18,R2
(0280)           break;
     369 C007      RJMP	0x0371
(0281)         case PARAM_RESET_POLARITY:
(0282)           tmp = reset_polarity;
     36A 9020 0073 LDS	R2,reset_polarity
     36C 8A2A      STD	Y+18,R2
(0283)           break;
     36D C003      RJMP	0x0371
(0284)         case PARAM_CONTROLLER_INIT:
(0285)           tmp = param_controller_init;
     36E 9020 0072 LDS	R2,param_controller_init
     370 8A2A      STD	Y+18,R2
(0286)           break;
(0287)         }
(0288) 
(0289)       num_bytes = 3;
     371 E083      LDI	R24,3
     372 E090      LDI	R25,0
     373 015C      MOVW	R10,R24
(0290)       msg_buffer[0] = CMD_GET_PARAMETER;
     374 9380 0075 STS	msg_buffer,R24
(0291)       msg_buffer[1] = STATUS_CMD_OK;
     376 2422      CLR	R2
     377 9220 0076 STS	msg_buffer+1,R2
(0292)       msg_buffer[2] = tmp;
     379 880A      LDD	R0,Y+18
     37A 9200 0077 STS	msg_buffer+2,R0
(0293)     }
     37C C751      RJMP	0x0ACE
(0294)   //////////////////////////////////////
(0295)   //CMD_LOAD_ADDRESS
(0296)   //////////////////////////////////////
(0297)   else if (cmd==CMD_LOAD_ADDRESS)
     37D 858A      LDD	R24,Y+10
     37E 3086      CPI	R24,6
     37F F009      BEQ	0x0381
     380 C069      RJMP	0x03EA
(0298)     {
(0299)       address =  ((unsigned long)msg_buffer[1])<<24;
     381 E188      LDI	R24,0x18
     382 E090      LDI	R25,0
     383 9100 0076 LDS	R16,msg_buffer+1
     385 2711      CLR	R17
     386 2722      CLR	R18
     387 2733      CLR	R19
     388 938A      ST	R24,-Y
     389 940E 0B3A CALL	lsl32
     38B 9310 006E STS	address+1,R17
     38D 9300 006D STS	address,R16

⌨️ 快捷键说明

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