ch375.lss

来自「atmega32对ch375的读写程序」· LSS 代码 · 共 1,719 行 · 第 1/5 页

LSS
1,719
字号

ch375.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000033ca  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         0000003a  00800060  000033ca  0000345e  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          0000068f  0080009a  0080009a  00003498  2**0
                  ALLOC
  3 .noinit       00000000  00800729  00800729  00003498  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00003498  2**0
                  CONTENTS
  5 .stab         0000036c  00000000  00000000  00003498  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000084  00000000  00000000  00003804  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_aranges 00000014  00000000  00000000  00003888  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_pubnames 00000259  00000000  00000000  0000389c  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_info   00000b1e  00000000  00000000  00003af5  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_abbrev 000001f0  00000000  00000000  00004613  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_line   0000061d  00000000  00000000  00004803  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_str    0000048d  00000000  00000000  00004e20  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
       0:	0c 94 2a 00 	jmp	0x54 <__ctors_end>
       4:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
       8:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
       c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      10:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      14:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      18:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      1c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      20:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      24:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      28:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      2c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      30:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      34:	0c 94 1b 01 	jmp	0x236 <__vector_13>
      38:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      3c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      40:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      44:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      48:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      4c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
      50:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>

00000054 <__ctors_end>:
      54:	11 24       	eor	r1, r1
      56:	1f be       	out	0x3f, r1	; 63
      58:	cf e5       	ldi	r28, 0x5F	; 95
      5a:	d8 e0       	ldi	r29, 0x08	; 8
      5c:	de bf       	out	0x3e, r29	; 62
      5e:	cd bf       	out	0x3d, r28	; 61

00000060 <__do_copy_data>:
      60:	10 e0       	ldi	r17, 0x00	; 0
      62:	a0 e6       	ldi	r26, 0x60	; 96
      64:	b0 e0       	ldi	r27, 0x00	; 0
      66:	ea ec       	ldi	r30, 0xCA	; 202
      68:	f3 e3       	ldi	r31, 0x33	; 51
      6a:	02 c0       	rjmp	.+4      	; 0x70 <.do_copy_data_start>

0000006c <.do_copy_data_loop>:
      6c:	05 90       	lpm	r0, Z+
      6e:	0d 92       	st	X+, r0

00000070 <.do_copy_data_start>:
      70:	aa 39       	cpi	r26, 0x9A	; 154
      72:	b1 07       	cpc	r27, r17
      74:	d9 f7       	brne	.-10     	; 0x6c <.do_copy_data_loop>

00000076 <__do_clear_bss>:
      76:	17 e0       	ldi	r17, 0x07	; 7
      78:	aa e9       	ldi	r26, 0x9A	; 154
      7a:	b0 e0       	ldi	r27, 0x00	; 0
      7c:	01 c0       	rjmp	.+2      	; 0x80 <.do_clear_bss_start>

0000007e <.do_clear_bss_loop>:
      7e:	1d 92       	st	X+, r1

00000080 <.do_clear_bss_start>:
      80:	a9 32       	cpi	r26, 0x29	; 41
      82:	b1 07       	cpc	r27, r17
      84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
      86:	0c 94 63 01 	jmp	0x2c6 <main>

0000008a <__bad_interrupt>:
      8a:	0c 94 00 00 	jmp	0x0 <__vectors>

0000008e <DelayMs>:
char *pstr;

void DelayMs(uint i)//延时处理
{uint j;
 for(;i!=0;i--)
      8e:	00 97       	sbiw	r24, 0x00	; 0
      90:	39 f0       	breq	.+14     	; 0xa0 <DelayMs+0x12>
   {for(j=2000;j!=0;j--) {;}}
      92:	20 ed       	ldi	r18, 0xD0	; 208
      94:	37 e0       	ldi	r19, 0x07	; 7
      96:	22 53       	subi	r18, 0x32	; 50
      98:	30 40       	sbci	r19, 0x00	; 0
      9a:	e9 f7       	brne	.-6      	; 0x96 <DelayMs+0x8>
      9c:	01 97       	sbiw	r24, 0x01	; 1
      9e:	f7 cf       	rjmp	.-18     	; 0x8e <DelayMs>
      a0:	08 95       	ret

000000a2 <Usart_init>:
}


void Usart_init(void)  //串口初始化
{ 
	 UCSRA = 0x00;
      a2:	1b b8       	out	0x0b, r1	; 11
	 UCSRB =0x98;  //发送接收使能,使用中断方式
      a4:	88 e9       	ldi	r24, 0x98	; 152
      a6:	8a b9       	out	0x0a, r24	; 10
	 UCSRC =0X86;/* 设置帧格式: 8 个数据位, 1 个停止位*/
      a8:	86 e8       	ldi	r24, 0x86	; 134
      aa:	80 bd       	out	0x20, r24	; 32
	 UBRRH =0;//8Mhz频率,设置波特率9.6k
      ac:	10 bc       	out	0x20, r1	; 32
	 UBRRL =51;
      ae:	83 e3       	ldi	r24, 0x33	; 51
      b0:	89 b9       	out	0x09, r24	; 9
      b2:	08 95       	ret

000000b4 <Usart_Receive>:
} 
void Usart_Receive(void)  //串口接受数据
{		 
	for(uchar j=0;j<1;j++)
      b4:	90 e0       	ldi	r25, 0x00	; 0
	{
		 while(!(UCSRA&0x80));//等待接收完成
      b6:	5f 9b       	sbis	0x0b, 7	; 11
      b8:	fe cf       	rjmp	.-4      	; 0xb6 <Usart_Receive+0x2>
		 Usart_Receive_Data[j]=UDR;//接收数据
      ba:	e9 2f       	mov	r30, r25
      bc:	ff 27       	eor	r31, r31
      be:	ed 55       	subi	r30, 0x5D	; 93
      c0:	ff 4f       	sbci	r31, 0xFF	; 255
      c2:	8c b1       	in	r24, 0x0c	; 12
      c4:	80 83       	st	Z, r24
      c6:	9f 5f       	subi	r25, 0xFF	; 255
      c8:	b1 f3       	breq	.-20     	; 0xb6 <Usart_Receive+0x2>
      ca:	08 95       	ret

000000cc <Usart_Send_Str>:
	}
}

void Usart_Send_Str(char *p) //串口发送字符串 
{		 
      cc:	dc 01       	movw	r26, r24
	for(uchar j=0;*(p+j)!='\0';j++)
      ce:	90 e0       	ldi	r25, 0x00	; 0
      d0:	8c 91       	ld	r24, X
      d2:	88 23       	and	r24, r24
      d4:	69 f0       	breq	.+26     	; 0xf0 <Usart_Send_Str+0x24>
	{
		 UDR=*(p+j);//发送数据
      d6:	fd 01       	movw	r30, r26
      d8:	e9 0f       	add	r30, r25
      da:	f1 1d       	adc	r31, r1
      dc:	80 81       	ld	r24, Z
      de:	8c b9       	out	0x0c, r24	; 12
		 while(!(UCSRA&0x20));//等待发送完成
      e0:	5d 9b       	sbis	0x0b, 5	; 11
      e2:	fe cf       	rjmp	.-4      	; 0xe0 <Usart_Send_Str+0x14>
      e4:	9f 5f       	subi	r25, 0xFF	; 255
      e6:	fd 01       	movw	r30, r26
      e8:	e9 0f       	add	r30, r25
      ea:	f1 1d       	adc	r31, r1
      ec:	80 81       	ld	r24, Z
      ee:	f1 cf       	rjmp	.-30     	; 0xd2 <Usart_Send_Str+0x6>
      f0:	08 95       	ret

000000f2 <Usart_Send_Data>:
	}
}

void Usart_Send_Data(char *p,uchar n) //串口发送数据 
{		 
      f2:	9c 01       	movw	r18, r24
	for(uchar j=n;j>0;j--)
      f4:	66 23       	and	r22, r22
      f6:	51 f0       	breq	.+20     	; 0x10c <Usart_Send_Data+0x1a>
	{
		 UDR=*(p+j-1);//发送数据
      f8:	f9 01       	movw	r30, r18
      fa:	e6 0f       	add	r30, r22
      fc:	f1 1d       	adc	r31, r1
      fe:	31 97       	sbiw	r30, 0x01	; 1
     100:	80 81       	ld	r24, Z
     102:	8c b9       	out	0x0c, r24	; 12
		 while(!(UCSRA&0x20));//等待发送完成
     104:	5d 9b       	sbis	0x0b, 5	; 11
     106:	fe cf       	rjmp	.-4      	; 0x104 <Usart_Send_Data+0x12>
     108:	61 50       	subi	r22, 0x01	; 1
     10a:	f4 cf       	rjmp	.-24     	; 0xf4 <Usart_Send_Data+0x2>
     10c:	08 95       	ret

0000010e <CH375FileRead>:
#ifdef FILE_DATA_BUF_LEN
UINT8  FILE_DATA_BUF[ FILE_DATA_BUF_LEN ];	/* 外部RAM的文件数据缓冲区,缓冲区长度不小于一次读写的数据长度,起始地址建议为偶地址 */
UINT8	CH375FileRead( void )		/* 从当前文件读取数据 */
{
	mCmdParam.ReadX.mDataBuffer = &FILE_DATA_BUF[0];  /* 指向文件数据缓冲区 */
     10e:	80 ee       	ldi	r24, 0xE0	; 224
     110:	94 e0       	ldi	r25, 0x04	; 4
     112:	90 93 cb 04 	sts	0x04CB, r25
     116:	80 93 ca 04 	sts	0x04CA, r24
	return( CH375FileReadX( ) );
     11a:	0e 94 39 16 	call	0x2c72 <CH375FileReadX>
}
     11e:	99 27       	eor	r25, r25
     120:	08 95       	ret

00000122 <CH375FileWrite>:
#ifdef EN_DISK_WRITE
UINT8	CH375FileWrite( void )		/* 向当前文件写入数据 */
{
	mCmdParam.WriteX.mDataBuffer = &FILE_DATA_BUF[0];  /* 指向文件数据缓冲区 */
     122:	80 ee       	ldi	r24, 0xE0	; 224
     124:	94 e0       	ldi	r25, 0x04	; 4
     126:	90 93 cb 04 	sts	0x04CB, r25
     12a:	80 93 ca 04 	sts	0x04CA, r24
	return( CH375FileWriteX( ) );
     12e:	0e 94 26 17 	call	0x2e4c <CH375FileWriteX>
}
     132:	99 27       	eor	r25, r25
     134:	08 95       	ret

00000136 <xDelay100uS>:
#endif
#endif

/* 以下程序可以根据需要修改 */

#ifndef NO_DEFAULT_CH375_F_ENUM			/* 在应用程序中定义NO_DEFAULT_CH375_F_ENUM可以禁止默认的枚举文件程序,然后用自行编写的程序代替它 */
UINT8	CH375FileEnumer( void )			/* 枚举文件 */
{
	UINT8	status;
	status = CH375FileOpen( );
	if ( status == ERR_FOUND_NAME ) status = ERR_SUCCESS;  /* 操作成功 */
	return( status );
}
#endif

#ifndef NO_DEFAULT_CH375_F_QUERY		/* 在应用程序中定义NO_DEFAULT_CH375_F_QUERY可以禁止默认的查询当前文件的信息程序,然后用自行编写的程序代替它 */
UINT8	CH375FileQuery( void )			/* 查询当前文件的信息 */
{
	PUINT8	buf;
	UINT8	count;
	buf = (PUINT8)( & mCmdParam.Modify.mFileSize );
	for ( count = sizeof( mCmdParam.Modify ); count != 0; count -- ) {
		*buf = 0xFF;  /* 输入参数全部无效,仅查询不修改 */
		buf ++;
	}
	return( CH375FileModify( ) );
}
#endif

#ifndef NO_DEFAULT_CH375_INT			/* 在应用程序中定义NO_DEFAULT_CH375_INT可以禁止默认的中断处理程序,然后用自行编写的程序代替它 */
#if LIB_CFG_INT_EN == 0					/* CH375的INT#引脚连接方式为"查询方式" */
void xQueryInterrupt( void )			/* 查询CH375中断并更新中断状态 */
{
	while ( CH375_INT_WIRE );  /* 如果CH375的中断引脚输出高电平则等待 */
	xWriteCH375Cmd( CMD_GET_STATUS );  /* 获取当前中断状态,发出命令后至少延时2uS */
	CH375IntStatus = xReadCH375Data( );  /* 获取中断状态 */
	if ( CH375IntStatus == USB_INT_DISCONNECT ) CH375DiskStatus = DISK_DISCONNECT;  /* 检测到USB设备断开事件 */
	else if ( CH375IntStatus == USB_INT_CONNECT ) CH375DiskStatus = DISK_CONNECT;  /* 检测到USB设备连接事件 */
}
#else									/* LIB_CFG_INT_EN != 0, CH375的INT#引脚连接方式为"中断方式" */
void xQueryInterrupt( void )			/* 查询中断状态,等待硬件中断 */
{
	while ( CH375IntStatus == 0 );		/* 子程序库调用该子程序之前CH375IntStatus=0,硬件中断后,由中断服务程序置为非0的实际中断状态后返回 */
}
#ifndef CH375_INT_NO
#define CH375_INT_NO		2
#endif
#pragma interrupt_handler CH375Interrupt:CH375_INT_NO
void	CH375Interrupt( void )			/* CH375中断服务程序,由CH375的INT#的低电平或者下降沿触发单片机中断 */
{
	xWriteCH375Cmd( CMD_GET_STATUS );  /* 获取中断状态并取消中断请求 */
	CH375IntStatus = xReadCH375Data( );  /* 获取中断状态 */
	if ( CH375IntStatus == USB_INT_DISCONNECT ) CH375DiskStatus = DISK_DISCONNECT;  /* 检测到USB设备断开事件 */
	else if ( CH375IntStatus == USB_INT_CONNECT ) CH375DiskStatus = DISK_CONNECT;  /* 检测到USB设备连接事件 */
#ifdef CLEAR_INT_MARK
	CLEAR_INT_MARK( );  /* 某些单片机需要由软件清除中断标志 */
#endif
}
#endif
#endif

#ifndef NO_DEFAULT_DELAY_100US			/* 在应用程序中定义NO_DEFAULT_DELAY_100US可以禁止默认的延时100uS子程序,然后用自行编写的程序代替它 */
void xDelay100uS( void )				/* 延时100uS */
{
	UINT16	count;
	for ( count = 330; count != 0; count -- );  /* 延时100uS,6x50nS@20MHz */
     136:	8a e4       	ldi	r24, 0x4A	; 74
     138:	91 e0       	ldi	r25, 0x01	; 1
     13a:	4e 97       	sbiw	r24, 0x1e	; 30
     13c:	f1 f7       	brne	.-4      	; 0x13a <xDelay100uS+0x4>
     13e:	08 95       	ret

00000140 <xDelayAfterWrite>:
}
#endif

#ifdef EN_DISK_WRITE
#ifndef NO_DEFAULT_DELAY_WRITE			/* 在应用程序中定义NO_DEFAULT_DELAY_WRITE可以禁止默认的写操作后延时程序,然后用自行编写的程序代替它 */
void xDelayAfterWrite( void )			/* 写操作后延时 */
{
	UINT16	count;
	for ( count = 650; count != 0; count -- );  /* 延时200uS左右 */
     140:	8a e8       	ldi	r24, 0x8A	; 138
     142:	92 e0       	ldi	r25, 0x02	; 2
     144:	c2 97       	sbiw	r24, 0x32	; 50
     146:	f1 f7       	brne	.-4      	; 0x144 <xDelayAfterWrite+0x4>
     148:	08 95       	ret

0000014a <xFileNameEnumer>:
}
#endif
#endif

#ifndef NO_DEFAULT_FILE_ENUMER			/* 在应用程序中定义NO_DEFAULT_FILE_ENUMER可以禁止默认的文件名枚举回调程序,然后用自行编写的程序代替它 */
void xFileNameEnumer( void )			/* 文件名枚举回调子程序 */
{
     14a:	08 95       	ret

⌨️ 快捷键说明

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