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

📄 startup.c

📁 ads7843+5个串口+1个定时器+at91rm9200测试源程序
💻 C
📖 第 1 页 / 共 2 页
字号:

	return TRUE;
}
//---------------------------------------------------------------------------------------------------------------------
//【  版          本  】v1.0
//【  函  数  名  称  】
//【 创建人及创建时间 】gliethttp 2007-12-27
//【 修改人及修改时间 】
//【  修  改  原  因  】
//【  功  能  描  述  】
//---------------------------------------------------------------------------------------------------------------------
void AT91F_InitSDRAM()
{
	/* Configure PIOC as peripheral (D16/D31) */
	AT91C_BASE_PIOC->PIO_ASR = 0xFFFF0000 ;
	AT91C_BASE_PIOC->PIO_BSR = 0x0 ;
	AT91C_BASE_PIOC->PIO_PDR = 0xFFFF0000 ;

	/* Setup MEMC to support all connected memories (CS0 = FLASH; CS1=SDRAM) */
	*AT91C_EBI_CSA = 0x02 ;

	/* Init SDRAM */
	*AT91C_SDRC_CR = 0x2188c155 ; ////////////////////////
	*AT91C_SDRC_MR = 0x2 ;
	*(AT91_REG *)0x20000000 = 0 ;
	*AT91C_SDRC_MR = 0x4 ;
	*(AT91_REG *)0x20000000 = 0 ;
	*(AT91_REG *)0x20000000 = 0 ;
	*(AT91_REG *)0x20000000 = 0 ;
	*(AT91_REG *)0x20000000 = 0 ;
	*(AT91_REG *)0x20000000 = 0 ;
	*(AT91_REG *)0x20000000 = 0 ;
	*(AT91_REG *)0x20000000 = 0 ;
	*(AT91_REG *)0x20000000 = 0 ;
	*AT91C_SDRC_MR = 0x3 ;
	*(AT91_REG *)0x20000080 = 0 ;
	*AT91C_SDRC_TR = 0x2e0 ;
	*(AT91_REG *)0x20000000 = 0 ;
	*AT91C_SDRC_MR = 0x0 ;
	*(AT91_REG *)0x20000000 = 0 ;
}
//---------------------------------------------------------------------------------------------------------------------
//【  版          本  】v1.0
//【  函  数  名  称  】
//【 创建人及创建时间 】gliethttp 2007-12-27
//【 修改人及修改时间 】
//【  修  改  原  因  】
//【  功  能  描  述  】
//---------------------------------------------------------------------------------------------------------------------
void AT91F_LowLevelInit()
{
//*
uint8 status;
   //step1
    status = AT91F_WaitForMainClockFrequency();
    //step2
    AT91F_InitFlash();
    //step3
    status = AT91F_InitClocks(PLLAR,PLLBR,MCKR);
    
    //step4
    AT91F_InitSDRAM();
    
//    AT91F_InitEBI_SMC2_ForDisplayController();
 	AT91F_AIC_Open(
		AT91C_BASE_AIC,          // pointer to the AIC registers
		AT91C_AIC_BRANCH_OPCODE, // IRQ exception vector
		0,     // FIQ exception vector
		0,      // AIC default handler
		0,   // AIC spurious handler
		0);                      // Protect mode
	// Perform 8 End Of Interrupt Command to make s齬e AIC will not Lock out nIRQ 
	//8个中断优先级
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);

 //2007-03-16 gliethttp
 //XDBGU_ini中会引用内存,这样会触发异常
 //所以应该精简函数
 //	XDBGU_ini();
 
 	{
 		AT91F_DBGU_CfgPIO();
		AT91F_DBGU_CfgPMC();
		AT91F_US_Configure (
			(AT91PS_USART) AT91C_BASE_DBGU,				// DBGU基址
			GMCLK,            							// GMCLK
			AT91C_US_ASYNC_MODE ,        				// mode Register to be programmed
			115200 ,                   					// baudrate to be programmed
			0);
		AT91F_US_EnableTx((AT91PS_USART) AT91C_BASE_DBGU);
 	}
 	
 	//gliethttp 2007-04-23
 	//使能指令cache
	__asm
	{
		mrc p15,0,r0,c1,c0,0
	 	orr r0,r0,(1<<12)
	  	mcr p15,0,r0,c1,c0,0
	}
	#if __xHardDog_OK
	xHardDog_Install();
	#endif
//*/
}
//---------------------------------------------------------------------------------------------------------------------
//【  版          本  】v1.0
//【  函  数  名  称  】
//【 创建人及创建时间 】gliethttp 2007-03-14
//【 修改人及修改时间 】
//【  修  改  原  因  】
//【  功  能  描  述  】
//---------------------------------------------------------------------------------------------------------------------
#define xsrc_base	0x10010000
#define xdst_base	0x20000000
extern uint32 Image$$RO$$Base;
extern uint32 Image$$ZI$$Limit;
void xCopy2SDRAM(void)
{register uint32 *src,*dst;
 register uint32 i;
 register uint32 dot;
 register uint32 xcode_size	= (uint32)&Image$$ZI$$Limit - (uint32)&Image$$RO$$Base;
 register uint32 xdot_size;
 #if __xHardDog_OK
 register uint8 local_feed = 0;
 #endif
 	xxxdprintf("\r\nFlash自启动代码加载...\r\n");
	src = (uint32*)xsrc_base;
	dst = (uint32*)xdst_base;
	//#define xcode_size (1024*500/4)
	xcode_size = 1024*500;
	xcode_size /= 4;
	xcode_size += 1;
	xdot_size   = (xcode_size/10);
	for(i = 0,dot = 0;i < xcode_size;i++)
	{
		*dst++ = *src++;
		dot++;
		if(dot >= (xcode_size/10))
		{
			#if __xHardDog_OK
			{
				if(local_feed % 2)xHardDog_ON();//对IO操作是比较耗时的
	    		else xHardDog_OFF();
	    		++local_feed;
	    	}
	    	#endif
			dot = 0;
			xxxdprintf(".");
		}
	}
	xxxdprintf("\r\n加载中\n\r");
}
//---------------------------------------------------------------------------------------------------------------------
//【  版          本  】v1.0
//【  函  数  名  称  】
//【 创建人及创建时间 】gliethttp 2007-03-14
//【 修改人及修改时间 】
//【  修  改  原  因  】实现Flash中代码自拷贝后的remap
//【  功  能  描  述  】
//---------------------------------------------------------------------------------------------------------------------
void xat91_remap(void)
{
	//合成irq跳转机器码
	{uint32 *dst;
		dst = (uint32*)0x00200018;
		#if 1
		*dst = 0xe51fff20;//在0地址合成ldr pc, [pc,#-0xF20]指令
		#else
		*dst = 0xe59ff000;
		dst = (uint32*)0x00200020;
		*dst = 0x20000018;
		#endif
		
		
	}
	
	{//uint16 i;
	 uint16 *dst;
	 char *p;
		dst = (uint16*)0x00200000;
		AT91C_BASE_MC->MC_RCR = AT91C_MC_RCB;
		
		dst = (uint16*)0x500;
		*dst = 0;
		p = (char*)0x500;
		*p = 0x88;
		
		if((*dst & 0xff) != 0x88)
		{
			AT91C_BASE_MC->MC_RCR = AT91C_MC_RCB;
			xxxdprintf("二次重映射!\r\n");
		}else xxxdprintf("重映射!\r\n");
	}
}
//⊙⊙⊙
//⊙⊙⊙完了⊙⊙⊙
//⊙⊙⊙over⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙⊙

⌨️ 快捷键说明

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