44BLIBC.docx
- 文档编号:30205942
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:15
- 大小:17.29KB
44BLIBC.docx
《44BLIBC.docx》由会员分享,可在线阅读,更多相关《44BLIBC.docx(15页珍藏版)》请在冰豆网上搜索。
44BLIBC
/************************************************
*NAME:
44BLIB.C*
************************************************/
#include"44b.h"
#include"44blib.h"
#include"def.h"
#include"option.h"
#include
#include
#include
#include
#include
#defineSTACKSIZE0xa00//SVCsatcksize(donotuseuserstack)
#defineHEAPEND(_ISR_STARTADDRESS-STACKSIZE-0x500)//=0xc7ff000
//SVCStackArea:
0xc(e)7ff000-0xc(e)7ffaff
externcharImage$$RW$$Limit[];
void*mallocPt=Image$$RW$$Limit;
/*************************SYSTEM*************************/
voidDelay(inttime)
{
inti;
intdelayLoopCount=400;
for(;time>0;time--)
for(i=0;i } /*************************PORTS****************************/ voidPort_Init(void) { //ADBV1.0B/DStatus //USBD12SUSPD //PC0 //LEDD0D1D2 //PC1PC2PC3 //KEYK0K1K2K3 //PG4PG5PG6PG7 //CAUTION: Followtheconfigurationorderforsettingtheports. //1)settingvalue //2)settingcontrolregister //3)configurepull-upresistor. //16bitdatabusconfiguration //PORTAGROUP //rPCONA[9: 0] //|BIT9|.......................................................|BIT0 //|ADDR24|ADDR23|ADDR22|ADDR21|ADDR20|ADDR19|ADDR18|ADDR17|ADDR16|ADDR0 //|0|1|1|1|1|1|1|1|1|1 rPCONA=0x1ff; //PORTBGROUP //rPCONB[10: 0] //|BIT10|....................................................|BIT0 //|nGCS5|nGCS4|nGCS3|nGCS2|nGCS1|nWBE3|nWBE2|nSRAS|nSCAS|SCLK|SCKE //|1|1|1|1|1|1|1|1|1|1|1 rPDATB=0x3ff; rPCONB=0x3ff; //PORTCGROUP //BUSWIDTH=16 //PORTCGROUP //rPCONC[31: 0] //|GPC15|....................................................................|GPC0 //|BIT31|....................................................................|BIT0 //|nCTS0|nRTS0|RXD1|TXD1|nCTS1|nRTS1|nEL|nDISP|VD4|VD6|VD5|VD7|LED2|LED1|LED0|D12SUSPD //|00|00|11|11|00|00|01|01|11|11|11|11|01|01|01|01 //rPUPC[15: 0] //|0|0|1|1|0|0|0|0|1|1|1|1|0|0|0|0 rPDATC=0xffff;//AllI/OIsHigh rPCONC=0x0f05ff55; rPUPC=0x30f0;//PULLUPRESISTORshouldbeenabledtoI/O //PORTDGROUP //rPCOND //|BIT15|.........................|BIT0 //|VFRAME|VM|VLINE|VCLK|VD3|VD2|VD1|VD0 //|10|10|10|10|10|10|10|10 rPDATD=0xff; rPCOND=0x0; rPUPD=0x0; //ThesepinsmustbesetonlyafterCPU'sinternalLCDcontrollerisenable //rPCOND=0xaaaa; //rPUPD=0xff; //PORTEGROUP //rPCONE //|BIT17|..............................|BIT0 //|CODECLK|PE7|PE6|BEEP|PE4|PE3|RXD0|TXD0|PE0 //|10|01|01|01|01|01|10|10|00 //|rPUPE[7: 0] //|0|0|0|0|0|1|1|0 rPDATE=0x1ff;//AllI/OIsHigh rPCONE=0x25568;//AllNCisINPUT rPUPE=0x0df;//PE8donothaveprogrammablepull-upresistor. //PORTFGROUP //rPCONF[21: 0] //|BIT21|....................................|BIT0 //|IISCLK|PF7|IISDO|IISLRCK|PF4|PF3|PF2|IICSDA|IICSCL //|100|000|100|100|00|00|00|10|10 //rPUPF[8: 0] //|1|0|1|1|0|0|0|1|1 rPDATF=0x1ff;//AllI/OIsHigh rPCONF=0x20900a;//AllNCisINPUT rPUPF=0x163; //PORTGGROUP //rPCONG[15: 0] //|BIT15|....................................|BIT0 //|KEY3|KEY2|KEY1|KEY0|EXINT3|EXINT2|NET_INT|USB_INT //|11|11|11|11|11|11|11|11 rPDATG=0xff; rPCONG=0x00ff;//KEY0~KEY3定义为I/O,采用查询方式 //rPCONG=0xffff,KEY0~KEY3定义为中断, rPUPG=0x0;//shouldbeenabled rSPUCR=0x7;//D15-D0pull-updisable rEXTINT=0x0;//AllEXTINT0-7Lowlevelinterrupt //DefinetheNon_Cachearea rNCACHBE0=(((Non_Cache_End)>>12)<<16)|((Non_Cache_Start)>>12); } /*************************UART****************************/ staticintwhichUart=0; voidUart_Init(intmclk,intbaud) { inti; if(mclk==0) mclk=MCLK; rUFCON0=0x0;//FIFOdisable rUFCON1=0x0; rUMCON0=0x0; rUMCON1=0x0; //UART0 rULCON0=0x3;//Normal,Noparity,1stop,8bit rUCON0=0x245;//rx=edge,tx=level,disabletimeoutint.,enablerxerrorint.,normal,interruptorpolling rUBRDIV0=((int)(mclk/16./baud+0.5)-1); //UART1 rULCON1=0x3; rUCON1=0x245; rUBRDIV1=((int)(mclk/16./baud+0.5)-1); for(i=0;i<100;i++); } voidUart_Select(intch) { whichUart=ch; } voidUart_TxEmpty(intch) { if(ch==0) while(! (rUTRSTAT0&0x4));//waituntiltxshifterisempty. else while(! (rUTRSTAT1&0x4));//waituntiltxshifterisempty. } charUart_Getch(void) { if(whichUart==0) { while(! (rUTRSTAT0&0x1));//Receivedataread returnRdURXH0(); } else { while(! (rUTRSTAT1&0x1));//Receivedataready returnrURXH1; } } charUart_GetKey(void) { if(whichUart==0) { if(rUTRSTAT0&0x1)//Receivedataready returnRdURXH0(); else return0; } else { if(rUTRSTAT1&0x1)//Receivedataready returnrURXH1; else return0; } } voidUart_GetString(char*string) { char*string2=string; charc; 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'); } intUart_GetIntNum(void) { charstr[30]; char*string=str; intbase=10; intminus=0; intlastIndex; intresult=0; inti; 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(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; } returnresult; } voidUart_SendByte(intdata) { if(whichUart==0) { if(data=='\n') { while(! (rUTRSTAT0&0x2)); Delay(10);//becausetheslowresponseofhyper_terminal WrUTXH0('\r'); } while(! (rUTRSTAT0&0x2));//WaituntilTHRisempty. Delay(10); WrUTXH0(data); } else { if(data=='\n') { while(! (rUTRSTAT1&0x2)); Delay(10);//becausetheslowresponseofhyper_terminal rUTXH1='\r'; } while(! (rUTRSTAT1&0x2));//WaituntilTHRisempty. Delay(10); rUTXH1=data; } } voidUart_SendString(char*pt) { while(*pt) Uart_SendByte(*pt++); } //ifyoudon'tusevsprintf(),thecodesizeisreducedverymuch. voidUart_Printf(char*fmt,...) { va_listap; charstring[256]; va_start(ap,fmt); vsprintf(string,fmt,ap); Uart_SendString(string); va_end(ap); } /*************************ledblink*****************************/ voidLed_Display(intLedStatus) { //PC1,PC2,PC3Highavailable switch(LedStatus) { case1: rPDATC&=1; rPDATC|=2; break; case2: rPDATC&=1; rPDATC|=4; break; case3: rPDATC&=1; rPDATC|=8; break; case0: rPDATC&=1; break; } //rPDATC=((LedStatus&0x1ff)<<3); } /*************************beep*********************************/ voidBeep(intBeepStatus) { //PE5Lowavailable if(BeepStatus==0) rPDATE=rPDATE&0x1df; else rPDATE=rPDATE|0x020; } /*************************Timer********************************/ voidTimer_Start(intdivider)//0: 16us,1: 32us2: 64us3: 128us { rWTCON=((MCLK/1000000-1)<<8)|(divider<<3); rWTDAT=0xffff; rWTCNT=0xffff; //1/16/(65+1),nRESET&interruptdisable rWTCON=((MCLK/1000000-1)<<8)|(divider<<3)|(1<<5); } intTimer_Stop(void) { //inti; rWTCON=((MCLK/1000000-1)<<8); return(0xffff-rWTCNT); } /*************************PLL********************************/ voidChangePllValue(intmdiv,intpdiv,intsdiv) { rPLLCON=(mdiv<<12)|(pdiv<<4)|sdiv; } /*************************GeneralLibrary**********************/ void*malloc(unsignednbyte) /*Verysimple;Usemalloc()&free()likeStack*/ //void*mallocPt=Image$$RW$$Limit; { void*returnPt=mallocPt; mallocPt=(int*)mallocPt+nbyte/4+((nbyte%4)>0);//toalign4byte if((int)mallocPt>HEAPEND) { mallocPt=returnPt; returnNULL; } returnreturnPt; } voidfree(void*pt) { mallocPt=pt; } voidCache_Flush(void) { inti,saveSyscfg; saveSyscfg=rSYSCFG; rSYSCFG=SYSCFG_0KB; for(i=0x10004000;i<0x10004800;i+=16) { *((int*)i)=0x0; } rSYSCFG=saveSyscfg; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 44 BLIBC
![提示](https://static.bdocx.com/images/bang_tan.gif)