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

📄 2410lib.c

📁 基于arm9的,usb设备(u盘)的读写操作实现.
💻 C
📖 第 1 页 / 共 2 页
字号:
    }
    
    if(string[0]=='0' && (string[1]=='x' || string[1]=='X'))
    {
        base    = 16;
        string += 2;
    }
    
    lastIndex = strlen(string) - 1;
    
    if(lastIndex<0)
        return -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;
    }
    return result;
}

//=====================================================================
void Uart_SendByte(int data)
{
    if(whichUart==0)
    {
        if(data=='\n')
        {
            while(!(rUTRSTAT0 & 0x2));
            Delay(15);                 //because the slow response of hyper_terminal 
            WrUTXH0('\r');
        }
        while(!(rUTRSTAT0 & 0x2));   //Wait until THR is empty.
        Delay(15);
        WrUTXH0(data);
    }
    else if(whichUart==1)
    {
        if(data=='\n')
        {
            while(!(rUTRSTAT1 & 0x2));
            Delay(15);                 //because the slow response of hyper_terminal 
            rUTXH1 = '\r';
        }
        while(!(rUTRSTAT1 & 0x2));   //Wait until THR is empty.
        Delay(15);
        rUTXH1 = data;
    }   
    else if(whichUart==2)
    {
        if(data=='\n')
        {
            while(!(rUTRSTAT2 & 0x2));
            Delay(15);                 //because the slow response of hyper_terminal 
            rUTXH2 = '\r';
        }
        while(!(rUTRSTAT2 & 0x2));   //Wait until THR is empty.
        Delay(15);
        rUTXH2 = data;
    }       
}               

//====================================================================
void Uart_SendString(char *pt)
{
    while(*pt)
        Uart_SendByte(*pt++);
}

//=====================================================================
//If you don't use vsprintf(), the code size is reduced very much.
#define	_PRINTF_
void Uart_Printf(char *fmt,...)
{
#ifdef _PRINTF_
    va_list ap;
    char string[256];

    va_start(ap,fmt);
    vsprintf(string,fmt,ap);
    Uart_SendString(string);
    va_end(ap);
#endif //_PRINTF_	
}


//**************************[ BOARD LED ]*********************************
void Led_Display(int data)
{
          //Active is low.(LED On)
          // GPF7  GPF6   GPF5   GPF4
          //nLED_8 nLED4 nLED_2 nLED_1
//    rGPFDAT = (rGPFDAT & 0xf) | !((data & 0xf)<<4);
    rGPFDAT = (rGPFDAT & ~(0xf<<4)) | ((~data & 0xf)<<4);    
}

void Led(int data)
{
//Active is low.(LED On)
// GPB0-3
//TOUT_0-3 (LED1-4)
   switch (data)
   {
   case LED1_ON:
   	rGPBDAT&=0xfffe;
   	break;
   case LED1_OFF:
   	rGPBDAT|=0x0001;
   	break;
   case LED2_ON:
   	rGPBDAT&=0xfffd;
   	break;
   case LED2_OFF:
   	rGPBDAT|=0x0002;
   	break;
   case LED3_ON:
   	rGPBDAT&=0xfffb;
   	break;
   case LED3_OFF:
   	rGPBDAT|=0x0004;
   	break;
   case LED4_ON:
   	rGPBDAT&=0xfff7;
   	break;
   case LED4_OFF:
   	rGPBDAT|=0x0008;
   	break;
   case LEDALL_ON:
   	rGPBDAT&=0xfff0;
   	break;
   case LEDALL_OFF:
   	rGPBDAT|=0x000f;
   	break;
   default:
   	break;
   }
}

//*************************[ Timer ]********************************
void Timer_Start(int divider)  //0:16us,1:32us 2:64us 3:128us
{
    rWTCON = ((PCLK/1000000-1)<<8)|(divider<<3);  //Watch-dog timer control register
    rWTDAT = 0xffff;  //Watch-dog timer data register
    rWTCNT = 0xffff;  //Watch-dog count register

      // Watch-dog timer enable & interrupt  disable
    rWTCON = rWTCON |(1<<5) & !(1<<2);  
}

//=================================================================
int Timer_Stop(void)
{
    rWTCON = ((PCLK/1000000-1)<<8);
    return (0xffff - rWTCNT);
}


//*************************[ MPLL ]*******************************
void ChangeMPllValue(int mdiv,int pdiv,int sdiv)
{
    rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;// MPLLCON=0x4C000004
}


//************************[ HCLK, PCLK ]***************************
void ChangeClockDivider(int hdivn,int pdivn)
{
     // hdivn,pdivn FCLK:HCLK:PCLK
     //     0,0         FCLK:FCLK/1:FCLK/1 = 1:1:1 
     //     0,1         FCLK:FCLK/1:FCLK/2 = 1:1:2
     //     1,0         FCLK:FCLK/2:FCLK/2 = 1:2:2
     //     1,1         FCLK:FCLK/2:FCLK/4 = 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;
}


//*************************[ General Library ]**********************
void * malloc(unsigned nbyte) 
//Very simple; Use malloc() & free() like Stack
//void *mallocPt=Image$$RW$$Limit;
{
    void *returnPt = mallocPt;

    mallocPt = (int *)mallocPt+nbyte/4+((nbyte%4)>0); //To align 4byte

    if( (int)mallocPt > HEAPEND )
    {
        mallocPt = returnPt;
        return NULL;
    }
    return returnPt;
}

//-------------------------------------------------------------------
void free(void *pt)
{
    mallocPt = pt;
}

void DataPrint(unsigned short printnum, unsigned char linenum, unsigned char *buffer)
{
	unsigned short i;
	Uart_Printf("\n00000000: ");
	for(i = 0;i<printnum;i++)
	{
		Uart_Printf("%02x,",buffer[i]);
		if(linenum)
			if((i+1)%linenum==0)
			{
				Uart_Printf("\n%08x: ",(i+1));
			}
	}
	Uart_Printf("************************************************\n");
}

void DataPrintINT(unsigned short printnum, unsigned char linenum, int *buffer)
{
	unsigned short i;
	for(i = 0;i<printnum;i++)
	{
		Uart_Printf("0x%08x,",buffer[i]);
		if(linenum)
			if((i+1)%linenum==0)
				Uart_Printf("\n");
	}
	Uart_Printf("************************************************\n");
}

void StringClear(char *str)
{
	unsigned char i = 0;
	while(str[i]!=0)
		str[i++] = 0;
}


⌨️ 快捷键说明

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