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

📄 romprg.c

📁 armS3C44B0X引导启动和烧写的例子程序
💻 C
字号:
#include "option.h"
#include "44b.h"
#include "def.h"
//#include "romdef.h"
//#include "stdio.h"
//#include "stdlib.h"

#define FLASH_START_ADDR    0X0000
#define FLASH_ADDR_UNLOCK1  0X5555
#define FLASH_ADDR_UNLOCK2  0X2AAA
#define FLASH_DATA_UNLOCK1  0XAAAA
#define FLASH_DATA_UNLOCK2  0X5555
#define FLASH_DATA_WRITE    0XA0A0
#define FLASH_ERASE         0X8080
#define FLASH_ERASE_SECTOR  0X3030
#define FLASH_ERASE_BLOCK   0X5050
#define FLASH_ERASE_CHIP    0X1010
#define FLASH_SID_QUERY     0X9090
#define FLASH_CFI_QUERY     0X9898
#define FLASH_SID_EXIT      0XF0F0
#define FLASH_OP_TIMEOUT    0X10000

#define LED_PORTC10 	(1<<10)
#define LED_PORTC11		(1<<11)	
#define RAM_ADDR 		0xc000000



void (*Run)(void) = (void (*)(void))RAM_ADDR;

void PortInit(void);
void LedDisp(int LedStatus);
void CopyFromFlashToRam(INT32U* pulFlashAddr, INT32U* pulRamAddr, INT32U ulSize);
//*****************************************
//		ARM引导程序
//*****************************************
void Main(void)
{	INT32U k ;
    //INT16U *pdist,*psrc;
	rSYSCFG=CACHECFG;
	PortInit();	
	CopyFromFlashToRam((INT32U*)0x2000, (INT32U*)0xc000000, 0x2000);	
	Run();	//程序由内存引导运行
	while(1)
		{
		    LedDisp(0);
			for(k=0;k<(200*1024);k++);
			LedDisp(1);	
			for(k=0;k<(200*1024);k++);  //light one led
		}

}

//*****************************************
//		主程序从SST39VF160导入到SDRAM
//*****************************************

void CopyFromFlashToRam(INT32U* pulFlashAddr, INT32U* pulRamAddr, INT32U ulSize)
{
	INT32U *pulSource = pulFlashAddr;
	INT32U *pulDest = pulRamAddr;
	INT32U i,j,k;
	static int ledcount=0;

	ulSize/=4;
	j = ulSize / (20*1024);	
	for (i = 0; i < j; i++)
	{	
		ledcount = (ledcount +1)%2;
		LedDisp(ledcount + 1);
		for(k=0;k<(20*1024);k++)			
			*pulDest++ = *pulSource++;
	}
	
	k = ulSize % (20*1024);
	for(i=0;i<k;i++)	
		*pulDest++ = *pulSource++;
	
	LedDisp(0x03);	//program success reading from SST39VF160 to SDRAM
}
//*****************************************
//		ARM端口初始化
//*****************************************
void PortInit(void)
{
	//PORTC GROUP 
	//LED2->PC11   LED1->PC10	
	/*  15   		14    	13 		12  		11 		10 		9 		8		7		6		5		4		3		2		1		0		*/
	/*  INPUT	INTPUT	RXD1 	TXD1 	OUTPUT	OUTPUT	OUTPUT	OUTPUT	VD4		VD5		VD6		VD7		OUTPUT	OUTPUT	OUTPUT	INPUT										*/ 
	/*  00		00		11		11		01		01		01		01		11		11		11		11		01		01		01		00		*/
	rPDATC = 0xffff;		//All IO is high
	rPCONC = 0x0f55ff54;	
	rPUPC  = 0x3000;		//PULL UP RESISTOR should be enabled to I/O
}

//*****************************************
//		发光二极管显示程序
//*****************************************
void LedDisp(int LedStatus)
{
	if((LedStatus&0x01)==0x01)
		rPDATC &= (~LED_PORTC10);	//LED ON
	else
		rPDATC |= LED_PORTC10;		//LED OFF
	
	if((LedStatus&0x02)==0x02)
		rPDATC &=(~LED_PORTC11);	//LED ON
	else
		rPDATC |=LED_PORTC11;		//LED OFF
}

⌨️ 快捷键说明

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