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

📄 44blib.c

📁 USB通信测试软件 -- 与S3C44B0的下位机通信的软件. XP驱动------------ PDIUSBD12的PC机驱动程序.USB_Test---------S3C44B0X板的USB固件程
💻 C
字号:
/*
;************************************************************************************************************
;*									 	江西师范大学理电学院创新中心
;*											 
;*                                             创新研发小组
;*--------------------------------------------- 文件信息 -----------------------------------------------------                                      
;*
;* 文件名称 : 44blib.c	
;* 文件功能 : 该文件为S3C44B0硬件平台的通用函数初始化。
;* 补充说明 : 
;*-------------------------------------------- 最新版本信息 -------------------------------------------------
;* 修改作者 : zhouhong
;* 修改日期 : 2006/04/20
;* 版本声明 : V1.0.1
;*-------------------------------------------- 历史版本信息 -------------------------------------------------
;* 文件作者 : 
;* 创建日期 : 
;* 版本声明 : 
;*-----------------------------------------------------------------------------------------------------------
;*-----------------------------------------------------------------------------------------------------------
;************************************************************************************************************
;*/
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\option.h"

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

#define STACKSIZE    0xa00 			
#define HEAPEND     (_ISR_STARTADDRESS - STACKSIZE - 0x500) 
extern char Image$$RW$$Limit[];
void *mallocPt = Image$$RW$$Limit;
static int delayLoopCount = 400;

/*
*************************************************************************************************************
- 函数名称 :  void Delay(int time)
- 函数说明 :  系统延时
- 输入参数 :  time
- 输出参数 :  无
*************************************************************************************************************
*/
void Delay(int time)
{														              // time=0: 通过看门狗定时器调整延时函数
    int i,adjust = 0;									                            // time>0: 循环时间的数目
    													                                        // 最小 100us 
    if (time == 0)
    {
		time = 200;
		adjust = 1;
		delayLoopCount = 400;
		rWTCON = ((MCLK/1000000 - 1)<<8 ) | (2<<3);  	          // 1/64, Watch-dog,nRESET,interrupt disable
	 	rWTDAT = 0xffff;
		rWTCNT = 0xffff;	 
		rWTCON = ((MCLK/1000000-1)<<8)|(2<<3)|(1<<5); 	    // 1/64,Watch-dog enable, nRESET,interrupt disable 
    }
    
    for (;time>0;time--)
		for (i=0;i<delayLoopCount;i++);
		
    if (adjust == 1)
    {
		rWTCON = ((MCLK/1000000-1)<<8)|(2<<3);
		i = 0xffff - rWTCNT;   							                            //  1count/16us?????????
		delayLoopCount = 400*100/(i*64/200);			                              //  400*100/(i*64/200)   
    }
}

/*
*************************************************************************************************************
- 函数名称 :  Port_Init(void)
- 函数说明 :  端口初始化
- 输入参数 :  无
- 输出参数 :  无
*************************************************************************************************************
*/
	//注意:应遵循配置端口的次序
	// 1) 设定端口初值 2) 配置控制寄存器 3) 配置上拉电阻寄存器
void Port_Init(void)
{
	// PORT A GROUP
	/*  BIT 9	8	7	6	5	4	3	2	1	0	*/
	/*  A24	  A23	A22	A21	A20	A19	A18	A17	A16	A0	*/	      
	/*  0		1	1	1	1	1	1	1	1	1	*/
	rPCONA = 0x1ff;	

	// PORT B GROUP
	/*  BIT 10	9		8		7		6		5		4		3		2		1		0		*/
	/*	/CS5	/CS4	/CS3	/CS2	/CS1	nWBE3	nWBE2	/SRAS	/SCAS	SCLK	SCKE	*/
	/*	EXT		NIC		8019	IDE		D12		NC		NC		Sdram	Sdram	Sdram	Sdram	*/
	/*	1,		1,   	1,   	1,    	1,    	0,      0,		1,    	1,    	1,   	1       */
	rPDATB = 0x04f;
	rPCONB = 0x3cf;    
    
	//PORT C GROUP
	//BUSWIDTH=16													*/
	/*  PC15	14		13		12		11		10		9		8	*/
	/*	o		o		RXD1	TXD1	o		o		o		o	*/
	/*	NC		NC		Uart1	Uart1	NC		NC		NC		NC	*/
	/*  01		01		11		11		01		01		01		01	*/

	/*  PC7		6		5		4		3		2		1		0	*/
	/*  o		o		o		o		o		o		o		o	*/
	/*  NC		NC		NC		NC		LED		LED		LED		LED	*/
	/*  01		01		01		01		01		01		01		01	*/
	rPDATC = 0x0000;	//All IO is low
	rPCONC = 0x5f555555;	
	rPUPC  = 0x3000;	//PULL UP RESISTOR should be enabled to I/O

	//PORT D GROUP
	/*  PORT D GROUP(I/O OR LCD)										*/
	/*  BIT7		6		5		4		3		2		1		0	*/
	/*  VF			VM		VLINE	VCLK	VD3		VD2		VD1		VD0	*/
	/*	01			01		01		01		01		01		01		01	*/
	rPDATD= 0x55;
	rPCOND= 0xaaaa;	
	rPUPD = 0x00;
	//These pins must be set only after CPU's internal LCD controller is enable
/////////////////////////////////////////////////////	
	//PORT E GROUP 
	/*  Bit 8		7		6		5		4		3		2		1		0		*/
	/*	ENDLAN		o		o		TOU2	o		o		RXD0	TXD0	FOUT	*/ 
	/*  00			01		01		10		01		01		10		10		11		*/	
	rPDATE	= 0x157;				//Beep = 10
	rPCONE	= 0x596b;				
	rPUPE	= 0xff;
	
	//PORT F GROUP
	/*  Bit8		7		6		5		 4		3		2		1		0		*/   
	/*  IISCLK		IISDI	IISDO	IISLRCK	Input	Input	Input	IICSDA	IICSCL	*/
	/*	100			100		100		100		00		00		00		10		10		*/	
	rPDATF = 0x0;
	rPCONF = 0x24900a;	 
	rPUPF  = 0x1d3;

	//PORT G GROUP
	/*  BIT7		6		5		4		3		2		1		0		*/
	/*	EINT7		EINT6	EINT5	EINT4	EINT3	EINT2	EINT1	EINT0	*/
	/*  KEY3		KEY2	KEY1	KEY0	NIC		EXT		IDE		USB		*/
	/*	11 			11      11      11      11      11      11      11		*/
	rPDATG = 0xff;
	rPCONG = 0xffff;
	rPUPG  = 0x00;	//should be enabled  

	rSPUCR= 0x4;//0x7;  //D15-D0 pull-up disable
	//rSPUCR= 0x6;  //D15-D0 pull-up enable
	rEXTINT=0x22222220;       		//所有的外部硬件中断为下降沿触发
	//rEXTINT = 0x0;				//所有的外部硬件中断为低电平触发	

}
/*
*************************************************************************************************************
- 函数名称 : ChangePllValue(int mdiv,int pdiv,int sdiv)
- 函数说明 : 改变PLL的值
- 输入参数 : int mdiv,int pdiv,int sdiv
- 输出参数 : 无
*************************************************************************************************************
*/
void ChangePllValue(int mdiv,int pdiv,int sdiv)
{
    rPLLCON = (mdiv<<12)|(pdiv<<4)|sdiv;
}

/*
*************************************************************************************************************
- 函数名称 : malloc
- 函数说明 : 动态分配函数
- 输入参数 : nbyte
- 输出参数 : 无
*************************************************************************************************************
*/
void * malloc(unsigned nbyte) 
{
    void *returnPt=mallocPt;

    mallocPt = (int *)mallocPt + nbyte/4 + ((nbyte%4)>0);                                        //对齐4字节

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

/*
*************************************************************************************************************
- 函数名称 : free
- 函数说明 : 动态释放函数
- 输入参数 : *pt
- 输出参数 : 无
*************************************************************************************************************
*/
void free(void *pt)

{
    mallocPt=pt;
}

/*
*************************************************************************************************************
- 函数名称 : Cache_Flush(void)
- 函数说明 : 高速缓存清空
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void Cache_Flush(void)
{
    int i,saveSyscfg;
    
    saveSyscfg = rSYSCFG;
    rSYSCFG = SYSCFG_0KB; 						//把CACHE变为内部RAM		      
    
    for (i=0x10004000;i<0x10004800;i+=16)    
    {					   
		*((int *)i) = 0x0;		   
    }
    rSYSCFG = saveSyscfg; 			    
}

/*
*************************************************************************************************************
- 函数名称 : Timer_Start
- 函数说明 : 启动定时器
- 输入参数 : divider
- 输出参数 : 无
*************************************************************************************************************
*/
void Timer_Start(int divider)  											       //0:16us,1:32us 2:64us 3:128us
{
    rWTCON = ((MCLK/1000000-1)<<8)|(divider<<3);
    rWTDAT = 0xffff;
    rWTCNT = 0xffff;   
    															   // 1/16/(65+1),nRESET & interrupt  disable
    rWTCON = ((MCLK/1000000-1)<<8)|(divider<<3)|(1<<5);	
}

/*
*************************************************************************************************************
- 函数名称 : Timer_Stop
- 函数说明 : 停止定时器
- 输入参数 : 无
- 输出参数 : (0xffff-rWTCNT)
*************************************************************************************************************
*/
int Timer_Stop(void)
{
    rWTCON = ((MCLK/1000000-1)<<8);
    return (0xffff-rWTCNT);
}

/*
*************************************************************************************************************
*-                            				结束文件													   -*
*************************************************************************************************************
*/

⌨️ 快捷键说明

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