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

📄 main3.objdump

📁 FPGA flash 编程序,使用CYCLONE和FLASH
💻 OBJDUMP
📖 第 1 页 / 共 5 页
字号:
    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 + -