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

📄 44blib.c

📁 可以实现44B0的底层所有通信
💻 C
📖 第 1 页 / 共 2 页
字号:
/************************************************
 * NAME    : 44BLIB.C				*
 * Version : 17.APR.00				*
 ************************************************/
#include "..\inc\44b0x.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
	//SVC Stack Area:0xc(e)7ff000-0xc(e)7ffaff

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

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

//extern	int _ISR_STARTADDRESS;


/************************* 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
// 100us resolution.
{
    int i,adjust=0;
    if(time==0)
    {
	time=200;
	adjust=1;
	delayLoopCount=400;
	rWTCON=((MCLK/1000000-1)<<8)|(2<<3);  // 1M/64,Watch-dog,nRESET,interrupt disable
	rWTDAT=0xffff;
	rWTCNT=0xffff;	 
	rWTCON=((MCLK/1000000-1)<<8)|(2<<3)|(1<<5); // 1M/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=8000000/(i*64);	//400*100/(i*64/200)   
    }
}

void Delay1(int time)
{
	while(time>0)time--;
}
/************************* PORTS ****************************/

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

    //PORT A GROUP
    //GPA9 ADDR23 ADDR22 ADDR21 ADDR20 ADDR19 ADDR18 ADDR17 ADDR16 ADDR0		      
    //  0,    1,     1,    1,     1,     1,     1,      1,     1,    1
    rPCONA=0x1ff;	
    rPDATA=0x0;
    //PORT B GROUP
    //GPB10  GPB9 nGCS3 nGCS2 nGCS1 GPB5 GPB4 nSRAS nSCAS SCLK SCKE
    //  0,    0,    1,	1,    1,    0,    0,	1,    1,   1,   1	
    rPCONB=0x1Cf;
    
    //PORT C GROUP
    //IISLRCK  IISD0 IISDI IISCLK VD7 VD6 VD5 VD4 nXDACK1 nXDREQ1 GPC10 GPC11 TXD1 RXD1 GPC14 GPC15
    //All input
    //  11      11    11    11    11  11   11  11   11      11     01	01     11   11   01    01
    //rPDATC=0x8400;
    //rPCONC=0x5F5FFFFF;	
    //rPUPC=0x33ff;	//should be enabled	
    rPDATC=0xffff;	//All I/O Is High
    rPCONC=0x0f05ff55;	
    rPUPC=0x30f0;	//PULL UP RESISTOR should be enabled to I/O
    
   
    //PORT D GROUP
    //VFRAME VM VLINE VCLK VD3 VD2 VD1 VD0
    //    10,10,   10,	10, 10,	10, 10,	10  
    rPCOND=0xaaaa;	
    rPUPD=0xff;

	//PORT E GROUP
	//PE0:FOUT, PE1:TxD0, PE2:RxD0, GPE3, GPE4, GPE5,GPE6,GPE7, CODECLK   
	//    10       10,      10,    01  , 01,   01,  01,  01,   10
	rPCONE=0x2B;//0x2552A;	
	rPUPE=0x00;	//0xff;	
	rPDATE=0xff;
	
	//PORT F GROUP
	//IICSCL IICSDA  nWAIT nXBACK0 nXDREQ0 GPF5 GPF6 GPF7 GPF8 
	//  10     10      10    10      10     0    0    0    0
	rPCONF=0x9256A;//0x2A;
	rPUPF=0xff;

    //PORT G GROUP
    //EINT0 EINT1 EINT2 EINT3 GPG4 GPG5 GPG6 GPG7
    //	  0x0
    //  11      11   11     11   01   01   01   01
    rPDATG=0x0;
    rPCONG=0x55FF;
    rPUPG=0xf;
    
    rSPUCR=0x7;  //pull-up disable
    rEXTINT=0x22222022;  //All EINT[7:0] will be falling edge triggered.
}
/****************************************************************************
【功能说明】IO端口功能、方向设定
****************************************************************************/
/****************************************************************************
【功能说明】IO端口功能、方向设定
****************************************************************************/
void PortInit(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       */
	/*  ATA     SL811	8019	D12     NoIC     NC		NC		----U7 SDRAM-- HY57V641620 -*/   //edited by tianjh 2005.3.11
	
	rPDATB = 0x7ff;
	rPCONB = 0x7cf;    
    
	//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	*/
	/*  nCTS0	NRTS0	RXD1	TXD1	nCTS1	nRTS1	nELON	nDISPON ---------EDITED BY TIANJH  2005.3.11--*/
	/*  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	*/
	/*	VD4		VD5		VD6		VD7		GPC3	GPC2	GPC1	GPC0----EDITED BY TINAJH  2005.3.11--*/
	rPDATC = 0x0000;	//All IO is low

//	rPCONC = 0x5f555555;	
	rPCONC = 0x00000000;
	rPUPC  = 0x0000;	//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	*/
	/*  VF			VM		VLINE	VCLK	VD3		VD2		VD1		VD0	*/
	/*	01			01		01		01		01		01		01		01	*/
	
	//rPDATD= 0x0f;
	rPDATD= 0x00;
	
	rPCOND= 0x5555;	
	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		*/	
	/*EDDIAN 提供电源和地   EDITED  BY Tianjh ------05.03.11---------------*/
	rPDATE	= 0x157;
	//rPDATE	= 0x177;	//edited by 05.05.17				//Beep = 10
	rPCONE	= 0x596b;			// for timer2 
	
//	rPCONE	= 0x556b;		//  for I/O		
	
	rPUPE= 0x00;
	
	//PORT F GROUP	
	/*  Bit8		7		6		5		 4		3		2		1		0		*/   
	/*  LED4		LED3	LED2	LED1	Input	Input	Input	IICSDA	IICSCL	*/
	/*  001			001		001		001		00		00		00		10		10		Edited BY Tianjh   05.3.11*/	
	
	rPDATF = 0x1ff;
	rPCONF = 0x9240a;	 
	rPUPF  = 0x0;

	//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		*/
	//tianjh
	/*  KEY3		KEY2	KEY1	KEY0		IDE		ETH(8019)		SL811_INT		D12_USB	*/
	/*	11 			11      11      11      	11      11			    11    			11		*/
	/*edited by tianjh----------- 05.03.11---------------*/
	
	rPDATG = 0xff;
	rPCONG = 0xfcff;		//PG4 --->Full_INT only Input
	//    1111 1100 1111 1111
	rPCONG = 0x00ff;		//PG4-GP7 --->Full_INT only Input
	//    0000 0000 1111 1111		//edited by tianjh 05.05.27
	
	rPUPG  = 0x00;	//should be enabled  

	rSPUCR= 0x4;//0x7;  //D15-D0 pull-up disable
	//rSPUCR= 0x6;  //D15-D0 pull-up enable
	
	rSYSCFG = 0x0e;				//使用8K字节的指令缓存,write buffer disable		 
	rNCACHBE0 = 0xc0002000;		//定义非Cache区,从0x2000000到0xbffffff,中断时进入ROM,若不允许CACHE不正常???
	rEXTINT = 0x0;				//所有的外部硬件中断为低电平触发	
}

/*********************************************************/

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       */
	/*  ATA     SL811	8019	D12     NoIC     NC		NC		----U7 SDRAM-- HY57V641620 -*/   //edited by tianjh 2005.3.11
	
	rPDATB = 0x7ff;
	rPCONB = 0x7cf;    
    
	//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	*/
	/*  nCTS0	NRTS0	RXD1	TXD1	nCTS1	nRTS1	nELON	nDISPON ---------EDITED BY TIANJH  2005.3.11--*/
	/*  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	*/
	/*	VD4		VD5		VD6		VD7		GPC3	GPC2	GPC1	GPC0----EDITED BY TINAJH  2005.3.11--*/
	rPDATC = 0x0000;	//All IO is low

//	rPCONC = 0x5f555555;	
	rPCONC = 0x00000000;
	rPUPC  = 0x0000;	//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	*/
	/*  VF			VM		VLINE	VCLK	VD3		VD2		VD1		VD0	*/
	/*	01			01		01		01		01		01		01		01	*/
	
	//rPDATD= 0x0f;
	rPDATD= 0x00;
	
	rPCOND= 0x5555;	
	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		*/	
	/*EDDIAN 提供电源和地   EDITED  BY Tianjh ------05.03.11---------------*/
	rPDATE	= 0x157;
	//rPDATE	= 0x177;	//edited by 05.05.17				//Beep = 10
	rPCONE	= 0x596b;			// for timer2 
	
//	rPCONE	= 0x556b;		//  for I/O		
	
	rPUPE= 0x00;
	
	//PORT F GROUP	
	/*  Bit8		7		6		5		 4		3		2		1		0		*/   
	/*  LED4		LED3	LED2	LED1	Input	Input	Input	IICSDA	IICSCL	*/
	/*  001			001		001		001		00		00		00		10		10		Edited BY Tianjh   05.3.11*/	
	
	rPDATF = 0x1ff;
	rPCONF = 0x9240a;	 
	rPUPF  = 0x0;

	//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		*/
	//tianjh
	/*  KEY3		KEY2	KEY1	KEY0		IDE		ETH(8019)		SL811_INT		D12_USB	*/
	/*	11 			11      11      11      	11      11			    11    			11		*/
	/*edited by tianjh----------- 05.03.11---------------*/
	
	rPDATG = 0xff;
	//rPCONG = 0xfcff;		//PG4 --->Full_INT only Input
	//    1111 1100 1111 1111
	rPCONG = 0x00ff;		//PG4-GP7 --->Full_INT only Input
	//    0000 0000 1111 1111		//edited by tianjh 05.05.27
	
	rPUPG  = 0x00;	//should be enabled  

	rSPUCR= 0x4;//0x7;  //D15-D0 pull-up disable
	//rSPUCR= 0x6;  //D15-D0 pull-up enable
	
	rSYSCFG = 0x0e;				//使用8K字节的指令缓存,write buffer disable		 
	rNCACHBE0 = 0xc0002000;		//定义非Cache区,从0x2000000到0xbffffff,中断时进入ROM,若不允许CACHE不正常???
	rEXTINT = 0x0;				//所有的外部硬件中断为低电平触发	
}

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

⌨️ 快捷键说明

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