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

📄 bspatamx31.cpp

📁 Freescale ARM11系列CPU MX31的WINCE 5.0下的BSP
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//------------------------------------------------------------------------------
//
// Copyright (C) 2006, Freescale Semiconductor, Inc. All Rights Reserved.
// THIS SOURCE CODE, AND ITS USE AND DISTRIBUTION, IS SUBJECT TO THE TERMS
// AND CONDITIONS OF THE APPLICABLE LICENSE AGREEMENT
//
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
//
//  File:  BSPatamx31.cpp
//
//  Provides BSP-specific configuration routines for ATA module.
//
//------------------------------------------------------------------------------

#include <windows.h>
#include "bsp.h"


//------------------------------------------------------------------------------
// External Variables
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// Global Variables
//------------------------------------------------------------------------------
PCSP_PBC_REGS g_pPBC;
//------------------------------------------------------------------------------
// Defines
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// Types
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// Local Variables
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
// Local Functions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
//
//      Function:  BSPATApbcmapping
//
//           This function memory map the PBC registers for ATA.
//
//      Parameters:
//           phyAddr : PBC physical address
//      Returns:
//           TRUE if success; FALSE if failure.
//
//------------------------------------------------------------------------------

BOOL BSPATApbcmapping(PHYSICAL_ADDRESS *phyAddr)
{
    BOOL bRet=TRUE;
        phyAddr->QuadPart = BSP_BASE_REG_PA_PBC_BASE;
        g_pPBC = (PCSP_PBC_REGS) MmMapIoSpace(*phyAddr, sizeof(CSP_PBC_REGS), FALSE);
        if (g_pPBC == NULL)
        {
            DEBUGMSG(1, (TEXT("CMX31Disk: MmMapIoSpace failed!\r\n")));
            bRet=FALSE;
        }
    return bRet;
}

//------------------------------------------------------------------------------
//
//       Function:  BSPATAIOMUXConfig
//
//             This function makes the DDK call to configure the IOMUX
//             pins required for the ATA.
//
//      Parameters:
//             void
//      Returns:
//             TRUE if success; FALSE if failure.
//
//------------------------------------------------------------------------------

BOOL BSPATAIOMUXConfig(void)
{
    PHYSICAL_ADDRESS phyAddr;
    BOOL bRet = FALSE;

    DDK_IOMUX_PAD_SLEW slew;
    DDK_IOMUX_PAD_DRIVE drive;
    DDK_IOMUX_PAD_MODE mode;
    DDK_IOMUX_PAD_TRIG trig;
    DDK_IOMUX_PAD_PULL pull;

	// Call the BSP function to map the PBC registers
	if(!BSPATApbcmapping(&phyAddr))
	{
        DEBUGMSG(1, (TEXT(" BSPATAIOMUXConfig PCSP_PBC_REGS MmMapIoSpace failed!\r\n")));
		goto exit;
	}
		
#if ! defined ATA_USBH2 && ! defined ATA_USBH1

     DEBUGMSG(1, (TEXT(" BSPATAIOMUXConfig ATA alone!\r\n")));
     // ATA IOMUX settings
     DDKIomuxSetGpr(0x040007f8, 0x00000318);

     OUTREG16(&g_pPBC->BCTRL2_CLEAR, CSP_BITFMASK(PBC_BCTRL2_ATA_EN));
     OUTREG16(&g_pPBC->BCTRL2_SET, CSP_BITFMASK(PBC_BCTRL2_ATA_SEL));

     DDKIomuxSetPinMux(DDK_IOMUX_PIN_ATA_RESET_B, DDK_IOMUX_OUT_FUNC, DDK_IOMUX_IN_FUNC);
     DDKIomuxSetPinMux(DDK_IOMUX_PIN_ATA_DMACK, DDK_IOMUX_OUT_FUNC, DDK_IOMUX_IN_FUNC);
     DDKIomuxSetPinMux(DDK_IOMUX_PIN_ATA_DIOW, DDK_IOMUX_OUT_FUNC, DDK_IOMUX_IN_FUNC);
     DDKIomuxSetPinMux(DDK_IOMUX_PIN_ATA_DIOR, DDK_IOMUX_OUT_FUNC, DDK_IOMUX_IN_FUNC);
     DDKIomuxSetPinMux(DDK_IOMUX_PIN_ATA_CS1, DDK_IOMUX_OUT_FUNC, DDK_IOMUX_IN_FUNC);
     DDKIomuxSetPinMux(DDK_IOMUX_PIN_ATA_CS0, DDK_IOMUX_OUT_FUNC, DDK_IOMUX_IN_FUNC);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_CSPI1_MISO, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_CSPI1_MISO, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_CSPI1_MOSI, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_CSPI1_MOSI, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_CSPI1_SS0, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_CSPI1_SS0, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_CSPI1_SS1, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_CSPI1_SS1, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_CSPI1_SS2, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_CSPI1_SS2, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_CSPI1_SCLK, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_CSPI1_SCLK, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_CSPI1_SPI_RDY, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_CSPI1_SPI_RDY, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_STXD3, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_STXD3, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_SRXD3, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_SRXD3, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_SCK3, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_SCK3, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_SFS3, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_SFS3, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_STXD6, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_STXD6, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_SRXD6, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_SRXD6, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_SCK6, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_SCK6, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_CAPTURE, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_CAPTURE, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

     DDKIomuxGetPadConfig(DDK_IOMUX_PAD_COMPARE, &slew, &drive, &mode, &trig, &pull);
     DDKIomuxSetPadConfig(DDK_IOMUX_PAD_COMPARE, DDK_IOMUX_PAD_SLEW_FAST,DDK_IOMUX_PAD_DRIVE_MAX, mode, trig, pull);

#endif //#if ! defined ATA_USBH2 && ! defined ATA_USBH1

⌨️ 快捷键说明

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