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

📄 frmwrk.c

📁 MCP2515在2410下的测试程序
💻 C
📖 第 1 页 / 共 2 页
字号:
}

/*
*********************************************************************************************
*                                       __vChangeMPllValue
*
* Description: This routine sets the MPLL value.
*
* Arguments  : none.
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/

static void __vChangeMPllValue(int wMdiv, int wPdiv, int wSdiv)
{
        rMPLLCON = (wMdiv<<12) | (wPdiv<<4) | wSdiv;
}

/*
*********************************************************************************************
*                                       __vChangeClockDivider
*
* Description: This routine sets the HCLK and PCLK.
*
* Arguments  : none.
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/

static void __vChangeClockDivider(int wHdivn, int wPdivn)
{
        //        wHdivn,wPdivn FCLK:HCLK:PCLK
        //            0,0                1:1:1
        //            0,1                1:1:2
        //            1,0                1:2:2
        //            1,1                1:2:4
        rCLKDIVN = (wHdivn<<1) | wPdivn;

       if(wHdivn)
               MMU_SetAsyncBusMode();
       else
               MMU_SetFastBusMode();
}


/* ********************************************************************* */
/* Global functions */

/*
*********************************************************************************************
*                                       C_IRQHandler
*
* Description: This routine is the IRQ handler. Handles all peripheral interrupts.
*
* Arguments  : none.
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/

void C_IRQHandler(void)
{
        U32 wTemp;

        wTemp = rINTOFFSET<<2;

        ((void(*)(void))(*((U32 *)(aISR_EINT0+wTemp))))();
}

/*
*********************************************************************************************
*                                       FRMWRK_vStartTicker
*
* Description: This routine starts Timer1 (TC1) in the Prescale mode for OS Tick.
*
* Arguments  : wTicksPerSec - Time ticks per second.
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/
/*
void FRMWRK_vStartTicker(U32 wTicksPerSec)
{
#if OS_CRITICAL_METHOD == 3                         // Allocate storage for CPU status register          
        OS_CPU_SR  cpu_sr;
#endif

        OS_ENTER_CRITICAL();

        rWTCON = 0;                                 // Disable watchdog

        rSRCPND &= BIT_WDT;                         // Clear any pending WD int
        rINTPND &= BIT_WDT;

        pISR_WDT = (U32)__vWDTInterrupt;

        rWTDAT = rWTCNT = PCLK / 16 / wTicksPerSec; //set up the WDT for wTicksPerSec

        rWTCON = (0<<8)|(1<<5)|(0<<3)|(1<<2)|(0<<0);// Enable: WD, WD interrupts

        BIT_CLR(rINTMSK, BIT_WDT);                  // Enable WatchDog interrupts

        OS_EXIT_CRITICAL();
}
*/
/*
*********************************************************************************************
*                                       FRMWRK_vRamTest
*
* Description: This routine is used do RAM test.
*
* Arguments  : pbID   - Test identification string.
*              wSAddr - RAM starting address.
*              wEAddr - RAM end address.
*
* Return     : none.
*
* Note(s)    : Do not test the following areas using this routine:
*                       1. Stack
*                       2. Software vector table
*                       3. C Variables (RW & ZI)
*********************************************************************************************
*/

void FRMWRK_vRamTest(U8 *pbID,U32 wSAddr,U32 wEAddr)
{
        U32 wI,wJ;
        U8 bError=0;
        
        CONSOL_Printf("\n%s(%08xh-%08xh):WR",pbID,wSAddr,wEAddr);
        for(wI=wSAddr;wI<wEAddr;wI+=4)
        {
                *((volatile unsigned *)wI)=wI;
        }
        CONSOL_Printf("\b\bRD");
        for(wI=wSAddr;wI<wEAddr;wI+=4)
        {
                wJ=*((volatile unsigned *)wI);
                if(wJ!=wI)bError=1;
        }

        if(bError==0)CONSOL_Printf("\b\bO.K.\n");
        else CONSOL_Printf("\b\bFAIL\n");
}

/*
***********************************************************************************************
*
*     Eint0isr
*  INT0中断服务程序,连接SPI的INT引脚
*
*
*
*
************************************************************************************************
*/
void __irq Eint0isr(void)
{
 U8 canintf;
 canintf=MCP_Read(0x2c);
 CONSOL_Printf("canintf=%x /n",canintf);
 
}



/*
*********************************************************************************************
*                                       C_vMain
*
* Description: This is the main C entry function.
*
* Arguments  : none.
*
* Return     : none.
*
* Note(s)    : 
*********************************************************************************************
*/

void main(void)
{
        __vChangeClockDivider(1,1);            // 1:2:4
        __vChangeMPllValue(84,1,1);            // FCLK=184 MHz

        rINTMOD     = 0x0;                     //All=IRQ mode
        rINTMSK     = BIT_ALLMSK;              //All interrupt is masked.
        rINTSUBMSK  = BIT_SUB_ALLMSK;          //All sub-interrupt is masked. <- April 01, 2002 SOP

        __vInitHaltHandlers();

//       pISR_IRQ = (U32)UCOS_IRQHandler;
        pISR_EINT0=(U32)Eint0isr;   //spi的中断引脚接EINT0,中断注册
        __vPortInit();

        CONSOL_Select(__nConsolPort);
        CONSOL_Init(__nConsolBaud);
        MMU_Init();

   //     __vLogo();
        
       
        APP_vMain();

        CONSOL_Printf("APP has ended...\n");
}
 
/*
*********************************************************************************************
*                                       printf
*
* Description: This is a stdio.h function.
*
* Arguments  : .
*
* Return     : Returns 0.
*
* Note(s)    : 
*********************************************************************************************
*/

int printf(const char *pbFmt,...)
{
        va_list pArg;
        char abString[1024];

        va_start(pArg,pbFmt);
        vsprintf(abString,pbFmt,pArg);
        CONSOL_SendString(abString);
        va_end(pArg);


        return 0;
}


/* ********************************************************************* */

/*
*********************************************************************************************
*                                   
*
* 
*
*  Delay()
*
* 
*
* 
*********************************************************************************************
*/
static int delayLoopCount = FCLK/10000/10;

void Delay(int time)
{
      // time=0: adjust the Delay function by WatchDog timer.
      // time>0: the number of loop time
      // resolution of time is 100us.
    int i,adjust=0;
    if(time==0)
    {
        time   = 200;
        adjust = 1;
        delayLoopCount = 400;
            //PCLK/1M,Watch-dog disable,1/64,interrupt disable,reset disable
        rWTCON = ((PCLK/1000000-1)<<8)|(2<<3); 
        rWTDAT = 0xffff;                              //for first update
        rWTCNT = 0xffff;                              //resolution=64us @any PCLK 
        rWTCON = ((PCLK/1000000-1)<<8)|(2<<3)|(1<<5); //Watch-dog timer start
    }
    for(;time>0;time--)
        for(i=0;i<delayLoopCount;i++);
    if(adjust==1)
    {
        rWTCON = ((PCLK/1000000-1)<<8)|(2<<3);   //Watch-dog timer stop
        i = 0xffff - rWTCNT;                     //1count->64us, 200*400 cycle runtime = 64*i us
        delayLoopCount = 8000000/(i*64);         //200*400:64*i=1*x:100 -> x=80000*100/(64*i)   
    }
}


/****************************************************************/

⌨️ 快捷键说明

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