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

📄 cotulla.c

📁 pxa27x下rtc程序
💻 C
📖 第 1 页 / 共 2 页
字号:
*
* CALLS:
*    GetCpuVersion
*
* CALLED BY:
*    DM_DisplayVersion
*
* PROTOTYPE:
*    PCHAR XsGetCpuProductNumber(BOOL flag)
*
*******************************************************************************
*/
PCHAR XsGetCpuProductNumber(BOOL flag)
{
    UINT CpuVersion = 0;

    // Retrieve the CPU version information
    CpuVersion = GetCpuVersion();

    switch (CPU_PRODUCT_NUM(CpuVersion))
    {
        case 0x11:
            if (flag)
            {
                return "PXA27x Application Processor";
            }
            else
            {
                return "PXA27x";
            }

        default:
            return "";
    }
}

/*
*******************************************************************************
*
* FUNCTION:
*    XsGetCpuProductRevision(BOOL flag)
*
* DESCRIPTION:
*    Return the CPU product revision
*
* INPUT PARAMETERS:
*    VOID
*
* RETURNS:
*    PCHAR - Pointer to string.
*
* GLOBAL EFFECTS:
*    None.
*
* ASSUMPTIONS:
*    None.
*
* CALLS:
*    GetCpuVersion
*
* CALLED BY:
*    DM_DisplayVersion
*
* PROTOTYPE:
*    PCHAR XsGetCpuProductRevision(BOOL flag)
*
*******************************************************************************
*/
PCHAR XsGetCpuProductRevision(BOOL flag)
{
    UINT CpuVersion = 0;

    // Retrieve the CPU version information
    CpuVersion = GetCpuVersion();

    switch (CPU_PRODUCT_REV(CpuVersion))
    {
        case STEP_A0:
            if (flag)
            {
                return "A0 Stepping";
            }
            else
            {
                return "A0";
            }
        case STEP_A1:
            if (flag)
            {
                return "A1 Stepping";
            }
            else
            {
                return "A1";
            }
        case STEP_B0:
            if (flag)
            {
                return "B0 Stepping";
            }
            else
            {
                return "B0";
            }
        case STEP_B1:
            if (flag)
            {
                return "B1 Stepping";
            }
            else
            {
                return "B1";
            }
        case STEP_C0:
            if (flag)
            {
                return "C0 Stepping";
            }
            else
            {
                return "C0";
            }
        case STEP_C2:
            if (flag)
            {
                return "C2 Stepping";
            }
            else
            {
                return "C2";
            }        
         case STEP_C3:
            if (flag)
            {
                return "C3 Stepping";
            }
            else
            {
                return "C3";
            }        
         case STEP_C4:
            if (flag)
            {
                return "C4 Stepping";
            }
            else
            {
                return "C4";
            }

        default:
            return "";
    }
}

/*
*******************************************************************************
*
* FUNCTION:
*    XsGetMMUConfiguration()
*
* DESCRIPTION:
*    Return the MMU configuration
*
* INPUT PARAMETERS:
*    VOID
*
* RETURNS:
*    PCHAR - Pointer to string.
*
* GLOBAL EFFECTS:
*    None.
*
* ASSUMPTIONS:
*    None.
*
* CALLS:
*    IsMMUEnabled, IsICacheEnabled, IsDCacheEnabled
*
* CALLED BY:
*    DM_DisplayVersion
*
* PROTOTYPE:
*    PCHAR XsGetMMUConfiguration()
*
*******************************************************************************
*/
PCHAR XsGetMMUConfiguration()
{
    if (IsMMUEnabled())
    {
        if (IsICacheEnabled())
        {
            if (IsDCacheEnabled())
            {
                return "MMU, ICache, DCache on";
            }
            else
            {
                return "MMU, ICache on";
            }
        }
        else
        {
            return "MMU on";
        }
    }
    else
    {
        return "MMU off";
    }
}

/*
*******************************************************************************
*
* FUNCTION:
*    XsCpuTypeString
*
* DESCRIPTION:
*    Return the CPU name
*
* INPUT PARAMETERS:
*    None.
*
* RETURNS:
*    PCHAFR - Pointer to a string.
*
* GLOBAL EFFECTS:
*    None.
*
* ASSUMPTIONS:
*    None.
*
* CALLS:
*    None.
*
* CALLED BY:
*    DM_DisplayVersion
*
* PROTOTYPE:
*    PCHAR XsCpuTypeString(VOID);
*
*******************************************************************************
*/
PCHAR XsCpuTypeString()
{
    UINT CpuVersion = GetCpuVersion();

    switch (CPU_PRODUCT_REV(CpuVersion))
    {
        case STEP_A0:
        return "PXA27x A0";

        case STEP_A1:
        return "PXA27x A1";

        case STEP_B0:
        return "PXA27x B0";

        case STEP_B1:
        return "PXA27x B1";
        
        case STEP_C0:
        return "PXA27x C0";

        default:
        return "PXA27x";
    }
}

/*
*******************************************************************************
*
* FUNCTION:
*    DumpProcessorRegisters
*
* DESCRIPTION:
*    Display the processor registers and enter the menu system.
*
* INPUT PARAMETERS:
*    UINT exception - value passed from exception handler.
*    ProcessorRegistersT regsP - pointer to processor register block.
*
* RETURNS:
*    None.
*
* GLOBAL EFFECTS:
*    Recovers from a processor excpetion.
*
* ASSUMPTIONS:
*    None.
*
* CALLS:
*    printf, DM_DoMenu
*
* CALLED BY:
*    Processor exception handlers.
*
* PROTOTYPE:
*    VOID DumpProcessorRegisters(UINT exception, ProcessorRegistersT *regsP);
*
*******************************************************************************
*/
VOID DumpProcessorRegisters(UINT exception, ProcessorRegistersT *regsP)
{
    // Create some white space.
    printf("\r\n");

    // Display the excpetion.
    switch (exception)
    {
        case 0xFFFF0005:
            printf("Undefined Exception: ");
            break;            

        case 0xFFFF0006:
            printf("SWI Exception: ");
            break;            

        case 0xFFFF0007:
            printf("Prefetch Exception: ");
            break;            

        case 0xFFFF0008:
            printf("Abort Exception: ");
            break;            

        case 0xFFFF0009:
            printf("IRQ Exception: ");
            break;            

        case 0xFFFF000A:
            printf("FIRQ Exception: ");
            break;            
        default:
            printf("Exception: %x ", exception);
            break;            
    }

    // Display the processor status register.
    printf("CPSR = %08x - ", regsP->cpsr);

    // Decode the CPSR bits.
    printf("%c.%c.%c.%c.%c.%c.%c.%c.",
           ((regsP->cpsr & CPSR_N_Bit) ? 'N' : 'n'),
           ((regsP->cpsr & CPSR_Z_Bit) ? 'Z' : 'z'),
           ((regsP->cpsr & CPSR_C_Bit) ? 'C' : 'c'),
           ((regsP->cpsr & CPSR_V_Bit) ? 'V' : 'v'),
           ((regsP->cpsr & CPSR_Q_Bit) ? 'Q' : 'q'),
           ((regsP->cpsr & CPSR_I_Bit) ? 'I' : 'i'),
           ((regsP->cpsr & CPSR_F_Bit) ? 'F' : 'f'),
           ((regsP->cpsr & CPSR_T_Bit) ? 'T' : 't'));

    // Display the processor mode.
    switch (regsP->cpsr & 0x1F)
    {
        case CPSR_Mode_USR:
            printf("User(%x)\r\n", regsP->cpsr & 0x1f);
            break;
        case CPSR_Mode_FIQ:
            printf("FIQ(%x)\r\n", regsP->cpsr & 0x1f);
            break;
        case CPSR_Mode_IRQ:
            printf("IRQ(%x)\r\n", regsP->cpsr & 0x1f);
            break;
        case CPSR_Mode_SVC:
            printf("SVC(%x)\r\n", regsP->cpsr & 0x1f);
            break;
        case CPSR_Mode_ABT:
            printf("ABT(%x)\r\n", regsP->cpsr & 0x1f);
            break;
        case CPSR_Mode_UND:
            printf("UND(%x)\r\n", regsP->cpsr & 0x1f);
            break;
        case CPSR_Mode_SYS:
            printf("SYS(%x)\r\n", regsP->cpsr & 0x1f);
            break;
    }

    // More white space.
    printf("\r\n");

    // Display the processor registers.
    printf("R0  = %08x, R1  = %08x, R2  = %08x, R3  = %08x\r\n",
           regsP->r0, regsP->r1, regsP->r2, regsP->r3);
    printf("R4  = %08x, R5  = %08x, R6  = %08x, R7  = %08x\r\n",
           regsP->r4, regsP->r5, regsP->r6, regsP->r7);
    printf("R8  = %08x, R9  = %08x, R10 = %08x, R11 = %08x\r\n",
           regsP->r8, regsP->r9, regsP->r10, regsP->r11);
    printf("R12 = %08x, R13 = %08x, R14 = %08x, R15 = %08x\r\n",
           regsP->r12, regsP->r13, regsP->r14, regsP->r15);


    DM_SerialInOut();   // Run in the string mode.

#if 0
    // Dispatch the tests.
    do
    {
        DM_DoMenu (&MainMenu, NULL);
    }
    while (1);
#endif

}

/*
*******************************************************************************
*
* FUNCTION:
*    XsMainSWInit
*
* DESCRIPTION:
*    This function is responsible for software intialization of the drivers for
*     all Cotulla-specific peripherals ONLY.  No hardware is touched.
*
* INPUT PARAMETERS:
*    None.
*
* RETURNS:
*    None.
*
* GLOBAL EFFECTS:
*    Cotulla device drivers are initialized and ready to be used.
*    Hardware setup still needed.
*
* ASSUMPTIONS:
*    None.
*
* CALLS:
*    Cotulla device drivers.
*
* CALLED BY:
*    PlatformSWInit.
*
* PROTOTYPE:
*   VOID XsMainSWInit(VOID);
*
*******************************************************************************
*/
VOID XsMainSWInit(VOID)
{
    // Initialize the following device drivers:

    XsIcSWInit();               //     Interrupt Controller
    XsGpioSWInit();             //     GPIO driver
    XsOstSWInit();              //     Operating System Timer
    XsAc97CtrlSWInit();         //     AC97 Controller
    XsFFUartSWInit();           //     Full Feature UART
    XsBTUartSWInit();           //     Bluetooth UART
    XsSTUartSWInit();           //     Standard UART
    XsSspSWInit(SSP1);          //     SSP1 
    XsSspSWInit(SSP2);          //     SSP2 
    XsSspSWInit(SSP3);          //     SSP3 
    XsIcpSWInit();              //     ICP 
    XsUdcSWInit();              //     USB Client
    XsUsbHostSWInit();          //     USB Host
    XsMMCSWInit();              //     MMC
    XsPcmciaSWInit();           //     PCMCIA
    XsMslSWInit();              //     MSL  
    XsLcdSWInit();              //     LCD

} // XsMainSWInit ()

/*
*******************************************************************************
*
* FUNCTION:
*    XsMainHWSetup
*
* DESCRIPTION:
*    This function is responsible for setting up the drivers for
*    Cotulla-specific peripherals ONLY. This should get the affected devices
*    into a *known* idle state, including 'disabled'.  Only devices which are
*    always used in the system are set up here.  Also, it may be convenient for
*    certain "system" devices to be set up in the DM operating environment
*    initialization, which can determine current appropriate parameters.
*
* INPUT PARAMETERS:
*    None.
*
* RETURNS:  Success: 0  (ERR_NONE)
*           Failure: ERR_T code from device setup.
*
* GLOBAL EFFECTS:
*    Cotulla device drivers are initialized and ready to be used.
*
* ASSUMPTIONS:
*    None.
*
* CALLS:
*    Cotulla device drivers.
*
* CALLED BY:
*    PlatformHWSetup.
*
* PROTOTYPE:
*   UINT32 XsMainHWSetup(VOID);
*
*******************************************************************************
*/
UINT32 XsMainHWSetup(VOID)
{
    UINT32 status = FALSE;

    // Main processor Interrupt Controller
    status = XsIcHWSetup();
    if (status)
    {
        WriteHexLeds(status);
    }

    // Main processor GPIO
    status = XsGpioHWSetup();
    if (status)
    {
        WriteHexLeds(status);
    }

    // DMA HW Setup
    status = XsDmaHWSetup();
    if (status)
    {
        WriteHexLeds(status);
    }

    // Main processor AC97 Controller
    //  (needed for touch screen, too)

    // Don't need to enable power to codec.  Important because
    //  XsAc97CtrlHWSetup performs a cold reset on the codec
    //  and waits for a response.

//  status = XsAc97CtrlHWSetup();

    return (status);

} // XsMainHWSetup ()

⌨️ 快捷键说明

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