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

📄 main3.objdump

📁 FPGA flash 编程序,使用CYCLONE和FLASH
💻 OBJDUMP
📖 第 1 页 / 共 5 页
字号:

main3.elf:     file format elf32-littlenios2

Disassembly of section .text:

001000a0 <_start>:
  1000a0:	00400034 	movhi	at,0
  1000a4:	08420004 	addi	at,at,2048
  1000a8:	00800804 	movi	r2,32

001000ac <text_init>:
  1000ac:	0801483a 	initi	at
  1000b0:	0883c83a 	sub	at,at,r2
  1000b4:	007ffd16 	blt	zero,at,1000ac <text_init>
  1000b8:	00400034 	movhi	at,0
  1000bc:	08410004 	addi	at,at,1024
  1000c0:	00800104 	movi	r2,4

001000c4 <data_init>:
  1000c4:	08000033 	initd	0(at)
  1000c8:	0883c83a 	sub	at,at,r2
  1000cc:	007ffd16 	blt	zero,at,1000c4 <data_init>
  1000d0:	06c00834 	movhi	sp,32
  1000d4:	dec00004 	addi	sp,sp,0
  1000d8:	06800474 	movhi	gp,17
  1000dc:	d6af0804 	addi	gp,gp,-17376
  1000e0:	01036ec0 	call	1036ec <alt_main>
  1000e4:	0009303a 	rdctl	r4,status
  1000e8:	00fffff4 	movhi	r3,65535
  1000ec:	18ffff94 	ori	r3,r3,65534
  1000f0:	20c8703a 	and	r4,r4,r3
  1000f4:	2001703a 	wrctl	status,r4

001000f8 <crt0_end>:
  1000f8:	003fff06 	br	1000f8 <crt0_end>

001000fc <wait_tiny>:
// Private Routines

// This routine actually takes about 3 us on a 33.2aaaMHz Nios32.
static wait_tiny(int x_us)
{
  1000fc:	deffff04 	addi	sp,sp,-4
  for(;x_us>0;x_us--)
  100100:	01000a0e 	bge	zero,r4,10012c <wait_tiny+0x30>
  100104:	01800184 	movi	r6,6
  100108:	017fffc4 	movi	r5,-1
  {
	  volatile unsigned long iTimeout = 50000/8250;//nasys_clock_freq_1000 / 8250;
  10010c:	d9800035 	stwio	r6,0(sp)
	  while (iTimeout--)
  100110:	d8800037 	ldwio	r2,0(sp)
  100114:	10bfffc4 	addi	r2,r2,-1
  100118:	d8800035 	stwio	r2,0(sp)
  10011c:	d8c00037 	ldwio	r3,0(sp)
  100120:	197ffb1e 	bne	r3,r5,100110 <wait_tiny+0x14>
  100124:	213fffc4 	addi	r4,r4,-1
  100128:	013ff816 	blt	zero,r4,10010c <wait_tiny+0x10>
	  {
	    ;
	  }
	}
}
  10012c:	dec00104 	addi	sp,sp,4
  100130:	f800283a 	ret

00100134 <sst39vf160_flash_write_16>:



// Write val to the given flash address.
// Return value: 0 on success, -1 on failure.
int sst39vf160_flash_write_16 (
    unsigned short *flash_base,
    unsigned short *addr,
    unsigned short val  )
{
  100134:	defffb04 	addi	sp,sp,-20
  100138:	dc000315 	stw	r16,12(sp)
  10013c:	dc400215 	stw	r17,8(sp)
  100140:	dc800115 	stw	r18,4(sp)
  100144:	dcc00015 	stw	r19,0(sp)
  100148:	dfc00415 	stw	ra,16(sp)
  volatile unsigned short *fb = flash_base;
  10014c:	200f883a 	mov	r7,r4
  volatile unsigned short *a = addr;
  unsigned short us1, us2;
  int result = 0;
  100150:	0025883a 	mov	r18,zero
na_uart1->np_uartcontrol=0;
#ifdef nasys_main_flash
  if (-1 == (int)fb)
  100154:	04ffffc4 	movi	r19,-1
    fb = nasys_main_flash;
#endif // nasys_main_flash

  fb[0x555] = 0xAA; // 1st cycle  addr = 0x5555, data = AA
  fb[0x2aa] = 0x55; // 2nd cycle  addr = 0x2aaa, data = 55
  fb[0x555] = 0xA0; // 3rd cycle  addr = 0x5555, data = A0

 
  *a = val;     // 4th cycle  addr = PA, data = PD

  // Delay 40us
  wait_tiny(45);
  100158:	01000b44 	movi	r4,45
  10015c:	90000335 	stwio	zero,12(r18)
  100160:	2821883a 	mov	r16,r5
  100164:	3023883a 	mov	r17,r6
  100168:	3cc01826 	beq	r7,r19,1001cc <sst39vf160_flash_write_16+0x98>
  10016c:	00802a84 	movi	r2,170
  100170:	3882aaad 	sthio	r2,2730(r7)
  100174:	00c01544 	movi	r3,85
  100178:	38c1552d 	sthio	r3,1364(r7)
  10017c:	00802804 	movi	r2,160
  100180:	3882aaad 	sthio	r2,2730(r7)
  100184:	8180002d 	sthio	r6,0(r16)
  100188:	01000fc0 	call	1000fc <wait_tiny>

  us1 = *a;
  10018c:	80c0002b 	ldhuio	r3,0(r16)
  if (us1 != val)
  100190:	88bfffcc 	andi	r2,r17,65535
  100194:	18ffffcc 	andi	r3,r3,65535
  100198:	18800126 	beq	r3,r2,1001a0 <sst39vf160_flash_write_16+0x6c>
    result = -1;
  10019c:	9825883a 	mov	r18,r19
na_uart1->np_uartcontrol=np_uartcontrol_irrdy_mask;
  1001a0:	00c02004 	movi	r3,128
  1001a4:	0005883a 	mov	r2,zero
  1001a8:	10c00335 	stwio	r3,12(r2)
  return result;
}
  1001ac:	9005883a 	mov	r2,r18
  1001b0:	dfc00417 	ldw	ra,16(sp)
  1001b4:	dc000317 	ldw	r16,12(sp)
  1001b8:	dc400217 	ldw	r17,8(sp)
  1001bc:	dc800117 	ldw	r18,4(sp)
  1001c0:	dcc00017 	ldw	r19,0(sp)
  1001c4:	dec00504 	addi	sp,sp,20
  1001c8:	f800283a 	ret
  1001cc:	01c80004 	movi	r7,8192
  1001d0:	003fe606 	br	10016c <sst39vf160_flash_write_16+0x38>

001001d4 <nr_flash_write_hw>:

// ---------------------------------------------
// Public Routines

// Write val to the given flash address.
// Return value: 0 on success, -1 on failure.
int nr_flash_write_hw (
    unsigned short *flash_base,
    unsigned short *addr,
    unsigned short val  )
{

  return (sst39vf160_flash_write_16(flash_base,addr,val));
  1001d4:	31bfffcc 	andi	r6,r6,65535
  1001d8:	02000434 	movhi	r8,16
  1001dc:	42004d04 	addi	r8,r8,308
  1001e0:	4000683a 	jmp	r8

001001e4 <nr_flash_erase_block>:
}

// Erase the flash sector at sector_address.
// Return value: 0 on success, -1 on failure.

int nr_flash_erase_sector (
      unsigned short *flash_base,
      unsigned short *sector_address  )
{
	return(nr_flash_erase_block(flash_base,sector_address));
}
	

int nr_flash_erase_block  (
      unsigned short *flash_base,
      unsigned short *sector_address  )
{
  1001e4:	defffc04 	addi	sp,sp,-16
  1001e8:	dc800015 	stw	r18,0(sp)
  volatile unsigned short *fb = (unsigned short *) flash_base;
  1001ec:	2007883a 	mov	r3,r4
  volatile unsigned short *sa = (unsigned short *) sector_address;
  int result=0;

#ifdef nasys_main_flash
  if (-1 == (int)fb)
  1001f0:	04bfffc4 	movi	r18,-1
  1001f4:	dc000215 	stw	r16,8(sp)
  1001f8:	dc400115 	stw	r17,4(sp)
  1001fc:	dfc00315 	stw	ra,12(sp)
    fb = nasys_main_flash;
#endif // nasys_main_flash

  fb[0x555] = 0xAA; // 1st cycle  addr = 5555, data = AA
  100200:	01802a84 	movi	r6,170
  fb[0x2aa] = 0x55; // 2nd cycle  addr = 2aaa, data = 55
  100204:	01c01544 	movi	r7,85
  fb[0x555] = 0x80; // 3rd cycle  addr = 5555, data = 80
  fb[0x555] = 0xAA; // 4th cycle  addr = 5555, data = AA
  fb[0x2aa] = 0x55; // 5th cycle  addr = 2aaa, data = 55

  *sa = 0x30; // 6th cycle  addr = XXX, data = 50

  // Delay 50ms
  nr_delay(50);
  100208:	01000c84 	movi	r4,50
  10020c:	2821883a 	mov	r16,r5
  100210:	0023883a 	mov	r17,zero
  100214:	1c801526 	beq	r3,r18,10026c <nr_flash_erase_block+0x88>
  100218:	1982aaad 	sthio	r6,2730(r3)
  10021c:	19c1552d 	sthio	r7,1364(r3)
  100220:	00802004 	movi	r2,128
  100224:	1882aaad 	sthio	r2,2730(r3)
  100228:	1982aaad 	sthio	r6,2730(r3)
  10022c:	19c1552d 	sthio	r7,1364(r3)
  100230:	00800c04 	movi	r2,48
  100234:	8080002d 	sthio	r2,0(r16)
  100238:	01037600 	call	103760 <nr_delay>

  if (0xFF != *sa)  // done? note: 8bit data
  10023c:	80c0002b 	ldhuio	r3,0(r16)
  100240:	00803fc4 	movi	r2,255
  100244:	18ffffcc 	andi	r3,r3,65535
  100248:	18800126 	beq	r3,r2,100250 <nr_flash_erase_block+0x6c>
    result = -1;	// erase error
  10024c:	9023883a 	mov	r17,r18

  return result;
}
  100250:	8805883a 	mov	r2,r17
  100254:	dfc00317 	ldw	ra,12(sp)
  100258:	dc000217 	ldw	r16,8(sp)
  10025c:	dc400117 	ldw	r17,4(sp)
  100260:	dc800017 	ldw	r18,0(sp)
  100264:	dec00404 	addi	sp,sp,16
  100268:	f800283a 	ret
  10026c:	00c80004 	movi	r3,8192
  100270:	003fe906 	br	100218 <nr_flash_erase_block+0x34>

00100274 <nr_flash_erase_sector>:
  100274:	02000434 	movhi	r8,16
  100278:	42007904 	addi	r8,r8,484
  10027c:	4000683a 	jmp	r8

00100280 <nr_flash_erase_sector_4kB>:


int nr_flash_erase_sector_4kB  (
      unsigned short *flash_base,
      unsigned short *sector_address  )
{
  100280:	defffc04 	addi	sp,sp,-16
  100284:	dc000215 	stw	r16,8(sp)
  100288:	dc400115 	stw	r17,4(sp)
  10028c:	dc800015 	stw	r18,0(sp)
  100290:	dfc00315 	stw	ra,12(sp)
  volatile unsigned short *fb = (unsigned short *) flash_base;
  100294:	2007883a 	mov	r3,r4
  volatile unsigned short *sa = (unsigned short *) sector_address;
  int result=0;
  100298:	0023883a 	mov	r17,zero

na_uart1->np_uartcontrol=0;

#ifdef nasys_main_flash
  if (-1 == (int)fb)
  10029c:	04bfffc4 	movi	r18,-1
    fb = nasys_main_flash;
#endif // nasys_main_flash

  fb[0x555] = 0xAA; // 1st cycle  addr = 5555, data = AA
  1002a0:	01802a84 	movi	r6,170
  fb[0x2aa] = 0x55; // 2nd cycle  addr = 2aaa, data = 55
  1002a4:	01c01544 	movi	r7,85
  fb[0x555] = 0x80; // 3rd cycle  addr = 5555, data = 80
  fb[0x555] = 0xAA; // 4th cycle  addr = 5555, data = AA
  fb[0x2aa] = 0x55; // 5th cycle  addr = 2aaa, data = 55

  *sa = 0x30; // 6th cycle  addr = XXX, data = 30

  // Delay 50ms
  nr_delay(100);
  1002a8:	01001904 	movi	r4,100
  1002ac:	88000335 	stwio	zero,12(r17)
  1002b0:	2821883a 	mov	r16,r5
  1002b4:	1c801826 	beq	r3,r18,100318 <nr_flash_erase_sector_4kB+0x98>
  1002b8:	1982aaad 	sthio	r6,2730(r3)
  1002bc:	19c1552d 	sthio	r7,1364(r3)
  1002c0:	00802004 	movi	r2,128
  1002c4:	1882aaad 	sthio	r2,2730(r3)
  1002c8:	1982aaad 	sthio	r6,2730(r3)
  1002cc:	19c1552d 	sthio	r7,1364(r3)
  1002d0:	00800c04 	movi	r2,48
  1002d4:	8080002d 	sthio	r2,0(r16)
  1002d8:	01037600 	call	103760 <nr_delay>

  if (0xFF != *sa)  // done? note: 8bit data
  1002dc:	80c0002b 	ldhuio	r3,0(r16)
  1002e0:	00803fc4 	movi	r2,255
  1002e4:	18ffffcc 	andi	r3,r3,65535
  1002e8:	18800126 	beq	r3,r2,1002f0 <nr_flash_erase_sector_4kB+0x70>
    result = -1;	// erase error
  1002ec:	9023883a 	mov	r17,r18

na_uart1->np_uartcontrol=np_uartcontrol_irrdy_mask;
  1002f0:	00c02004 	movi	r3,128
  1002f4:	0005883a 	mov	r2,zero
  1002f8:	10c00335 	stwio	r3,12(r2)
  return result;
}
  1002fc:	8805883a 	mov	r2,r17
  100300:	dfc00317 	ldw	ra,12(sp)
  100304:	dc000217 	ldw	r16,8(sp)
  100308:	dc400117 	ldw	r17,4(sp)
  10030c:	dc800017 	ldw	r18,0(sp)
  100310:	dec00404 	addi	sp,sp,16
  100314:	f800283a 	ret
  100318:	00c80004 	movi	r3,8192
  10031c:	003fe606 	br	1002b8 <nr_flash_erase_sector_4kB+0x38>

00100320 <nr_flash_erase>:


// Erase the entire flash.
// Return value: 0 on success, -1 on failure.

int nr_flash_erase(unsigned short *flash_base)
{
  100320:	defffc04 	addi	sp,sp,-16
  100324:	dc000215 	stw	r16,8(sp)
  100328:	dc800015 	stw	r18,0(sp)
  10032c:	2021883a 	mov	r16,r4
  volatile unsigned char *fb = (unsigned char*) flash_base;
  int result = 0;

#ifdef nasys_main_flash
  if (-1 == (int)fb)
  100330:	04bfffc4 	movi	r18,-1
  100334:	dc400115 	stw	r17,4(sp)
  100338:	dfc00315 	stw	ra,12(sp)
  {
    fb = nasys_main_flash;
  }
#endif // nasys_main_flash

  //result = erase_flash_single_command(fb);
	// Erase the entire flash in one command. AKA CHIP ERASE sst39vf160
  fb[0x555] = 0xAA; // 1st cycle  addr = 0x5555, data = AA
  10033c:	00ffea84 	movi	r3,-86
  fb[0x2aa] = 0x55; // 2nd cycle  addr = 0x2aaa, data = 55
  100340:	01401544 	movi	r5,85
  fb[0x555] = 0x80; // 3rd cycle  addr = 0x5555, data = 80
  fb[0x555] = 0xAA; // 4th cycle  addr = 0x5555, data = AA
  fb[0x2aa] = 0x55; // 5th cycle  addr = 0x2aaa, data = 55
  fb[0x555] = 0x10; // 6th cycle  addr = 0x5555, data = 10

  //Delay 200ms
  nr_delay(200);
  100344:	01003204 	movi	r4,200
  100348:	0023883a 	mov	r17,zero
  10034c:	84801c26 	beq	r16,r18,1003c0 <nr_flash_erase+0xa0>
  100350:	80c15565 	stbio	r3,1365(r16)
  100354:	8140aaa5 	stbio	r5,682(r16)
  100358:	00bfe004 	movi	r2,-128
  10035c:	80815565 	stbio	r2,1365(r16)
  100360:	80c15565 	stbio	r3,1365(r16)
  100364:	8140aaa5 	stbio	r5,682(r16)
  100368:	00800404 	movi	r2,16
  10036c:	80815565 	stbio	r2,1365(r16)
  100370:	01037600 	call	103760 <nr_delay>
  
  if(0xff == *fb)
  100374:	80c00023 	ldbuio	r3,0(r16)
  100378:	00803fc4 	movi	r2,255
  10037c:	18c03fcc 	andi	r3,r3,255
  100380:	18800726 	beq	r3,r2,1003a0 <nr_flash_erase+0x80>
  	result = -1;
  
  return result;
}
  100384:	8805883a 	mov	r2,r17
  100388:	dfc00317 	ldw	ra,12(sp)
  10038c:	dc000217 	ldw	r16,8(sp)
  100390:	dc400117 	ldw	r17,4(sp)
  100394:	dc800017 	ldw	r18,0(sp)
  100398:	dec00404 	addi	sp,sp,16
  10039c:	f800283a 	ret
  1003a0:	9023883a 	mov	r17,r18
  1003a4:	8805883a 	mov	r2,r17
  1003a8:	dfc00317 	ldw	ra,12(sp)
  1003ac:	dc000217 	ldw	r16,8(sp)
  1003b0:	dc400117 	ldw	r17,4(sp)
  1003b4:	dc800017 	ldw	r18,0(sp)
  1003b8:	dec00404 	addi	sp,sp,16
  1003bc:	f800283a 	ret
  1003c0:	04080004 	movi	r16,8192
  1003c4:	003fe206 	br	100350 <nr_flash_erase+0x30>

001003c8 <nr_flash_write>:


int nr_flash_write (
		unsigned short *flash_base,
    unsigned short *addr,
    unsigned short val    )
{
	return(sst39vf160_flash_write_16 (flash_base, addr,   val));
  1003c8:	31bfffcc 	andi	r6,r6,65535
  1003cc:	02000434 	movhi	r8,16
  1003d0:	42004d04 	addi	r8,r8,308
  1003d4:	4000683a 	jmp	r8

001003d8 <nr_flash_write_buffer>:
}

/**
// Return value: 0 on success, -1 on failure.
// Note: the integer "size" is given as a number of half-words to 
// write.   How convenient.  We write this 8-bit-wide flash one byte
// at a time (of course).
int nr_flash_write_buffer    (
    unsigned short *flash_base,
    unsigned short *start_address,
    unsigned short *buffer,

⌨️ 快捷键说明

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