📄 main3.objdump
字号:
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 + -