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

📄 2410bios.c

📁 这是2410的驱动代码,有flash和lcd驱动
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "def.h"
#include "2410addr.h"
#include "2410lib.h"
#include "2410slib.h"
#include "mmu.h"
#include "uart.h"
#include "timer.h"
#include "39vf160.h"
#include "LCD_LTS350Q1_PE1.h"

U32	Console_Uart = 0;
U32	Console_Baud = 115200;
char boot_params[256];

static short DsAutoBoot;
static short NorFlashSupport;

//======================================================
void HaltUndef(void)
{
	puts("Undefined instruction exception!!!\n");
//	printf("Undefined instruction at 0x%08x!!!\n", addr);
//	printf("0x%08x, 0x%08x\n", rSRCPND, rINTPND);
	while(1);
}

void HaltSwi(void)
{
    puts("SWI exception!!!\n");
    while(1);
}

void HaltPabort(void)
{
    puts("Pabort exception!!!\n");
    while(1);
}

void HaltDabort(void)
{
    puts("Dabort exception!!!\n");
    while(1);
}

void Isr_Init(void)
{
    pISR_UNDEF  = (U32)HaltUndef;
    pISR_SWI    = (U32)HaltSwi;
    pISR_PABORT = (U32)HaltPabort;
    pISR_DABORT = (U32)HaltDabort;
    rINTMOD = 0x0;	  		// All=IRQ mode
    rINTMSK = BIT_ALLMSK;	// All interrupt is masked.        
}

//==========================================================
extern U32 downloadAddress, downloadFileSize;

void call_linux(U32 a0, U32 a1, U32 a2);
void Test_Lcd_Tft_TX06D18(void);
void UsbMain(void);
void comdownload(void);
void NandWrite(void);
void NandLoadRun(void);
void NandErase(void);

void GetBootParam(void)
{
	U16 cmd_cnt = 0;
	char tmp[256] = {0};
	
	puts("Set boot params, press Enter to finish, Esc to abort\n");
	while(1) {
		char c = getch();
		if(c==0x1b) 
			return;
		
		if(c==0xd)
			break;
		if((c==0x8)&&(cmd_cnt)) {			
			cmd_cnt -= 1;
			tmp[cmd_cnt] = 0;
			putch(c);
			putch(' ');
			putch(c);
		}
		else {
			if(cmd_cnt<255) {
				putch(c);
				tmp[cmd_cnt++] = c;
				tmp[cmd_cnt]   = 0;
			}
		}		
	}

	for(cmd_cnt=0; tmp[cmd_cnt]; cmd_cnt++)
		boot_params[cmd_cnt] = tmp[cmd_cnt];
	boot_params[cmd_cnt] = 0;			
}

static __inline int RtcAlmWake(void)
{	
	return ((rBCDHOUR==rALMHOUR)&&(rBCDMIN==rALMMIN));
}

//inv-off时,CMPB为0时占空比最小,但仍有1个,与CNTB相等时则全输出0,比CNTB小1时占空比最大
//mode=0时,lvl为亮度百分比, mode=1时,lvl=1则亮度加10%,lvl=0则亮度减10%
void LcdBackLightCtl(U8 mode, U8 lvl)
{
/*	static int BackLightVal = 101;
	int r;

	if(mode) {
		r = BackLightVal;
		r += lvl?10:-10;
	} else
		r = lvl;
	
	if(r>100)
		r = 100;
	if(r<0)
		r = 0;
			
	if(r==BackLightVal)
		return;
	
	BackLightVal = r;
	if(r==100)
		r = 99;			//most 990
	if(r==0)
		r = 100;		//least 1000
		
	rGPBCON &= ~3;		//set GPB0 as tout0, pwm output
	rGPBCON |= 2;
		
	rTCFG0 &= ~0xff;
	rTCFG0 |= 15;		//prescaler = 15+1
	rTCFG1 &= ~0xf;
	rTCFG1 |= 2;		//mux = 1/8
	rTCNTB0 = 1000;
	rTCMPB0 = r*10;		//10 multiple
	rTCON &= ~0x1f;
	rTCON |= 0xb;		//disable deadzone, auto-reload, inv-off, update TCNTB0&TCMPB0, start timer 0
	rTCON &= ~2;		//clear manual update bit
*/
	rGPBCON &= ~3;		//set GPB0 as tout0, pwm output
	rGPBCON |= 1;
	rGPBDAT &= ~1;	
}

void LcdBackLightOff(void)
{
	LcdBackLightCtl(0, 0);
	rGPBCON &= ~3;
	rGPBCON |= 1;		//set GPB0 as output
	rGPBDAT &= ~1;		//output 0;
}

static int __inline PwrKeyWake(void)
{
	int ret;
	
	ret = rEINTPEND&(1<<11);	//check if EINT15 is pending
	rEINTPEND = ret;			//clear pending		
	return ret;
}

static void PwrKeyChkInit(void)
{
/*	rGPGCON &= ~0xfcf0;
	rGPGCON |= 0xa000;		//set GPG7 as EINT15, GPG2,3,5,6 as input
	rGPGUP  &= ~0x80;		//GPG7 pull-up enable
	rGPGUP  |= 0x6c;		//GPG2,3,5,6 pull-up disable
	
	rGPBCON &= ~0xf000;		//set GPB6,7 as input
	rGPBUP  |= 0xc0;		//GPG6,7 pull-up disable	
	rGPECON &= ~0xfc00000;
	rGPECON |= 0x4000000;	//set GPE11,12 as input, GPE13 as output
	rGPEUP  |= 0x1800;		//GPE11,12 pull-up disable
	
	rGPEDAT &= ~0x2000;		//GPE13 output lo*/
	
	rGPGCON &= ~((3<<12)|(3<<4)|(3<<22)|(3<<6));
	rGPGCON |= 2<<6;	//set GPG3 as eint11
	rGPGUP  |= (1<<6)|(1<<2)|(1<<3);	//GPG6,2,3 input, pull-up disable
	rGPGUP  &= ~(1<<3);					//GPG3 input, pull-up enable
	
	rGPECON &= ~((3<<26)|(3<<22));
	rGPECON |= (1<<22);		//GPE11 output
	rGPEUP  |= 1<<13;		//GPE13 input pull-up disable
	rGPEDAT &= ~(1<<13);	//GPE11 output 0
	
	rGPFCON &= ~((3<<4)|3);
	rGPFUP  |= (1<<2)|1;	
}

static volatile int PwrKeyChkEnd;

//每10ms检测一次,每次读10次键,共测750ms,第一次跳过.
static void PwrKeyChk(U32 i)
{
	static U16 chk_times = 75;
	U32 cnt;
	
	if(chk_times!=75) {
		for(cnt=0; cnt<10; cnt++)
			if(rGPGDAT&(1<<3)) {
				PwrKeyChkEnd = -1;
				return;
			}
	}	
	chk_times--;
	if(!chk_times) {
		PwrKeyChkEnd = 0;
		ReleaseBiosTimerEvent(i);
	}
}

//关闭所有IO口控制的电源,将不用的IO口设置为输入并禁止上拉
static void ConfigPowerOffGPIO(void)
{
	 //CAUTION:Follow the configuration order for setting the ports. 
    // 1) setting value(GPnDAT) 
    // 2) setting control register  (GPnCON)
    // 3) configure pull-up resistor(GPnUP)  

    //32bit data bus configuration  
    //*** PORT A GROUP
    //Ports  : GPA22 GPA21  GPA20 GPA19 GPA18 GPA17 GPA16 GPA15 GPA14 GPA13 GPA12  
    //Signal : nFCE nRSTOUT nFRE   nFWE  ALE   CLE  nGCS5 nGCS4 nGCS3 nGCS2 nGCS1 
    //Binary :  1     0      1  , 1   1   1    1   ,  1     1     1     1
    //Ports  : GPA11   GPA10  GPA9   GPA8   GPA7   GPA6   GPA5   GPA4   GPA3   GPA2   GPA1  GPA0
    //Signal : ADDR26 ADDR25 ADDR24 ADDR23 ADDR22 ADDR21 ADDR20 ADDR19 ADDR18 ADDR17 ADDR16 ADDR0 
    //Binary :  1       1      1      1   , 1       1      1      1   ,  1       1     1      0
    rGPACON = 0x7fffff;

    //**** PORT B GROUP
    //Ports  : GPB10    GPB9    GPB8    GPB7    GPB6     GPB5    GPB4   GPB3   GPB2     GPB1      GPB0
    //Signal : nXDREQ0 nXDACK0 nXDREQ1 nXDACK1 nSS_KBD nDIS_OFF L3CLOCK L3DATA L3MODE nIrDATXDEN Keyboard
    //Setting: INPUT  OUTPUT   INPUT  OUTPUT   INPUT   OUTPUT   OUTPUT OUTPUT OUTPUT   OUTPUT    OUTPUT 
    //Binary :   00  ,  01       00  ,   01      00   ,  01       01  ,   01     01   ,  01        01  
    rGPBCON = 0x0;
    rGPBUP  = 0x7ff;     // The pull up function is disabled GPB[10:0]

    //*** PORT C GROUP
    //Ports  : GPC15 GPC14 GPC13 GPC12 GPC11 GPC10 GPC9 GPC8  GPC7   GPC6   GPC5 GPC4 GPC3  GPC2  GPC1 GPC0
    //Signal : VD7   VD6   VD5   VD4   VD3   VD2   VD1  VD0 LCDVF2 LCDVF1 LCDVF0 VM VFRAME VLINE VCLK LEND  
    //Binary :  10   10  , 10    10  , 10    10  , 10   10  , 10     10  ,  10   10 , 10     10 , 10   10
    rGPCCON = 0x0;
    rGPCUP  = 0xffff;     // The pull up function is disabled GPC[15:0] 

    //*** PORT D GROUP
    //Ports  : GPD15 GPD14 GPD13 GPD12 GPD11 GPD10 GPD9 GPD8 GPD7 GPD6 GPD5 GPD4 GPD3 GPD2 GPD1 GPD0
    //Signal : VD23  VD22  VD21  VD20  VD19  VD18  VD17 VD16 VD15 VD14 VD13 VD12 VD11 VD10 VD9  VD8
    //Binary : 10    10  , 10    10  , 10    10  , 10   10 , 10   10 , 10   10 , 10   10 ,10   10
    rGPDCON = 0x0;
    rGPDUP  = 0xffff;     // The pull up function is disabled GPD[15:0]

    //*** PORT E GROUP
    //Ports  : GPE15  GPE14 GPE13   GPE12   GPE11   GPE10   GPE9    GPE8     GPE7  GPE6  GPE5   GPE4  
    //Signal : IICSDA IICSCL SPICLK SPIMOSI SPIMISO SDDATA3 SDDATA2 SDDATA1 SDDATA0 SDCMD SDCLK I2SSDO 
    //Binary :  10     10  ,  10      10  ,  10      10   ,  10      10   ,   10    10  , 10     10  ,     
    //-------------------------------------------------------------------------------------------------------
    //Ports  :  GPE3   GPE2  GPE1    GPE0    
    //Signal : I2SSDI CDCLK I2SSCLK I2SLRCK     
    //Binary :  10     10  ,  10      10 
    rGPECON = 0x0;
    rGPEUP  = 0xffff;     // The pull up function is disabled GPE[15:0]

    //*** PORT F GROUP
    //Ports  : GPF7   GPF6   GPF5   GPF4      GPF3     GPF2  GPF1   GPF0
    //Signal : nLED_8 nLED_4 nLED_2 nLED_1 nIRQ_PCMCIA EINT2 KBDINT EINT0
    //Setting: Output Output Output Output    EINT3    EINT2 EINT1  EINT0
    //Binary :  01      01 ,  01     01  ,     10       10  , 10     10
    rGPFCON = 0x0;
    rGPFUP  = 0xff;     // The pull up function is disabled GPF[7:0]

    //*** PORT G GROUP
    //Ports  : GPG15 GPG14 GPG13 GPG12 GPG11    GPG10    GPG9     GPG8     GPG7      GPG6    
    //Signal : nYPON  YMON nXPON XMON  EINT19 DMAMODE1 DMAMODE0 DMASTART KBDSPICLK KBDSPIMOSI
    //Setting: nYPON  YMON nXPON XMON  EINT19  Output   Output   Output   SPICLK1    SPIMOSI1
    //Binary :   11    11 , 11    11  , 10      01    ,   01       01   ,    11         11
    //-----------------------------------------------------------------------------------------
    //Ports  :    GPG5       GPG4    GPG3    GPG2    GPG1    GPG0    

⌨️ 快捷键说明

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