📄 cotulla.c
字号:
*
* 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 + -