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

📄 commlib.c

📁 该工程是一个基于嵌入式s3c2410的一个led测试代码
💻 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 + -