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

📄 bsp.c

📁 lpc2478开发板基于IAR编译器移植ucos实验例程
💻 C
📖 第 1 页 / 共 5 页
字号:
    clk_div     =        5;                                     /* Configure the  ARM Core clock div to 6. CCLKSEL =  6 - 1 */
    clk_div_usb =        5;                                     /* Configure the USB clock divider to 6, USBSEL  = 6 - 1    */

    if ((PLLSTAT & (1 << 25)) > 0) {                            /* If the PLL is already running                            */
        CPU_CRITICAL_ENTER();
        PLLCON  &= ~(1 << 1);                                   /* Disconnect the PLL                                       */
        PLLFEED  =    0xAA;                                     /* PLL register update sequence, 0xAA, 0x55                 */
        PLLFEED  =    0x55;
        CPU_CRITICAL_EXIT();
    }

    CPU_CRITICAL_ENTER();
    PLLCON     &= ~(1 << 0);                                    /* Disable the PLL                                          */
    PLLFEED     =     0xAA;                                     /* PLL register update sequence, 0xAA, 0x55                 */
    PLLFEED     =     0x55;
    CPU_CRITICAL_EXIT();

    SCS        &= ~(1 << 4);                                    /* OSCRANGE = 0, Main OSC is between 1 and 20 Mhz           */
	SCS        |=  (1 << 5);                                    /* OSCEN = 1, Enable the main oscillator                    */

    while ((SCS &  (1 << 6)) == 0) {                            /* Wait until OSCSTAT is set (Main OSC ready to be used)    */
        ;
    }

    CLKSRCSEL   =  (1 << 0);		                            /* Select main OSC, 12MHz, as the PLL clock source          */

    CPU_CRITICAL_ENTER();
    PLLCFG      =  (m << 0) | (n << 16);                        /* Configure the PLL multiplier and divider                 */
    PLLFEED     =     0xAA;                                     /* PLL register update sequence, 0xAA, 0x55                 */
    PLLFEED     =     0x55;
    CPU_CRITICAL_EXIT();

    CPU_CRITICAL_ENTER();
    PLLCON     |=  (1 << 0);                                    /* Enable the PLL                                           */
    PLLFEED     =     0xAA;                                     /* PLL register update sequence, 0xAA, 0x55                 */
    PLLFEED     =     0x55;
    CPU_CRITICAL_EXIT();

    CCLKCFG     =   clk_div;                                    /* Configure the ARM Core Processor clock divider           */
    USBCLKCFG   =   clk_div_usb;                                /* Configure the USB clock divider                          */

    while ((PLLSTAT & (1 << 26)) == 0) {	                    /* Wait for PLOCK to become set                             */
        ;
    }

    PCLKSEL0    =   0xAAAAAAAA;                                 /* Set peripheral clocks to be half of main clock           */
    PCLKSEL1    =   0x22AAA8AA;

    CPU_CRITICAL_ENTER();
    PLLCON     |=  (1 << 1);                                    /* Connect the PLL. The PLL is now the active clock source  */
    PLLFEED     =     0xAA;                                     /* PLL register update sequence, 0xAA, 0x55                 */
    PLLFEED     =     0x55;
    CPU_CRITICAL_EXIT();

    while ((PLLSTAT & (1 << 25)) == 0) {                        /* Wait PLLC, the PLL connect status bit to become set      */
        ;
    }
}

/*
*********************************************************************************************************
*                                     MAM_Init()
*
* Description : This function initializes the Memory Acceleration Module
*
* Arguements  : None
*
* Returns     : None
*********************************************************************************************************
*/

static  void  MAM_Init (void)
{
    CPU_INT32U  clk_freq;


    clk_freq    = BSP_CPU_ClkFreq();                            /* Get the current core clock frequency                     */

    MAMCR       = 0;                                            /* Disable MAM functionality                                */

    if (clk_freq <  20000000) {                                 /* Compare current clock frequency with MAM modes           */
        MAMTIM  =  1;                                           /* Set MAM fetch cycles to 1 processor clock in duration    */
    }

    if (clk_freq <  40000000) {
        MAMTIM  =  2;                                           /* Set MAM fetch cycles to 2 processor clock in duration    */
    }

    if (clk_freq >= 40000000) {
        MAMTIM  =  3;                                           /* Set MAM fetch cycles to 3 processor clock in duration    */
    }

    MAMCR       =  2;                                           /* Enable full MAM functionality                            */
}

/*
*********************************************************************************************************
*                                          INITIALIZE I/Os
*
* Description : This function consolidates the I/O initialization for various modules.
*
* Arguements  : None
*
* Returns     : None
*
* Note(s)     : (1) Refer to the LPC2468 User Manual for a detailed pin assignment
*********************************************************************************************************
*/

static  void  GPIO_Init (void)
{
    CPU_INT32U  pinsel;


    IO0DIR      =  0;
    IO1DIR      =  0;
    FIO0DIR     =  0;
    FIO1DIR     =  0;
    FIO2DIR     =  0;
    FIO3DIR     =  0;
    FIO4DIR     =  0;

    FIO0MASK    =  0;
    FIO1MASK    =  0;
    FIO2MASK    =  0;
    FIO3MASK    =  0;
    FIO4MASK    =  0;

    PINSEL0     =  0;
    PINSEL1     =  0;
    PINSEL2     =  0;
    PINSEL3     =  0;
    PINSEL4     =  0;
    PINSEL5     =  0;
    PINSEL6     =  0;
    PINSEL7     =  0;
    PINSEL8     =  0;
    PINSEL9     =  0;
    PINSEL10    =  0;

#if (OS_VIEW_MODULE > 0) && (OS_VIEW_COMM_SEL == OS_VIEW_UART_0)
                                                                /* Configure P3.16 & P3.17 for UART1                        */
    pinsel          = PINSEL7;
    pinsel         &= 0xFFFFFFF0;
    pinsel         |= 0x0000000F;
    PINSEL7         = pinsel;
#endif

#if (OS_VIEW_MODULE > 0) && (OS_VIEW_COMM_SEL == OS_VIEW_UART_1)
                                                                /* Configure P3.16 & P3.17 for UART1                        */
    pinsel          = PINSEL7;
    pinsel         &= 0xFFFFFFF0;
    pinsel         |= 0x0000000F;
    PINSEL7         = pinsel;
#endif

                                                                /* Configure P0.28 & P0.27 for I2C0                         */
    pinsel          = PINSEL1;
    pinsel         &= 0xFC3FFFFF;
    pinsel         |= 0x01400000;
    PINSEL1         = pinsel;

                                                                /* Configure P2.10 for GPIO                                 */
    pinsel          = PINSEL4;
    pinsel         &= 0xFFCFFFFF;
    PINSEL4         = pinsel;
    FIO2DIR        &= ~DEF_BIT_10;


    FIO3DIR         = GPIO3_LCD_LIGHT;
    FIO3CLR         = GPIO3_LCD_LIGHT;
}

/*
*********************************************************************************************************
*                                     VIC_Init()
*
* Description : This function initializes the Vectored Interrupt Controller
*
* Arguements  : None
*
* Returns     : None
*
* Notes       : None
*********************************************************************************************************
*/

static  void  VIC_Init (void)
{
    VICIntEnClear =  0xFFFFFFFF;                                /* Disable ALL interrupts                                   */
    VICAddress    =  0;                                         /* Acknowlege any pending VIC interrupt                     */
    VICProtection =  0;                                         /* Allow VIC register access in User of Priviledged modes   */

    VICVectAddr0  = (CPU_INT32U)VIC_DummyWDT;                   /* Set the vector address                                   */
    VICVectAddr1  = (CPU_INT32U)VIC_DummySW;
    VICVectAddr2  = (CPU_INT32U)VIC_DummyDEBUGRX;
    VICVectAddr3  = (CPU_INT32U)VIC_DummyDEBUGTX;
    VICVectAddr4  = (CPU_INT32U)VIC_DummyTIMER0;
    VICVectAddr5  = (CPU_INT32U)VIC_DummyTIMER1;
    VICVectAddr6  = (CPU_INT32U)VIC_DummyUART0;
    VICVectAddr7  = (CPU_INT32U)VIC_DummyUART1;
    VICVectAddr8  = (CPU_INT32U)VIC_DummyPWM01;
    VICVectAddr9  = (CPU_INT32U)VIC_DummyI2C0;
    VICVectAddr10 = (CPU_INT32U)VIC_DummySPI;
    VICVectAddr11 = (CPU_INT32U)VIC_DummySSP1;
    VICVectAddr12 = (CPU_INT32U)VIC_DummyPLL;
    VICVectAddr13 = (CPU_INT32U)VIC_DummyRTC;
    VICVectAddr14 = (CPU_INT32U)VIC_DummyEINT0;
    VICVectAddr15 = (CPU_INT32U)VIC_DummyEINT1;
    VICVectAddr16 = (CPU_INT32U)VIC_DummyEINT2;
    VICVectAddr17 = (CPU_INT32U)VIC_DummyEINT3;
    VICVectAddr18 = (CPU_INT32U)VIC_DummyAD0;
    VICVectAddr19 = (CPU_INT32U)VIC_DummyI2C1;
    VICVectAddr20 = (CPU_INT32U)VIC_DummyBOD;
    VICVectAddr21 = (CPU_INT32U)VIC_DummyETHERNET;
    VICVectAddr22 = (CPU_INT32U)VIC_DummyUSB;
    VICVectAddr23 = (CPU_INT32U)VIC_DummyCAN01;
    VICVectAddr24 = (CPU_INT32U)VIC_DummyMMC;
    VICVectAddr25 = (CPU_INT32U)VIC_DummyGP_DMA;
    VICVectAddr26 = (CPU_INT32U)VIC_DummyTIMER2;
    VICVectAddr27 = (CPU_INT32U)VIC_DummyTIMER3;
    VICVectAddr28 = (CPU_INT32U)VIC_DummyUART2;
    VICVectAddr29 = (CPU_INT32U)VIC_DummyUART3;
    VICVectAddr30 = (CPU_INT32U)VIC_DummyI2C2;
    VICVectAddr31 = (CPU_INT32U)VIC_DummyI2S;
}

/*
******************************************************************************************************************************
******************************************************************************************************************************
**                                       DUMMY INTERRUPT HANDLERS
******************************************************************************************************************************
******************************************************************************************************************************
*/

static  void  VIC_Dummy (void)
{
    while (1) {
        (void)VIC_SpuriousInt;
    }
}

static  void  VIC_DummyWDT (void)
{
    VIC_SpuriousInt = VIC_WDT;
    VIC_Dummy();
}

static  void  VIC_DummySW (void)
{
    VIC_SpuriousInt = VIC_SW;
    VIC_Dummy();
}

static  void  VIC_DummyDEBUGRX (void)
{
    VIC_SpuriousInt = VIC_DEBUGRX;
    VIC_Dummy();
}

static  void  VIC_DummyDEBUGTX (void)
{
    VIC_SpuriousInt = VIC_DEBUGTX;
    VIC_Dummy();
}

static  void  VIC_DummyTIMER0 (void)
{
    VIC_SpuriousInt = VIC_TIMER0;
    VIC_Dummy();
}

static  void  VIC_DummyTIMER1 (void)
{
    VIC_SpuriousInt = VIC_TIMER1;
    VIC_Dummy();
}

static  void  VIC_DummyUART0 (void)
{
    VIC_SpuriousInt = VIC_UART0;
    VIC_Dummy();
}

static  void  VIC_DummyUART1 (void)
{
    VIC_SpuriousInt = VIC_UART1;
    VIC_Dummy();
}

static  void  VIC_DummyPWM01 (void)
{
    VIC_SpuriousInt = VIC_PWM01;
    VIC_Dummy();
}

static  void  VIC_DummyI2C0 (void)
{
    VIC_SpuriousInt = VIC_I2C0;
    VIC_Dummy();
}

static  void  VIC_DummySPI (void)
{
    VIC_SpuriousInt = VIC_SPI;
    VIC_Dummy();
}

static  void  VIC_DummySSP1 (void)
{
    VIC_SpuriousInt = VIC_SSP1;
    VIC_Dummy();
}

static  void  VIC_DummyPLL (void)
{
    VIC_SpuriousInt = VIC_PLL;
    VIC_Dummy();
}

static  void  VIC_DummyRTC (void)
{
    VIC_SpuriousInt = VIC_RTC;
    VIC_Dummy();
}

⌨️ 快捷键说明

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