📄 44blib.c
字号:
/************************************************
* 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 + -