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

📄 44blib.c

📁 运行于嵌入式系统的uCLinux的bios源码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
;************************************************************************************************************
;*				        				北京精仪达盛科技有限公司
;*                                     	     研    发    部
;*
;*                                 	     http://www.techshine.com
;*
;*--------------------------------------------- 文件信息 ----------------------------------------------------                                      
;*
;* 文件名称 : 44blib.c	
;* 文件功能 : 该文件为S3C44B0硬件平台的通用函数初始化。
;* 补充说明 : 
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : ARM7开发小组
;* 修改日期 : 2004/04/25
;* 版本声明 : V1.0.1
;*-------------------------------------------- 历史版本信息 -------------------------------------------------
;* 文件作者 : ARM7开发小组
;* 创建日期 : 2004/04/20
;* 版本声明 : v1.0.0
;*-----------------------------------------------------------------------------------------------------------
;*-----------------------------------------------------------------------------------------------------------
;************************************************************************************************************
;*/
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\def.h"
#include "..\inc\option.h"

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

#define STACKSIZE    0xa00 //SVC satck size(do not use user stack)
#define HEAPEND     (_ISR_STARTADDRESS-STACKSIZE-0x500) // = 0xc7ff000

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

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

int MCLK = MCLK_D;
/*
*************************************************************************************************************
- 函数名称 :  void Delay(int time)
- 函数说明 :  系统延时
- 输入参数 :  time
- 输出参数 :  无
*************************************************************************************************************
*/
static int delayLoopCount=400;
void Delay(int time)
{
    int i,adjust=0;

    if(time==0)
    {
		time=200;
		adjust=1;
		delayLoopCount=400;
		rWTCON=((MCLK/1000000-1)<<8)|(2<<3);    //MCLK/1M,Watch-dog disable,1/64,interrupt disable,reset disable
		rWTDAT=0xffff;//for first update
		rWTCNT=0xffff;//resolution=64us	@any MCLK 
		rWTCON=((MCLK/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=((MCLK/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)   
    }
}
/*
*************************************************************************************************************
- 函数名称 :  Port_Init(void)
- 函数说明 :  端口初始化
- 输入参数 :  无
- 输出参数 :  无
*************************************************************************************************************
*/
	//注意:应遵循配置端口的次序
	// 1) 设定端口初值 2) 配置控制寄存器 3) 配置上拉电阻寄存器
void Port_Init(void)
{
	//端口A控制组 
	//  BIT 9	   8	  7		 6		 5		 4		 3		 2		 1		 0            
	//      GPA9   GPA8  ADDR22	 ADDR21	 ADDR20	 ADDR19	 ADDR18	 ADDR17	 ADDR16	 ADDR0   	      
	//      0,	   0,	 1,      1,      1,      1,      1,      1,      1,      1    
	//      GPA9->SMCALE, GPA8->SMCCLE
	rPCONA = 0x3ff;
		
	//端口B控制组
	//  BIT  10    9     8         7         6	    5      4     3       2	    1	   0	    
	//      /CS5   /CS4  /CS3     /CS2       /CS1   0      0     /SRAS   /SCAS  SCLK   SCKE      
	//       		     ethernet NANFLASH   USB    LED    LED 	 Sdram   Sdram  Sdram  Sdram     
	//      1,      1,    1,      1,         1,     0,     0,    1,      1,     1,     1          
	rPDATB = 0x7cf;
	rPCONB = 0x7cf;
    
	//端口C控制组
	// BIT    15	  14	   13     12	 11	    10	    9		8                       
	//        O		  0		   RXD1   TXD1	 nCTS1	nCTS0   O	    M/S	                      
	//        NAN_CLE NAN_ALE  Uart1  Uart1	 nCTS1	nCTS0	NAN_CE	USB                 
	//        01	  01	   11	  11	 11	    11		01		01                      

	// BIT	  7		  6		   5	  4		 3		2		1		0
	//		  lcd	  lcd	   lcd    lcd 	 IIS	IIS		IIS		IIS
	//		  VD4	  VD5	   VD6	  VD7	 IISCLK	IISDI	IISDO	IISLRCK
	//		  11	  11	   11	  11	 11	    11	    11	    11
	rPDATC = 0xffff;	//All IO is high
	rPCONC = 0x5ff5ffff;	
	rPUPC  = 0x0000;	//PULL UP RESISTOR should be enabled to I/O

	//端口D控制组
	//  BIT   7       6      5      4      3      2      1     0                                                      
	//        VFRAME  VM     VLINE  VCLK   VD3    VD2    VD1   VDO                                                      
	//        10      10     10     10     10     10     10    10                                                     
	//rPDATD= 0xff;
	rPCOND= 0xaaaa;
	rPUPD = 0x00;
	
	//端口E控制组
	//  Bit	 8		  7	      6		  5		 4		3		2		1		0	
	//		CODECLK	  TOUT4	  TOUT3	  TOUT2	 TOUT1	TOUT0	RXD0	TXD0	IN	
	//			10	  01	  10	  10	 10		10		10		10		00	
	rPDATE = 0x1;
	rPCONE = 0x26AA8;
	rPUPE  = 0x1FE;

	//端口F控制组
	//  Bit  8		  7		   6		5		 4	      3		   2	  1       0                          
	//       out     in        out      out      nXDREQ0  nXDACK0  nWAIT  IICSDA  IICSCL                  
	//       001	 000	   001		001	     11		  11	   10	  10      10                      
	rPDATF = 0x1FF;
	rPCONF = 0x827EA;
	rPUPF  = 0x0;

	//端口G控制组
	//  BIT  7   	6      5   	  4   	 3     2   	 1      0    	 
	//       INT7   INT6   INT5   INT4   INT3  INT2  INT1   INT0     
	//       11     11     11     11     11    11    11     11       
	rPDATG = 0x00;
	rPCONG = 0xffff;
	rPUPG  = 0x0;	
	
	rSPUCR=0x7;  			//D15-D0 pull-up disable
	rEXTINT=0x22222222;       	//所有的外部硬件中断为低电平触发
	//rEXTINT=0x00;       	//所有的外部硬件中断为低电平触发
}
//***************************************************************************

/****************************************************************************
【功能说明】选择串口通道为COM0或者COM1
****************************************************************************/
static int whichUart=0;
void Uart_Select(int ch)
{
    whichUart=ch;
}
//***************************************************************************

/*
*************************************************************************************************************
- 函数名称 : Uart_Init(int mclk,int baud)
- 函数说明 : 串口初始化
- 输入参数 : mclk,baud
- 输出参数 : 无
*************************************************************************************************************
*/
void Uart_Init(int mclk,int baud)
{
    int i;
    if(mclk==0)
	mclk=MCLK;
    rUFCON0=0x0;     //FIFO disable
    rUFCON1=0x0;
    rUMCON0=0x0;
    rUMCON1=0x0;
//UART0
    rULCON0=0x3;     //Normal,No parity,1 stop,8 bit
//    rULCON0=0x7;     //Normal,No parity,2 stop,8 bit
    rUCON0=0x245;    //rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling
    rUBRDIV0=( (int)(mclk/16./baud + 0.5) -1 );
//UART1
//    rULCON1=0x7;     //Normal,No parity,2 stop,8 bit
    rULCON1=0x3;
    rUCON1=0x245;
    rUBRDIV1=( (int)(mclk/16./baud + 0.5) -1 );

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

/*
*************************************************************************************************************
- 函数名称 : Uart_TxEmpty(int port)
- 函数说明 : 等待发送转换寄存器空
- 输入参数 : port
- 输出参数 : 无
*************************************************************************************************************
*/
void Uart_TxEmpty(int ch)
{
    if(ch==0)
	while(!(rUTRSTAT0 & 0x4)); 														   //一直等到发送转换器空
    else
    	while(!(rUTRSTAT1 & 0x4)); 													   //一直等到发送转换器空.
}

/*
*************************************************************************************************************
- 函数名称 : Uart_Getch
- 函数说明 : 选择接收数据就绪的串口 
- 输入参数 : port
- 输出参数 : RdURXH0(),RdURXH1()
*************************************************************************************************************
*/
char Uart_Getch(void)
{
    if(whichUart==0)
    {	    
		while(!(rUTRSTAT0 & 0x1)); //接收数据就绪
		return RdURXH0();
    }

    else
    {
		while(!(rUTRSTAT1 & 0x1)); //接收数据就绪
		return	rURXH1;
    }
}
/*
*************************************************************************************************************
- 函数名称 : Uart_GetKey
- 函数说明 : 得到串口的键值
- 输入参数 : port
- 输出参数 : RdURXH0()或0,rURXH1或0
*************************************************************************************************************
*/
char Uart_GetKey(void)
{
    if(whichUart==0)
    {	    
		if(rUTRSTAT0 & 0x1)    //接收数据就绪
	    	    return RdURXH0();
		else
		    return 0;
    }
    else
    {
		if(rUTRSTAT1 & 0x1)    //接收数据就绪
		    return rURXH1;
		else
		    return 0;
    }
}
/*
*************************************************************************************************************
- 函数名称 : Uart_GetString(char *string)
- 函数说明 : 串口得到字符串
- 输入参数 : string
- 输出参数 : 无
*************************************************************************************************************
*/

⌨️ 快捷键说明

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