📄 main3.objdump
字号:
int size )
{
volatile unsigned short *fb = flash_base;
int i;
int result = 0;
#ifdef nasys_main_flash
if (-1 == (int)fb)
fb = nasys_main_flash;
#endif // nasys_main_flash
for (i = 0; i < size; ++i)
{
result = sst39vf160_flash_write_16(flash_base, start_address+i, buffer[i]);
if(result)
break;
}
return result;
}
*/
static void unlock_bypass_mode(volatile unsigned short *flash_base)
{ // 065d
flash_base[0x555] = 0xAA; // unlock bypass command - cycle 1
flash_base[0x2AA] = 0x55; // unlock bypass command - cycle 2
flash_base[0x555] = 0x20; // unlock bypass command - cycle 3
}
// Turn bypass mode off, disabling fast writes and enabling normal function.
static void reset_bypass_mode(volatile unsigned short *flash_base)
{
*flash_base = 0x90; // exit unlock bypass reset command - cycle 1
*flash_base = 0x0; // exit unlock bypass reset command - cycle 2
}
static void flash_reset(volatile unsigned short *flash_base)
{
*flash_base=0xf0;
}
static int nr_flash_write_bypass(volatile unsigned short *flash_base,
volatile unsigned short *addr, unsigned short val)
{
unsigned short us1, us2;
int iTimeout;
int result = 0;
na_uart1->np_uartcontrol=0;
nm_dcache_invalidate_line(addr);
nm_icache_invalidate_line(addr);
*flash_base = 0xA0; // unlock bypass program command - 1st cycle
*addr = val; // program address and data - 2nd cycle
wait_tiny(50);
//result = await_write_complete(addr,val);
if(result)
return result;
us1 = *addr;
// ggg = *addr;
// ddd = val;
if (us1 != val)
result = -1;
return result;
na_uart1->np_uartcontrol=np_uartcontrol_irrdy_mask;
}
int nr_flash_write_buffer
(
unsigned short *flash_base,
unsigned short *start_address,
unsigned short *buffer,
int size
)
{
1003d8: defff604 addi sp,sp,-40
1003dc: df000815 stw fp,32(sp)
1003e0: dd000315 stw r20,12(sp)
1003e4: dd800115 stw r22,4(sp)
1003e8: ddc00015 stw r23,0(sp)
1003ec: dfc00915 stw ra,36(sp)
1003f0: dc000715 stw r16,28(sp)
1003f4: dc400615 stw r17,24(sp)
1003f8: dc800515 stw r18,20(sp)
1003fc: dcc00415 stw r19,16(sp)
100400: dd400215 stw r21,8(sp)
volatile unsigned short *fb = (unsigned short *) flash_base;
unsigned short *sa = (unsigned short *) start_address;
unsigned short *buf = (unsigned short *) buffer;
int i;
int result = 0;
100404: 0011883a mov r8,zero
na_uart1->np_uartcontrol=0;
#ifdef nasys_main_flash
if (-1 == (int)fb)
100408: 00bfffc4 movi r2,-1
10040c: 2029883a mov r20,r4
100410: 2839883a mov fp,r5
100414: 302f883a mov r23,r6
100418: 382d883a mov r22,r7
10041c: 40000335 stwio zero,12(r8)
100420: 20803026 beq r4,r2,1004e4 <nr_flash_write_buffer+0x10c>
100424: 00802a84 movi r2,170
100428: a082aaad sthio r2,2730(r20)
10042c: 00c01544 movi r3,85
100430: a0c1552d sthio r3,1364(r20)
100434: 00800804 movi r2,32
100438: a082aaad sthio r2,2730(r20)
fb = nasys_main_flash;
#endif // nasys_main_flash
unlock_bypass_mode(fb);
for (i = 0; i < size; ++i)
10043c: 0025883a mov r18,zero
100440: 0580180e bge zero,r22,1004a4 <nr_flash_write_buffer+0xcc>
100444: a02b883a mov r21,r20
100448: 9487883a add r3,r18,r18
10044c: 1dc5883a add r2,r3,r23
100450: 0023883a mov r17,zero
100454: 14c0000b ldhu r19,0(r2)
100458: 88000335 stwio zero,12(r17)
10045c: 1f21883a add r16,r3,fp
100460: 8000003b flushd 0(r16)
100464: 8000603a flushi r16
100468: 00802804 movi r2,160
10046c: a880002d sthio r2,0(r21)
100470: 01000c84 movi r4,50
100474: 84c0002d sthio r19,0(r16)
100478: 01000fc0 call 1000fc <wait_tiny>
10047c: 8809003a cmpeq r4,r17,zero
100480: 94800044 addi r18,r18,1
100484: 20000426 beq r4,zero,100498 <nr_flash_write_buffer+0xc0>
100488: 8080002b ldhuio r2,0(r16)
10048c: 98800226 beq r19,r2,100498 <nr_flash_write_buffer+0xc0>
100490: 047fffc4 movi r17,-1
100494: 0009883a mov r4,zero
100498: 8811883a mov r8,r17
{
result = nr_flash_write_bypass(fb, sa + i, buf[i]);
if(result)
10049c: 20000126 beq r4,zero,1004a4 <nr_flash_write_buffer+0xcc>
1004a0: 95bfe916 blt r18,r22,100448 <nr_flash_write_buffer+0x70>
1004a4: 00802404 movi r2,144
1004a8: a080002d sthio r2,0(r20)
break;
}
reset_bypass_mode(fb);
return result;
na_uart1->np_uartcontrol=np_uartcontrol_irrdy_mask;
}
1004ac: 4005883a mov r2,r8
1004b0: a000002d sthio zero,0(r20)
1004b4: dfc00917 ldw ra,36(sp)
1004b8: df000817 ldw fp,32(sp)
1004bc: dc000717 ldw r16,28(sp)
1004c0: dc400617 ldw r17,24(sp)
1004c4: dc800517 ldw r18,20(sp)
1004c8: dcc00417 ldw r19,16(sp)
1004cc: dd000317 ldw r20,12(sp)
1004d0: dd400217 ldw r21,8(sp)
1004d4: dd800117 ldw r22,4(sp)
1004d8: ddc00017 ldw r23,0(sp)
1004dc: dec00a04 addi sp,sp,40
1004e0: f800283a ret
1004e4: 05080004 movi r20,8192
1004e8: 003fce06 br 100424 <nr_flash_write_buffer+0x4c>
001004ec <delay>:
**************************************************************************/
void delay(int number)
{
while(number)
number--;
1004ec: 20000226 beq r4,zero,1004f8 <delay+0xc>
1004f0: 213fffc4 addi r4,r4,-1
1004f4: 203ffe1e bne r4,zero,1004f0 <delay+0x4>
1004f8: f800283a ret
001004fc <Transmit485>:
}
/**************************************************************************
校验双口ram目前写是否已满
***************************************************************************/
void Check_Ram_Write()
{
if(++Now_Ram_Write_Add==(unsigned char*)(BASE_ADD+0x7f1))
Now_Ram_Write_Add=(unsigned char*)(BASE_ADD+0x80);
}
/**************************************************************************
校验双口ram目前读是否已满
***************************************************************************/
void Check_Ram_Read()
{
if(++Now_Ram_Read_Add==(unsigned char*)(BASE_ADD+0x7f1))
Now_Ram_Read_Add=(unsigned char*)(BASE_ADD+0x80);
}
/*************************************************************************
帧标志检查
**************************************************************************/
void Check_Frame()
{
switch(BeginBitContent)
{
case 0:
if(Test_Bit==0)
{
BeginBitContent=1;
RevStatus=0;
}
else
BeginBitContent=0;
break;
case 1 :
if(Test_Bit==1)
{
BeginBitContent=2;
RevStatus=0;
}
else
{
BeginBitContent=1;
RevStatus=0;
}
break;
case 2 :
if(Test_Bit==1)
{
BeginBitContent=3;
RevStatus=0;
}
else
{
BeginBitContent=1;
RevStatus=0;
}
break;
case 3 :
if(Test_Bit==1)
{
BeginBitContent=4;
RevStatus=0;
}
else
{
BeginBitContent=1;
RevStatus=0;
}
break;
case 4 :
if(Test_Bit==1)
{
BeginBitContent=5;
RevStatus=0;
}
else
{
BeginBitContent=1;
RevStatus=0;
}
break;
case 5 :
if(Test_Bit==1)
{
BeginBitContent=6;
RevStatus=0;
}
else
{
BeginBitContent=1;
RevStatus=0;
}
break;
case 6 :
if(Test_Bit==1)
{
BeginBitContent=7;
RevStatus=0;
}
else
{
BeginBitContent=1;
RevStatus=0;
}
break;
case 7 :
if(Test_Bit==0)
{
BeginBitContent=0;
RevStatus=1;
}
else
{
BeginBitContent=0;
RevStatus=0;
//增加停止
}
break;
default : //例外情况下初始化原变量
BeginBitContent=0;
RevStatus=0;
break;
}
}
/**************************************************************************
透明性检查
***************************************************************************/
void Check_Transparence()
{
switch(transparence)
{
case 0 :
if(Test_Bit==1)
{
transparence=1;
transparence_valid=0;
}
else
{
transparence=0;
transparence_valid=0;
}
break;
case 1 :
if(Test_Bit==1)
{
transparence=2;
transparence_valid=0;
}
else
{
transparence=0;
transparence_valid=0;
}
break;
case 2:
if(Test_Bit==1)
{
transparence=3;
transparence_valid=0;
}
else
{
transparence=0;
transparence_valid=0;
}
break;
case 3:
if(Test_Bit==1)
{
transparence=4;
transparence_valid=0;
}
else
{
transparence=0;
transparence_valid=0;
}
break;
case 4:
if(Test_Bit==1)
{
transparence=5;
transparence_valid=0;
}
else
{
transparence=0;
transparence_valid=0;
}
break;
case 5:
if(Test_Bit==0)
{
transparence=0;
transparence_valid=1;
}
else
{
transparence=6;
transparence_valid=1;
}
break;
case 6 :
if(Test_Bit==0)
{
transparence=0;
transparence_valid=1;
RevStatus=0;
}
else
{
transparence=0;
transparence_valid=0;
RevStatus=-1;
}
}
}
/**************************************************************************
对将要发送的数据增加透明性
***************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -