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

📄 spi_2dpj_master.lss

📁 arm的功能测试模块
💻 LSS
字号:

spi_2dpj_master.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000002be  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         0000000a  00800060  000002be  00000352  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000019  0080006a  0080006a  0000035c  2**0
                  ALLOC
  3 .noinit       00000000  00800083  00800083  0000035c  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  0000035c  2**0
                  CONTENTS
  5 .debug_aranges 00000014  00000000  00000000  0000035c  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_pubnames 000000cf  00000000  00000000  00000370  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_info   0000028d  00000000  00000000  0000043f  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_abbrev 000000d5  00000000  00000000  000006cc  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_line   000001c6  00000000  00000000  000007a1  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_str    00000017  00000000  00000000  00000967  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

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

00000054 <__ctors_end>:
  54:	11 24       	eor	r1, r1
  56:	1f be       	out	0x3f, r1	; 63
  58:	cf e5       	ldi	r28, 0x5F	; 95
  5a:	d4 e0       	ldi	r29, 0x04	; 4
  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:	ee eb       	ldi	r30, 0xBE	; 190
  68:	f2 e0       	ldi	r31, 0x02	; 2
  6a:	02 c0       	rjmp	.+4      	; 0x70

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

00000070 <.do_copy_data_start>:
  70:	aa 36       	cpi	r26, 0x6A	; 106
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	aa e6       	ldi	r26, 0x6A	; 106
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80

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

00000080 <.do_clear_bss_start>:
  80:	a3 38       	cpi	r26, 0x83	; 131
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e
  86:	0c 94 43 01 	jmp	0x286

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

0000008e <disp>:
//***************************************************
//七段数码管显示函数
//*************************************************** 
void disp(unsigned char data)
{ DDRB=0xFF;
  8e:	cf 93       	push	r28
  90:	df 93       	push	r29
  92:	cd b7       	in	r28, 0x3d	; 61
  94:	de b7       	in	r29, 0x3e	; 62
  96:	21 97       	sbiw	r28, 0x01	; 1
  98:	0f b6       	in	r0, 0x3f	; 63
  9a:	f8 94       	cli
  9c:	de bf       	out	0x3e, r29	; 62
  9e:	0f be       	out	0x3f, r0	; 63
  a0:	cd bf       	out	0x3d, r28	; 61
  a2:	89 83       	std	Y+1, r24	; 0x01
  a4:	8f ef       	ldi	r24, 0xFF	; 255
  a6:	80 93 37 00 	sts	0x0037, r24
  DDRA=0xFF;
  aa:	8f ef       	ldi	r24, 0xFF	; 255
  ac:	80 93 3a 00 	sts	0x003A, r24
  PORTA&=~(1<<6);
  b0:	80 91 3b 00 	lds	r24, 0x003B
  b4:	8f 7b       	andi	r24, 0xBF	; 191
  b6:	80 93 3b 00 	sts	0x003B, r24
  PORTB=data;
  ba:	89 81       	ldd	r24, Y+1	; 0x01
  bc:	80 93 38 00 	sts	0x0038, r24
  c0:	21 96       	adiw	r28, 0x01	; 1
  c2:	0f b6       	in	r0, 0x3f	; 63
  c4:	f8 94       	cli
  c6:	de bf       	out	0x3e, r29	; 62
  c8:	0f be       	out	0x3f, r0	; 63
  ca:	cd bf       	out	0x3d, r28	; 61
  cc:	df 91       	pop	r29
  ce:	cf 91       	pop	r28
  d0:	08 95       	ret

000000d2 <fill_tx_buffer>:
 }


//***************************************************
// 要发送的数据加载到发送缓冲区的函数fill_tx_buffer()
//*************************************************** 
void fill_tx_buffer(void)
{
  d2:	cf 93       	push	r28
  d4:	df 93       	push	r29
  d6:	cd b7       	in	r28, 0x3d	; 61
  d8:	de b7       	in	r29, 0x3e	; 62
  da:	2a 97       	sbiw	r28, 0x0a	; 10
  dc:	0f b6       	in	r0, 0x3f	; 63
  de:	f8 94       	cli
  e0:	de bf       	out	0x3e, r29	; 62
  e2:	0f be       	out	0x3f, r0	; 63
  e4:	cd bf       	out	0x3d, r28	; 61
  uchar SPI_TxBuf[SPI_TX_BUFFER_MASK]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  e6:	8a e0       	ldi	r24, 0x0A	; 10
  e8:	de 01       	movw	r26, r28
  ea:	11 96       	adiw	r26, 0x01	; 1
  ec:	e0 e6       	ldi	r30, 0x60	; 96
  ee:	f0 e0       	ldi	r31, 0x00	; 0
  f0:	01 90       	ld	r0, Z+
  f2:	0d 92       	st	X+, r0
  f4:	8a 95       	dec	r24
  f6:	e1 f7       	brne	.-8      	; 0xf0
  f8:	2a 96       	adiw	r28, 0x0a	; 10
  fa:	0f b6       	in	r0, 0x3f	; 63
  fc:	f8 94       	cli
  fe:	de bf       	out	0x3e, r29	; 62
 100:	0f be       	out	0x3f, r0	; 63
 102:	cd bf       	out	0x3d, r28	; 61
 104:	df 91       	pop	r29
 106:	cf 91       	pop	r28
 108:	08 95       	ret

0000010a <read_rx_buffer>:
 }


//***************************************************
// 从接收缓冲区读出数据的函数read_rx_buffer() 
//*************************************************** 
void read_rx_buffer(void) 
{
 10a:	cf 93       	push	r28
 10c:	df 93       	push	r29
 10e:	cd b7       	in	r28, 0x3d	; 61
 110:	de b7       	in	r29, 0x3e	; 62
 /*for(uint i=1;i<SPI_TX_BUFFER_SIZE;i++)
  {disp(SPI_RxBuf[i]);
    for (uint k=0;k<50 ;k++)  _delay_ms(20);}*/
if(SPI_RxBuf[1]==0xc0 && SPI_RxBuf[2]==0xf9) 
 112:	80 91 78 00 	lds	r24, 0x0078
 116:	80 3c       	cpi	r24, 0xC0	; 192
 118:	49 f5       	brne	.+82     	; 0x16c
 11a:	80 91 79 00 	lds	r24, 0x0079
 11e:	89 3f       	cpi	r24, 0xF9	; 249
 120:	29 f5       	brne	.+74     	; 0x16c
  if (SPI_RxBuf[3]==0xa4 && SPI_RxBuf[4]==0xb0)
 122:	80 91 7a 00 	lds	r24, 0x007A
 126:	84 3a       	cpi	r24, 0xA4	; 164
 128:	09 f5       	brne	.+66     	; 0x16c
 12a:	80 91 7b 00 	lds	r24, 0x007B
 12e:	80 3b       	cpi	r24, 0xB0	; 176
 130:	e9 f4       	brne	.+58     	; 0x16c
    if(SPI_RxBuf[5]==0x99 && SPI_RxBuf[6]==0x92 )
 132:	80 91 7c 00 	lds	r24, 0x007C
 136:	89 39       	cpi	r24, 0x99	; 153
 138:	c9 f4       	brne	.+50     	; 0x16c
 13a:	80 91 7d 00 	lds	r24, 0x007D
 13e:	82 39       	cpi	r24, 0x92	; 146
 140:	a9 f4       	brne	.+42     	; 0x16c
	 if(SPI_RxBuf[7]==0x82 && SPI_RxBuf[8]==0xf8) 
 142:	80 91 7e 00 	lds	r24, 0x007E
 146:	82 38       	cpi	r24, 0x82	; 130
 148:	89 f4       	brne	.+34     	; 0x16c
 14a:	80 91 7f 00 	lds	r24, 0x007F
 14e:	88 3f       	cpi	r24, 0xF8	; 248
 150:	69 f4       	brne	.+26     	; 0x16c
        if (SPI_RxBuf[9]==0x80 && SPI_RxBuf[10]==0x90)
 152:	80 91 80 00 	lds	r24, 0x0080
 156:	80 38       	cpi	r24, 0x80	; 128
 158:	49 f4       	brne	.+18     	; 0x16c
 15a:	80 91 81 00 	lds	r24, 0x0081
 15e:	80 39       	cpi	r24, 0x90	; 144
 160:	29 f4       	brne	.+10     	; 0x16c
	PORTC&=~(1<<5); //
 162:	80 91 35 00 	lds	r24, 0x0035
 166:	8f 7d       	andi	r24, 0xDF	; 223
 168:	80 93 35 00 	sts	0x0035, r24
 16c:	df 91       	pop	r29
 16e:	cf 91       	pop	r28
 170:	08 95       	ret

00000172 <__vector_10>:
  }


//****************************************** 
// SPI 中断服务程序 interrupt [SPI_STC]:11
//****************************************** 
 SIGNAL (SIG_SPI) 
{   
 172:	1f 92       	push	r1
 174:	0f 92       	push	r0
 176:	0f b6       	in	r0, 0x3f	; 63
 178:	0f 92       	push	r0
 17a:	11 24       	eor	r1, r1
 17c:	8f 93       	push	r24
 17e:	9f 93       	push	r25
 180:	ef 93       	push	r30
 182:	ff 93       	push	r31
 184:	cf 93       	push	r28
 186:	df 93       	push	r29
 188:	cd b7       	in	r28, 0x3d	; 61
 18a:	de b7       	in	r29, 0x3e	; 62
  SPI_RxBuf[SPI_RxHead] = SPDR;    //从ISP口读出收到的字节  
 18c:	80 91 6a 00 	lds	r24, 0x006A
 190:	99 27       	eor	r25, r25
 192:	fc 01       	movw	r30, r24
 194:	e9 58       	subi	r30, 0x89	; 137
 196:	ff 4f       	sbci	r31, 0xFF	; 255
 198:	80 91 2f 00 	lds	r24, 0x002F
 19c:	80 83       	st	Z, r24
  if (SPI_RxHead  == SPI_RX_BUFFER_MASK)   //如果是接收帧的最后一个数据   
 19e:	80 91 6a 00 	lds	r24, 0x006A
 1a2:	8a 30       	cpi	r24, 0x0A	; 10
 1a4:	31 f4       	brne	.+12     	; 0x1b2
        { 
         SPI_RxHead = 0;                         //已接收数据还原 
 1a6:	10 92 6a 00 	sts	0x006A, r1
         spi_trans_com=1;                        //置接收完成标志
 1aa:	81 e0       	ldi	r24, 0x01	; 1
 1ac:	80 93 82 00 	sts	0x0082, r24
 1b0:	05 c0       	rjmp	.+10     	; 0x1bc
        } 
   else 
        {    
         SPI_RxHead++;              //已接收数据计数器加1 
 1b2:	80 91 6a 00 	lds	r24, 0x006A
 1b6:	8f 5f       	subi	r24, 0xFF	; 255
 1b8:	80 93 6a 00 	sts	0x006A, r24
        } 
  if (Tx_counter)        //如果发送缓冲区中有待发的数据    
 1bc:	80 91 6b 00 	lds	r24, 0x006B
 1c0:	88 23       	and	r24, r24
 1c2:	e1 f0       	breq	.+56     	; 0x1fc
   {    
     --Tx_counter;   
 1c4:	80 91 6b 00 	lds	r24, 0x006B
 1c8:	81 50       	subi	r24, 0x01	; 1
 1ca:	80 93 6b 00 	sts	0x006B, r24
     SPDR=SPI_TxBuf[SPI_TxHead]; //发送一个字节数据,并调整指针    
 1ce:	80 91 6c 00 	lds	r24, 0x006C
 1d2:	99 27       	eor	r25, r25
 1d4:	fc 01       	movw	r30, r24
 1d6:	e3 59       	subi	r30, 0x93	; 147
 1d8:	ff 4f       	sbci	r31, 0xFF	; 255
 1da:	80 81       	ld	r24, Z
 1dc:	80 93 2f 00 	sts	0x002F, r24
     if (++SPI_TxHead ==SPI_TX_BUFFER_MASK) 
 1e0:	80 91 6c 00 	lds	r24, 0x006C
 1e4:	8f 5f       	subi	r24, 0xFF	; 255
 1e6:	80 93 6c 00 	sts	0x006C, r24
 1ea:	80 91 6c 00 	lds	r24, 0x006C
 1ee:	8a 30       	cpi	r24, 0x0A	; 10
 1f0:	29 f4       	brne	.+10     	; 0x1fc
	 {SPI_TxHead = 0;
 1f2:	10 92 6c 00 	sts	0x006C, r1
     Tx_counter=SPI_TX_BUFFER_MASK;  
 1f6:	8a e0       	ldi	r24, 0x0A	; 10
 1f8:	80 93 6b 00 	sts	0x006B, r24
 1fc:	df 91       	pop	r29
 1fe:	cf 91       	pop	r28
 200:	ff 91       	pop	r31
 202:	ef 91       	pop	r30
 204:	9f 91       	pop	r25
 206:	8f 91       	pop	r24
 208:	0f 90       	pop	r0
 20a:	0f be       	out	0x3f, r0	; 63
 20c:	0f 90       	pop	r0
 20e:	1f 90       	pop	r1
 210:	18 95       	reti

00000212 <spi_init>:
      }  
    }  
}    

//************************************************************** 
// SPI 初始化 (MEGA16 PB4——/SS,PB5——MOSI,PB6——MISO,PB7——SCK)
//************************************************************** 
void spi_init(void)    
{    
 212:	cf 93       	push	r28
 214:	df 93       	push	r29
 216:	cd b7       	in	r28, 0x3d	; 61
 218:	de b7       	in	r29, 0x3e	; 62
 21a:	21 97       	sbiw	r28, 0x01	; 1
 21c:	0f b6       	in	r0, 0x3f	; 63
 21e:	f8 94       	cli
 220:	de bf       	out	0x3e, r29	; 62
 222:	0f be       	out	0x3f, r0	; 63
 224:	cd bf       	out	0x3d, r28	; 61
  unsigned char temp; 
  DDRB = 0xB0;      //MISO=input and MOSI,SCK,SS = output      
 226:	80 eb       	ldi	r24, 0xB0	; 176
 228:	80 93 37 00 	sts	0x0037, r24
  PORTB = 0x40;     //MISO上拉电阻有效     
 22c:	80 e4       	ldi	r24, 0x40	; 64
 22e:	80 93 38 00 	sts	0x0038, r24
  SPCR = 0xD5;      //SPI允许,主机模式,MSB,允许SPI中断,极性方式01,1/16系统时钟速率    
 232:	85 ed       	ldi	r24, 0xD5	; 213
 234:	80 93 2d 00 	sts	0x002D, r24
  SPSR = 0x00;    
 238:	10 92 2e 00 	sts	0x002E, r1
  temp = SPSR;    
 23c:	80 91 2e 00 	lds	r24, 0x002E
 240:	89 83       	std	Y+1, r24	; 0x01
  temp = SPDR;    //清空SPI,和中断标志,使SPI空闲    
 242:	80 91 2f 00 	lds	r24, 0x002F
 246:	89 83       	std	Y+1, r24	; 0x01
 248:	21 96       	adiw	r28, 0x01	; 1
 24a:	0f b6       	in	r0, 0x3f	; 63
 24c:	f8 94       	cli
 24e:	de bf       	out	0x3e, r29	; 62
 250:	0f be       	out	0x3f, r0	; 63
 252:	cd bf       	out	0x3d, r28	; 61
 254:	df 91       	pop	r29
 256:	cf 91       	pop	r28
 258:	08 95       	ret

0000025a <spi_send>:
}    

//*************************************************************** 
//发送数据0XFF,启动发送,(接收方接收到的第一个数据为0xFF应忽略 )
//*************************************************************** 
void spi_send(void) 
{    
 25a:	cf 93       	push	r28
 25c:	df 93       	push	r29
 25e:	cd b7       	in	r28, 0x3d	; 61
 260:	de b7       	in	r29, 0x3e	; 62
    fill_tx_buffer();   //调用fill_tx_buffer函数,将要发送的数据加载到发送缓冲区 
 262:	0e 94 69 00 	call	0xd2
    spi_init();          //初始化spi为主方式 
 266:	0e 94 09 01 	call	0x212
	SPDR=0xFF;          //开始发送,接收方接收到的第一个数据为0xFF应忽略 
 26a:	8f ef       	ldi	r24, 0xFF	; 255
 26c:	80 93 2f 00 	sts	0x002F, r24
	sei();               //开总中断
 270:	78 94       	sei
	SPCR|=(1<<SPIE)|(1<<SPE);    //使能SPI,开SPI中断
 272:	80 91 2d 00 	lds	r24, 0x002D
 276:	80 6c       	ori	r24, 0xC0	; 192
 278:	80 93 2d 00 	sts	0x002D, r24
    SPI_TxHead = 0;     //已发送数据计数器清0 
 27c:	10 92 6c 00 	sts	0x006C, r1
 280:	df 91       	pop	r29
 282:	cf 91       	pop	r28
 284:	08 95       	ret

00000286 <main>:
} 

int main(void) 
{ 
 286:	cf e5       	ldi	r28, 0x5F	; 95
 288:	d4 e0       	ldi	r29, 0x04	; 4
 28a:	de bf       	out	0x3e, r29	; 62
 28c:	cd bf       	out	0x3d, r28	; 61
  PORTC=0xFF;			
 28e:	8f ef       	ldi	r24, 0xFF	; 255
 290:	80 93 35 00 	sts	0x0035, r24
  DDRC=0xFF;				//PC口设为输出高电平,灯灭   
 294:	8f ef       	ldi	r24, 0xFF	; 255
 296:	80 93 34 00 	sts	0x0034, r24
  SPI_RxHead=0;
 29a:	10 92 6a 00 	sts	0x006A, r1
  SPI_TxHead=0;
 29e:	10 92 6c 00 	sts	0x006C, r1
  Tx_counter=SPI_TX_BUFFER_MASK;
 2a2:	8a e0       	ldi	r24, 0x0A	; 10
 2a4:	80 93 6b 00 	sts	0x006B, r24
  spi_send();
 2a8:	0e 94 2d 01 	call	0x25a
  while(1) 
  { 		 
   if(spi_trans_com==1) //如果接收完成标志为1,表明有所数据已接收 
 2ac:	80 91 82 00 	lds	r24, 0x0082
 2b0:	81 30       	cpi	r24, 0x01	; 1
 2b2:	e1 f7       	brne	.-8      	; 0x2ac
          { 
            read_rx_buffer(); //调用read_rx_buffer函数,将接收到的数据从接收缓冲区读出 
 2b4:	0e 94 85 00 	call	0x10a
            spi_trans_com=0;  //读完清除接收完成标志 
 2b8:	10 92 82 00 	sts	0x0082, r1
 2bc:	f7 cf       	rjmp	.-18     	; 0x2ac

⌨️ 快捷键说明

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