📄 commlib.c
字号:
//===================================================================
// File Name : 2410lib.c
// Function : S3C2410 PLL,Uart, LED, Port Init
// Program : Shin, On Pil (SOP)
// Date : May 14, 2002
// Version : 0.0
// History
// 0.0 : Programming start (February 20,2002) -> SOP
//===================================================================
#include "stdafx.h"
#include "2410slib.h"
#include "commlib.h"
int SinData[]={
0,17452,34899,52336,69756,87156,
104528,121869,139173,156434,173648,190809,
207912,224951,241922,258819,275637,292372,
309017,325568,342020,358368,374607,390731,
406737,422618,438371,453990,469472,484810,
500000,515038,529919,544639,559193,573576,
587785,601815,615661,629320,642788,656059,
669131,681998,694658,707107,719340,731354,
743145,754710,766044,777146,788011,798636,
809017,819152,829038,838671,848048,857167,
866025,874620,882948,891007,898794,906308,
913545,920505,927184,933580,939693,945519,
951057,956305,961262,965926,970296,974370,
978148,981627,984808,987688,990268,992546,
994522,996195,997564,998630,999391,999848,
1.000000,999848,999391,998630,997564,996195,
994522,992546,990268,987688,984808,981627,
978148,974370,970296,965926,961262,956305,
951057,945519,939693,933580,927184,920505,
913545,906308,898794,891007,882948,874620,
866025,857167,848048,838671,829038,819152,
809017,798636,788011,777146,766044,754710,
743145,731354,719340,707107,694658,681998,
669131,656059,642788,629320,615662,601815,
587785,573576,559193,544639,529919,515038,
500000,484810,469472,453991,438371,422618,
406737,390731,374607,358368,342020,325568,
309017,292372,275637,258819,241922,224951,
207912,190809,173648,156435,139173,121869,
104529,87156,69757,52336,34900,17452,
0,-17452,-34899,-52336,-69756,-87156,
-104528,-121869,-139173,-156434,-173648,-190809,
-207912,-224951,-241922,-258819,-275637,-292372,
-309017,-325568,-342020,-358368,-374607,-390731,
-406737,-422618,-438371,-453990,-469472,-484810,
-500000,-515038,-529919,-544639,-559193,-573576,
-587785,-601815,-615661,-629320,-642788,-656059,
-669131,-681998,-694658,-707107,-719340,-731354,
-743145,-754710,-766044,-777146,-788011,-798635,
-809017,-819152,-829038,-838671,-848048,-857167,
-866025,-874620,-882948,-891006,-898794,-906308,
-913545,-920505,-927184,-933580,-939693,-945519,
-951056,-956305,-961262,-965926,-970296,-974370,
-978148,-981627,-984808,-987688,-990268,-992546,
-994522,-996195,-997564,-998630,-999391,-999848,
-1.000000,-999848,-999391,-998630,-997564,-996195,
-994522,-992546,-990268,-987688,-984808,-981627,
-978148,-974370,-970296,-965926,-961262,-956305,
-951057,-945519,-939693,-933580,-927184,-920505,
-913545,-906308,-898794,-891007,-882948,-874620,
-866025,-857167,-848048,-838671,-829038,-819152,
-809017,-798636,-788011,-777146,-766045,-754710,
-743145,-731354,-719340,-707107,-694658,-681998,
-669131,-656059,-642788,-629320,-615662,-601815,
-587785,-573577,-559193,-544639,-529919,-515038,
-500000,-484810,-469472,-453991,-438371,-422618,
-406737,-390731,-374607,-358368,-342020,-325568,
-309017,-292372,-275637,-258819,-241922,-224951,
-207912,-190809,-173648,-156435,-139173,-121869,
-104529,-87156,-69757,-52336,-34900,-17453,
0};
int CosData[]={
1.000000,999848,999391,998630,997564,996195,
994522,992546,990268,987688,984808,981627,
978148,974370,970296,965926,961262,956305,
951057,945519,939693,933580,927184,920505,
913545,906308,898794,891007,882948,874620,
866025,857167,848048,838671,829038,819152,
809017,798636,788011,777146,766044,754710,
743145,731354,719340,707107,694658,681998,
669131,656059,642788,629320,615661,601815,
587785,573576,559193,544639,529919,515038,
500000,484810,469472,453991,438371,422618,
406737,390731,374607,358368,342020,325568,
309017,292372,275637,258819,241922,224951,
207912,190809,173648,156434,139173,121869,
104528,87156,69756,52336,34900,17452,
0,-17452,-34899,-52336,-69756,-87156,
-104528,-121869,-139173,-156434,-173648,-190809,
-207912,-224951,-241922,-258819,-275637,-292372,
-309017,-325568,-342020,-358368,-374607,-390731,
-406737,-422618,-438371,-453990,-469472,-484810,
-500000,-515038,-529919,-544639,-559193,-573576,
-587785,-601815,-615661,-629320,-642788,-656059,
-669131,-681998,-694658,-707107,-719340,-731354,
-743145,-754710,-766044,-777146,-788011,-798635,
-809017,-819152,-829038,-838671,-848048,-857167,
-866025,-874620,-882948,-891007,-898794,-906308,
-913545,-920505,-927184,-933580,-939693,-945519,
-951057,-956305,-961262,-965926,-970296,-974370,
-978148,-981627,-984808,-987688,-990268,-992546,
-994522,-996195,-997564,-998630,-999391,-999848,
-1.000000,-999848,-999391,-998630,-997564,-996195,
-994522,-992546,-990268,-987688,-984808,-981627,
-978148,-974370,-970296,-965926,-961262,-956305,
-951057,-945519,-939693,-933580,-927184,-920505,
-913545,-906308,-898794,-891007,-882948,-874620,
-866025,-857167,-848048,-838671,-829038,-819152,
-809017,-798636,-788011,-777146,-766044,-754710,
-743145,-731354,-719340,-707107,-694658,-681998,
-669131,-656059,-642788,-629320,-615662,-601815,
-587785,-573576,-559193,-544639,-529919,-515038,
-500000,-484810,-469472,-453991,-438371,-422618,
-406737,-390731,-374607,-358368,-342020,-325568,
-309017,-292372,-275637,-258819,-241922,-224951,
-207912,-190809,-173648,-156435,-139173,-121869,
-104529,-87156,-69757,-52336,-34900,-17452,
0,17452,34899,52336,69756,87156,
104528,121869,139173,156434,173648,190809,
207912,224951,241922,258819,275637,292372,
309017,325568,342020,358368,374607,390731,
406737,422618,438371,453990,469471,484810,
500000,515038,529919,544639,559193,573576,
587785,601815,615661,629320,642788,656059,
669131,681998,694658,707107,719340,731354,
743145,754710,766044,777146,788011,798635,
809017,819152,829038,838671,848048,857167,
866025,874620,882948,891006,898794,906308,
913545,920505,927184,933580,939693,945519,
951056,956305,961262,965926,970296,974370,
978148,981627,984808,987688,990268,992546,
994522,996195,997564,998630,999391,999848,
0};
int GetSinData(int angle)
{
return SinData[angle];
}
int GetCosData(int angle)
{
return CosData[angle];
}
//extern DMATASK DmaTasks[4][16];
extern U32 Dma0Busy;
//===========================[ PORTS ]===================================================*
void Port_Init(void)
{
rGPACON = 0x7fffff; //全部为扩展功能
rGPBCON = 0x044555;
rGPBUP = 0x7ff; // The pull up function is disabled GPB[10:0]
rGPCCON = 0xaaaaaaaa;
rGPCUP = 0xffff; // The pull up function is disabled GPC[15:0]
rGPDCON = 0xaaaaaaaa;
rGPDUP = 0xffff; // The pull up function is disabled GPD[15:0]
rGPECON = 0xaaaaaaaa;
rGPEUP = 0xffff; // The pull up function is disabled GPE[15:0]
rGPFCON = 0x55aa;
rGPFUP = 0xff; // The pull up function is disabled GPF[7:0]
rGPGCON = 0xf795ffb5;
rGPGUP = 0xffff; // The pull up function is disabled GPG[15:0]
rGPHCON = 0x2afaaa;
rGPHUP = 0x7ff; // The pull up function is disabled GPH[10:0]
rGPGDAT &=~(0x1<<13);
rEXTINT0 = 0x22222222; // EINT[7:0]
rEXTINT1 = 0x22222222; // EINT[15:8]
rEXTINT2 = 0x22222222; // EINT[23:16]
}
#define BEEPDOTLINE 0x2fffff
void BeepDot()
{
int i;
i=BEEPDOTLINE;
rGPGDAT |=(0x1<<13);
while(i--)
;
rGPGDAT &=~(0x1<<13);
}
void BeepLine()
{
int i;
i=(BEEPDOTLINE<<1);
rGPGDAT |=(0x1<<13);
while(i--) ;
rGPGDAT &=~(0x1<<13);
}
void Beep(int BeepID)
{
do
{
if(BeepID & 1)
BeepLine();
else
BeepDot();
BeepID >>= 1;
}while(BeepID);
}
void MMU_SetMTT(int vaddrStart,int vaddrEnd,int paddrStart,int attr)
{
U32 *pTT;
int i,nSec;
pTT=(U32 *)_MMUTT_STARTADDRESS+(vaddrStart>>20);
nSec=(vaddrEnd>>20)-(vaddrStart>>20);
for(i=0;i<=nSec;i++)
*pTT++=attr |(((paddrStart>>20)+i)<<20);
}
void MMU_Init(void)
{
int i,j;
MMU_DisableDCache();
MMU_DisableICache();
for(i=0;i<64;i++)
for(j=0;j<8;j++)
MMU_CleanInvalidateDCacheIndex((i<<26)|(j<<5));
MMU_InvalidateICache();
MMU_DisableMMU();
MMU_InvalidateTLB();
//MMU_SetMTT(int vaddrStart,int vaddrEnd,int paddrStart,int attr)
/* MMU_SetMTT(0x00000000,0x07f00000,0x00000000,RW_CNB); //bank0
MMU_SetMTT(0x08000000,0x0ff00000,0x08000000,RW_CNB); //bank1
MMU_SetMTT(0x10000000,0x17f00000,0x10000000,RW_CNB); //bank2
MMU_SetMTT(0x18000000,0x1ff00000,0x18000000,RW_CNB); //bank3
MMU_SetMTT(0x20000000,0x27f00000,0x20000000,RW_CNB); //bank4
MMU_SetMTT(0x28000000,0x2ff00000,0x28000000,RW_CNB); //bank5
MMU_SetMTT(0x30000000,0x30f00000,0x30000000,RW_CNB); //bank6-1
MMU_SetMTT(0x31000000,0x33e00000,0x31000000,RW_CNB); //bank6-2
MMU_SetMTT(0x33f00000,0x33f00000,0x33f00000,RW_CNB); //bank6-3
MMU_SetMTT(0x38000000,0x3ff00000,0x38000000,RW_CNB); //bank7
MMU_SetMTT(0x40000000,0x5af00000,0x40000000,RW_NCNB);//SFR+StepSram
MMU_SetMTT(0x5b000000,0xfff00000,0x5b000000,RW_FAULT);//not used
MMU_SetTTBase(_MMUTT_STARTADDRESS);
MMU_SetDomain(0x55555550|DOMAIN1_ATTR|DOMAIN0_ATTR);
//DOMAIN1: no_access, DOMAIN0,2~15=client(AP is checked)
MMU_SetProcessId(0x0);
MMU_EnableAlignFault();
MMU_EnableMMU(); */
MMU_EnableICache();
MMU_EnableDCache();
//DCache should be turned on after MMU is turned on.
}
void Delay(int i)
{
int j;
while(i)
{
for(j=0;j<20;j++)
;
i--;
}
}
//字传送函数
void WTrans(U32 pSource,U32 pTarget,U32 size)
{
__asm
{
// stmfd sp,{r3-r12}
add r12,pTarget,size,LSL #2
sub r11,r12,#0x20
cmp r11,pTarget
bLT WTLoop2 //小于
WTloop1:
LDMIA pSource!,{r3-r10}
STMIA pTarget!,{r3-r10}//1
cmp r11,pTarget
bGE WTloop1
WTLoop2:
cmp r12,pTarget
beq WTExit
LDMIA pSource!,{r3}
STMIA pTarget!,{r3}//1
b WTLoop2
WTExit:
// LDMFD sp,{r3-r12}
}
}
/*
半节传送指令
*/
void HWTrans(U32 pSource,U32 pTarget,U32 size)
{
U32 End;
if(size==0)
return;
End=pSource+(size<<1);
__asm
{
loop:
ldrh r3,[pSource]
strh r3,[pTarget]
add pSource,pSource,#2
add pTarget,pTarget,#2
cmp pSource,End
blt loop
}
}
//*************************[ MPLL ]*******************************
void ChangeMPllValue(int mdiv,int pdiv,int sdiv)
{
rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
}
//************************[ HCLK, PCLK ]***************************
void ChangeClockDivider(int hdivn,int pdivn)
{
// hdivn,pdivn FCLK:HCLK:PCLK
// 0,0 1:1:1
// 0,1 1:1:2
// 1,0 1:2:2
// 1,1 1:2:4
rCLKDIVN = (hdivn<<1) | pdivn;
if(hdivn)
MMU_SetAsyncBusMode();
else
MMU_SetFastBusMode();
}
//**************************[ UPLL ]*******************************
void ChangeUPllValue(int mdiv,int pdiv,int sdiv)
{
rUPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -