亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 24xlib.c

?? 根據三星公司提供的在linux環境下的bootloader vivi
?? C
字號:
/************************************************
 * NAME    : 24XLIB.C               *
 ************************************************/
// Revision History 
// 2001.3.15:SJS     :draft ver 0.0
// 2001.3.19:purnnamu:ChangeClockDivider() uses AsynBusMode.
// 2001.3.21:ctype.h was included for isalpha and isupper function.
// 2001.6.30:UBRDIVn calculation formula is changed 
//       UBRDIVn=( (int)(pclk/16./baud) -1 ); 
// 2001.8.25:Uart_GetIntNum() returns -1 when there is no input.
// 2001.8.25:Uart_Printf,Uart_PrintString function declaration is changed for C++

#include "def.h"
#include "option.h"
#include "24x.h"
#include "24xlib.h"
#include "24xslib.h" 

#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

extern char Image$$RW$$Limit[];

void *mallocPt=Image$$RW$$Limit;


/**************************** SYSTEM ****************************/
static int delayLoopCount=400;

void Delay(int time)
// time=0: adjust the Delay function by WatchDog timer.
// time>0: the number of loop time
// resolution of time is 100us.
{
	int i,adjust=0;
	if(time==0)
	{
	time=200;
	adjust=1;
	delayLoopCount=400;
	rWTCON=((PCLK/1000000-1)<<8)|(2<<3);    //PCLK/1M,Watch-dog disable,1/64,interrupt disable,reset disable
	rWTDAT=0xffff;//for first update
	rWTCNT=0xffff;//resolution=64us @any PCLK 
	rWTCON=((PCLK/1000000-1)<<8)|(2<<3)|(1<<5); //Watch-dog timer start
	}
	for(;time>0;time--)
	for(i=0;i<delayLoopCount;i++);
	if(adjust==1)
	{
	rWTCON=((PCLK/1000000-1)<<8)|(2<<3);//Watch-dog timer stop
	i=0xffff-rWTCNT; // 1count->64us, 200*400 cycle runtime = 64*i us
	delayLoopCount=8000000/(i*64);  //200*400:64*i=1*x:100 -> x=80000*100/(64*i)   
	}
}


/*************************** PORTS ******************************/
void Port_Init(void)
{
	//CAUTION:Follow the configuration order for setting the ports. 
	// 1) setting value(PnDAT) 
	// 2) setting control register (PnCON)
	// 3) configure pull-up resistor(PnUP)  

	//32bit data bus configuration  
	//PORT A GROUP
	//nGCS[5] nGCS[4] nGCS[3] nGCS[2] nGCS[1] nCAS[1] nCAS[0] SCKE ADDR24 ADDR23 ADDR22 ADDR21 ADDR20 ADDR19 ADDR18 ADDR17 ADDR16 ADDR0 
	//      1,      1,      1,      1,      1,      1,      1,   1,     1,     1,     1,     1,     1,     1,     1,     1,     1,    1          
	rPACON=0x3ffff; 

	//PORT B GROUP
#if (BUSWIDTH==32)
	//DATA31 DATA30 DATA29 DATA28 DATA27 DATA26 DATA25 DATA24 DATA23 DATA22 DATA21 DATA20 DATA19 DATA18 DATA17 DATA16
	//    10,    10,    10,    10,    10,    10,    10,    10,    10,    10,    10,    10,    10,    10,    10,    10
	rPBCON=0xaaaaaaaa;
	rPBUP=0xffff;
#else //BUSWIDTH=16
	//All input
	rPBCON=0x0; 
	rPBUP=0x0;
#endif

	//PORT C GROUP
	//LED_OUTPUT LED_OUTPUT LED_OUTPUT LED_OUTPUT INPUT INPUT INPUT INPUT INPUT INPUT INPUT INPUT INPUT INPUT INPUT INPUT 
	//        01,        01,        01,        01,   00,   00,   00,   00,   00,   00,   00,   00,   00,   00,   00,   00
	rPCCON=0x55000000;  
	rPCUP=0x0;  

	//PORT D GROUP
	//All input except GPD9=output
	rPDDAT=0;
	rPDCON=0x40000; 
	rPDUP=0x200; //GPD9(nDIS_OFF) pull-up resister should be turned off. GPD9 is pulled down by external resister.

	//PORT E GROUP
	//All input
	rPECON=0x0; 
	rPEUP=0x0;

	//PORT F GROUP
	//INPUT INPUT INPUT INPUT TXD[0] INPUT RXD[0]
	//   00,   00,   00,   00,    10,   00,    10
	rPFCON=0x22;
	rPFUP=0x5;

	//PORT G GROUP
	//All input
	rPGCON=0x0;
	rPGUP=0x0;

	//OPEN DRAIN CONTROL DISABLE
	rOPENCR=0x0;

	//All EINT[7:0] will be falling edge triggered. 
	rEXTINT=0x22222222; 
}


/*************************** UART ******************************/
static int whichUart=0;

void Uart_Init(int pclk,int baud)
{
	int i;
	if(pclk==0)
	pclk=PCLK;
	rUFCON0=0x0;     //FIFO disable
	rUFCON1=0x0;
	rUMCON0=0x0;
	rUMCON1=0x0;
//UART0
	rULCON0=0x3;     //Normal,No parity,1 stop,8 bit
	rUCON0=0x245;    //tx=level,rx=edge,disable timeout int.,enable rx error int.,normal,interrupt or polling
	rUBRDIV0=( (int)(pclk/16./baud) -1 );
//UART1
	rULCON1=0x3;
	rUCON1=0x245;
	rUBRDIV1=( (int)(pclk/16./baud) -1 );

	for(i=0;i<100;i++);
}


void Uart_Select(int ch)
{
	whichUart=ch;
}


void Uart_TxEmpty(int ch)
{
	if(ch==0)
	while(!(rUTRSTAT0 & 0x4)); //wait until tx shifter is empty.
	else
		while(!(rUTRSTAT1 & 0x4)); //wait until tx shifter is empty.
}


char Uart_Getch(void)
{
	if(whichUart==0)
	{       
	while(!(rUTRSTAT0 & 0x1)); //Receive data ready
	return RdURXH0();
	}
	else
	{
	while(!(rUTRSTAT1 & 0x1)); //Receive data ready
	return rURXH1;
	}
}


char Uart_GetKey(void)
{
	if(whichUart==0)
	{       
	if(rUTRSTAT0 & 0x1)    //Receive data ready
			return RdURXH0();
	else
		return 0;
	}
	else
	{
	if(rUTRSTAT1 & 0x1)    //Receive data ready
		return rURXH1;
	else
		return 0;
	}
}


void Uart_GetString(char *string)
{
	char *string2=string;
	char c;
	while((c=Uart_Getch())!='\r')
	{
	if(c=='\b')
	{
		if( (int)string2 < (int)string )
		{
		Uart_Printf("\b \b");
		string--;
		}
	}
	else 
	{
		*string++=c;
		Uart_SendByte(c);
	}
	}
	*string='\0';
	Uart_SendByte('\n');
}


int Uart_GetIntNum(void)
{
	char str[30];
	char *string=str;
	int base=10;
	int minus=0;
	int lastIndex;
	int result=0;
	int i;
	
	Uart_GetString(string);
	
	if(string[0]=='-')
	{
		minus=1;
		string++;
	}
	
	if(string[0]=='0' && (string[1]=='x' || string[1]=='X'))
	{
	base=16;
	string+=2;
	}
	
	lastIndex=strlen(string)-1;
	if(lastIndex<0)return -1;
	
	if( string[lastIndex]=='h' || string[lastIndex]=='H' )
	{
	base=16;
	string[lastIndex]=0;
	lastIndex--;
	}

	if(base==10)
	{
	result=atoi(string);
	result=minus ? (-1*result):result;
	}
	else
	{
	for(i=0;i<=lastIndex;i++)
	{
		if(isalpha(string[i]))
		{
		if(isupper(string[i]))
			result=(result<<4)+string[i]-'A'+10;
		else
			result=(result<<4)+string[i]-'a'+10;
		}
		else
		{
		result=(result<<4)+string[i]-'0';
		}
	}
	result=minus ? (-1*result):result;
	}
	return result;
}


void Uart_SendByte(int data)
{
	if(whichUart==0)
	{
	if(data=='\n')
	{
		while(!(rUTRSTAT0 & 0x2));
		Delay(10);  //because the slow response of hyper_terminal 
		WrUTXH0('\r');
	}
	while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.
	Delay(10);
	WrUTXH0(data);
	}
	else
	{
	if(data=='\n')
	{
			while(!(rUTRSTAT1 & 0x2));
		Delay(10);  //because the slow response of hyper_terminal 
		rUTXH1='\r';
	}
	while(!(rUTRSTAT1 & 0x2));  //Wait until THR is empty.
	Delay(10);
	rUTXH1=data;
	}   
}       


void Uart_SendString(const char *pt)
{
	while(*pt)
	Uart_SendByte(*pt++);
}


//If you don't use vsprintf(), the code size is reduced very much.
void Uart_Printf(const char *fmt,...)
{
	va_list ap;
	char string[256];

	va_start(ap,fmt);
	vsprintf(string,fmt,ap);
	Uart_SendString(string);
	va_end(ap);
}


/****************** S3C2400X01 EV. BOARD LED *******************/
void Led_Display(int data)
{
	rPCDAT=(rPCDAT & 0xfff) | ((data & 0xf)<<12);
}


/************************* Timer ********************************/
void Timer_Start(int divider)  //0:16us,1:32us 2:64us 3:128us
{
	rWTCON=((PCLK/1000000-1)<<8)|(divider<<3);
	rWTDAT=0xffff;
	rWTCNT=0xffff;   

	// 1/16/(65+1),nRESET & interrupt  disable
	rWTCON=((PCLK/1000000-1)<<8)|(divider<<3)|(1<<5);   
}



int Timer_Stop(void)
{
	rWTCON=((PCLK/1000000-1)<<8);
	return (0xffff-rWTCNT);
}



/************************** MPLL *******************************/
void ChangeMPllValue(int mdiv,int pdiv,int sdiv)
{
	rMPLLCON=(mdiv<<12)|(pdiv<<4)|sdiv;
}


/************************ HCLK, PCLK ***************************/

void ChangeClockDivider(int hdivn,int pdivn)
// hdivn:pdivn FCLK:HCLK:PCLK
// 0:0         1:1:1 
// 0:1         1:1:2 
// 1:0         1:2:2
// 1:1         1:2:4
{
	rCLKDIVN=(hdivn<<1)|pdivn;    
	if(hdivn)MMU_SetAsyncBusMode();
	else MMU_SetFastBusMode();
}


/************************** UPLL *******************************/
void ChangeUPllValue(int mdiv,int pdiv,int sdiv)
{
	rUPLLCON=(mdiv<<12)|(pdiv<<4)|sdiv;
}


/************************* General Library **********************/
void * malloc(unsigned nbyte) 
/*Very simple; Use malloc() & free() like Stack*/
//void *mallocPt=Image$$RW$$Limit;
{
	void *returnPt=mallocPt;

	mallocPt= (int *)mallocPt+nbyte/4+((nbyte%4)>0); //to align 4byte

	if( (int)mallocPt > HEAPEND )
	{
	mallocPt=returnPt;
	return NULL;
	}
	return returnPt;
}


void free(void *pt)
{
	mallocPt=pt;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩性生活| 国产xxx精品视频大全| 午夜欧美大尺度福利影院在线看| 欧美性videosxxxxx| 91精品国产色综合久久不卡电影 | 国产成人亚洲精品青草天美| 久久久99精品久久| 一本大道久久a久久综合婷婷| 欧美日韩免费一区二区三区视频| 欧美精品一区二区精品网| 中文字幕一区三区| 午夜精品久久久久久不卡8050| 久久成人免费电影| 色诱视频网站一区| 精品少妇一区二区| 一区二区在线电影| 极品少妇xxxx精品少妇| 91亚洲大成网污www| 日韩欧美综合在线| 亚洲人成网站精品片在线观看| 美国三级日本三级久久99| 婷婷中文字幕综合| 9久草视频在线视频精品| 欧美一级日韩不卡播放免费| 中文字幕亚洲一区二区av在线 | 最新日韩av在线| 久久免费午夜影院| 波多野结衣在线一区| 99久久99久久精品免费看蜜桃| 91精品国产综合久久久久久| 亚洲私人黄色宅男| 国产一区二区在线视频| 欧美精品在线观看播放| 亚洲欧美在线aaa| 国产一区二区三区免费观看| 欧美区在线观看| 亚洲三级免费电影| 国产黄人亚洲片| 日韩三级电影网址| 亚洲国产毛片aaaaa无费看 | 7878成人国产在线观看| 中文字幕中文字幕一区| 国模一区二区三区白浆| 欧美精品vⅰdeose4hd| 亚洲免费观看高清完整版在线| 国产一区二区三区| 日韩欧美中文字幕一区| 五月激情六月综合| 成人欧美一区二区三区在线播放| 亚洲欧美成人一区二区三区| 国产凹凸在线观看一区二区| 精品国产亚洲一区二区三区在线观看| 午夜久久久久久久久久一区二区| 99精品欧美一区二区三区小说 | 国产亚洲欧洲997久久综合 | 东方aⅴ免费观看久久av| 日韩欧美自拍偷拍| 免费在线观看一区二区三区| 欧美日韩一区三区四区| 夜夜爽夜夜爽精品视频| 色综合咪咪久久| 制服丝袜亚洲色图| 午夜精品久久久久久久久久久 | 欧美a级一区二区| 欧美剧在线免费观看网站| 一区二区三区毛片| 色女孩综合影院| 一区二区三区高清不卡| 色噜噜久久综合| 美女视频黄 久久| 欧美日韩黄色一区二区| 亚洲国产一区二区在线播放| 欧美视频在线播放| 亚洲线精品一区二区三区八戒| 91成人在线精品| 亚洲一区二区五区| 欧美日韩免费一区二区三区视频| 性做久久久久久久免费看| 欧美顶级少妇做爰| 美女视频一区在线观看| 精品福利二区三区| 国产成人综合网| 国产精品久久久一本精品 | 亚洲一区在线视频| 久久99国产精品久久99| 国产综合久久久久影院| 国产精品自拍一区| 日本一区二区综合亚洲| 暴力调教一区二区三区| 亚洲精品大片www| 欧美日韩国产高清一区二区 | 国产精品另类一区| 91丨porny丨国产入口| 亚洲综合免费观看高清完整版| 欧美日韩一区二区三区四区| 免费欧美高清视频| 久久久美女毛片| 97久久精品人人做人人爽| 亚洲一区在线观看网站| 欧美电影免费提供在线观看| 国产精品一区二区视频| 亚洲色图视频网| 欧美精品 国产精品| 国产一区二区三区免费观看| 国产精品亲子乱子伦xxxx裸| 欧美专区亚洲专区| 久久精品国产99| 欧美人牲a欧美精品| 国产尤物一区二区在线| 亚洲欧美激情插| 91麻豆精品国产自产在线观看一区 | 成人在线综合网站| 亚洲自拍欧美精品| 精品国产1区二区| 在线免费观看成人短视频| 91首页免费视频| 视频在线观看91| 久久精品日韩一区二区三区| 久久精品人人做人人爽97| 轻轻草成人在线| 中文字幕一区二区三中文字幕| 欧美日韩情趣电影| 成人久久18免费网站麻豆| 日韩av电影免费观看高清完整版在线观看| 久久久国产精品麻豆| 91久久一区二区| 国产精品综合网| 午夜天堂影视香蕉久久| 中文字幕免费观看一区| 56国语精品自产拍在线观看| www.亚洲精品| 久久99精品久久久久久久久久久久| 亚洲视频免费在线观看| 成人中文字幕在线| 久久精品国产秦先生| 一区二区三区四区高清精品免费观看| 欧美大尺度电影在线| 91福利资源站| 成a人片亚洲日本久久| 看电视剧不卡顿的网站| 亚洲综合一区二区精品导航| 亚洲国产岛国毛片在线| 欧美不卡一二三| 久久久久久亚洲综合| 欧美日韩精品一区二区三区蜜桃 | 国产精品福利影院| 精品日韩在线一区| 欧美男人的天堂一二区| 99re在线精品| 国产一区二区三区四区五区美女| 日日夜夜免费精品| 亚洲综合一区二区精品导航| 国产精品第四页| 国产肉丝袜一区二区| 日韩欧美国产电影| 欧美日韩亚洲国产综合| 欧美在线观看一二区| 成人av在线一区二区| 国产美女娇喘av呻吟久久| 免费成人性网站| 久久久久久麻豆| 欧美成人一区二区三区| 538prom精品视频线放| 在线免费亚洲电影| 色噜噜久久综合| 色综合天天综合网天天看片| 不卡的电影网站| 豆国产96在线|亚洲| 福利电影一区二区三区| 国产主播一区二区| 精品一区二区在线免费观看| k8久久久一区二区三区| 成人午夜视频在线| 国产69精品久久777的优势| 国产精品2024| 国产成人鲁色资源国产91色综 | 国产欧美综合在线观看第十页 | jiyouzz国产精品久久| 国产99一区视频免费| 国产伦精一区二区三区| 国产精品夜夜爽| 国产成人99久久亚洲综合精品| 国产黄色成人av| gogo大胆日本视频一区| 成a人片亚洲日本久久| 91在线国内视频| 日本伦理一区二区| 国产精品资源站在线| 国产精品一级在线| 成人av在线观| 色婷婷综合久久久中文字幕| 色天天综合久久久久综合片| 在线观看亚洲精品视频| 欧美日韩电影一区| 91麻豆精品国产91久久久使用方法 | 国产精品一品二品| 夫妻av一区二区| 99re成人精品视频| 欧美日韩黄色一区二区| 精品少妇一区二区三区在线视频|