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

📄 mcf5275_hi.c

📁 motorola 针对coldfire 5275 评估板的Dbug bootloader源程序
💻 C
📖 第 1 页 / 共 3 页
字号:
/*

 * File:        mcf5275_hi.c
 * Purpose:     Register display/modify routines for MCF5275 modules.
 *
 * Notes:
 *
 */

#include "src/include/dbug.h"
#include "src/uif/cpu.h"

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

/*
 * CPU name string and source code version for display at boot-up.
 */
const char CPU_STR[] = "ColdFire MCF5275";
const int  CPU_VER_MAJOR   = 1;
const char CPU_VER_MINOR   = 'a';

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

static const char FORMAT8[]  = "%6s (%-6s): %02X\n";
static const char FORMAT16[] = "%6s (%-6s): %04X\n";
static const char FORMAT32[] = "%6s (%-6s): %08X\n";
static const char XFORMAT[]  = "%6s (%-6s): %6s\n";

static const char INVMOD[] = "Error: Invalid Module: %s\n";
static const char NOREG[]  = "XXXXXX";

#define IRMD(MOD,RDREG,WRREG,SIZE)  \
if (regread)                                            \
{                                                       \
    if ((strcasecmp(#RDREG,reg) == 0) || display_all)   \
    {                                                   \
        rdata = MCF_ ## MOD ## _ ## RDREG;  \
        printf(FORMAT ## SIZE, #RDREG, #WRREG, rdata);  \
                                                        \
        pause(&displayed);                              \
                                                        \
        if (!display_all) return;                       \
    }                                                   \
}                                                       \
else                                                    \
{                                                       \
    if (strcasecmp(#WRREG,reg) == 0)                    \
    {                                                   \
        MCF_ ## MOD ## _ ## WRREG = (uint ## SIZE) value;   \
        return;                                         \
    }                                                   \
}

#define IRMD_SIZE(MOD,RDREG,WRREG,SIZE)  \
if (regread)                                            \
{                                                       \
    if ((strcasecmp(#RDREG,reg) == 0) || display_all)   \
    {                                                   \
        rdata = MCF_ ## MOD ## _ ## RDREG(SIZE);    \
        printf(FORMAT ## SIZE, #RDREG, #WRREG, rdata);  \
                                                        \
        pause(&displayed);                              \
                                                        \
        if (!display_all) return;                       \
    }                                                   \
}                                                       \
else                                                    \
{                                                       \
    if (strcasecmp(#WRREG,reg) == 0)                    \
    {                                                   \
        MCF_ ## MOD ## _ ## WRREG(SIZE) = (uint ## SIZE) value; \
        return;                                         \
    }                                                   \
}

#define IRMD_NOWR(MOD,RDREG,SIZE)  \
if (regread)                                            \
{                                                       \
    if ((strcasecmp(#RDREG,reg) == 0) || display_all)   \
    {                                                   \
        rdata = MCF_ ## MOD ## _ ## RDREG;  \
        printf(FORMAT ## SIZE, #RDREG, NOREG, rdata);   \
                                                        \
        pause(&displayed);                              \
                                                        \
        if (!display_all) return;                       \
    }                                                   \
}

#define IRMD_(MOD,WRREG,SIZE)  \
if (regread && display_all)                             \
{                                                       \
    printf(XFORMAT, NOREG, #WRREG, NOREG);              \
}                                                       \
else                                                    \
{                                                       \
    if (strcasecmp(#WRREG,reg) == 0)                    \
    {                                                   \
        MCF_ ## MOD ## _ ## WRREG = (uint ## SIZE) value;   \
        return;                                         \
    }                                                   \
}

static int display_all;
static int displayed;
static uint32 rdata;

/********************************************************************/
static void
irmd_scm (char *reg, int regread, uint32 value)
{
    IRMD(SCM,   IPSBAR, IPSBAR, 32);
    IRMD(SCM,   RAMBAR, RAMBAR, 32);
    IRMD(SCM,   CRSR,   CRSR,   8);
    IRMD(SCM,   CWCR,   CWCR,   8);
    IRMD(SCM,   LPICR,  LPICR,  8);
    IRMD(SCM,   CWSR,   CWSR,   8);
    IRMD(SCM,   DMAREQC,DMAREQC,32);
    IRMD(SCM,   MPARK,  MPARK,  32);
    IRMD(SCM,   MPR,    MPR,    8);
    IRMD(SCM,   PACR0,  PACR0,  8);
    IRMD(SCM,   PACR1,  PACR1,  8);
    IRMD(SCM,   PACR2,  PACR2,  8);
    IRMD(SCM,   PACR3,  PACR3,  8);
    IRMD(SCM,   PACR4,  PACR4,  8);
    IRMD(SCM,   PACR5,  PACR5,  8);
    IRMD(SCM,   PACR6,  PACR6,  8);
    IRMD(SCM,   PACR7,  PACR7,  8);
    IRMD(SCM,   PACR8,  PACR8,  8);
    IRMD(SCM,   GPACR0, GPACR0, 8);
    IRMD(SCM,   GPACR1, GPACR1, 8);
        
    if (!display_all)
        printf(INVREG,reg);
}

/********************************************************************/
static void
irmd_cs0 (char *reg, int regread, uint32 value)
{
    IRMD(CS,    CSAR0,  CSAR0,  16);
    IRMD(CS,    CSMR0,  CSMR0,  32);
    IRMD(CS,    CSCR0,  CSCR0,  16);

    if (!display_all)
        printf(INVREG,reg);
}

/********************************************************************/
static void
irmd_cs1 (char *reg, int regread, uint32 value)
{
    IRMD(CS,    CSAR1,  CSAR1,  16);
    IRMD(CS,    CSMR1,  CSMR1,  32);
    IRMD(CS,    CSCR1,  CSCR1,  16);
    
    if (!display_all)
        printf(INVREG,reg);
}

/********************************************************************/
static void
irmd_cs2 (char *reg, int regread, uint32 value)
{
    IRMD(CS,    CSAR2,  CSAR2,  16);
    IRMD(CS,    CSMR2,  CSMR2,  32);
    IRMD(CS,    CSCR2,  CSCR2,  16);
    
    if (!display_all)
        printf(INVREG,reg);
}

/********************************************************************/
static void
irmd_cs3 (char *reg, int regread, uint32 value)
{
    IRMD(CS,    CSAR3,  CSAR3,  16);
    IRMD(CS,    CSMR3,  CSMR3,  32);
    IRMD(CS,    CSCR3,  CSCR3,  16);
    
    if (!display_all)
        printf(INVREG,reg);
}

/********************************************************************/
static void
irmd_cs4 (char *reg, int regread, uint32 value)
{
    IRMD(CS,    CSAR4,  CSAR4,  16);
    IRMD(CS,    CSMR4,  CSMR4,  32);
    IRMD(CS,    CSCR4,  CSCR4,  16);
    
    if (!display_all)
        printf(INVREG,reg);
}

/********************************************************************/
static void
irmd_cs5 (char *reg, int regread, uint32 value)
{
    IRMD(CS,    CSAR5,  CSAR5,  16);
    IRMD(CS,    CSMR5,  CSMR5,  32);
    IRMD(CS,    CSCR5,  CSCR5,  16);
    
    if (!display_all)
        printf(INVREG,reg);
}

/********************************************************************/
static void
irmd_cs6 (char *reg, int regread, uint32 value)
{
    IRMD(CS,    CSAR6,  CSAR6,  16);
    IRMD(CS,    CSMR6,  CSMR6,  32);
    IRMD(CS,    CSCR6,  CSCR6,  16);
    
    if (!display_all)
        printf(INVREG,reg);
}

static void
irmd_cs7 (char *reg, int regread, uint32 value)
{
    IRMD(CS,    CSAR7,  CSAR7,  16);
    IRMD(CS,    CSMR7,  CSMR7,  32);
    IRMD(CS,    CSCR7,  CSCR7,  16);
    
    if (!display_all)
        printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_gpio (char *reg, int regread, uint32 value)
{

    IRMD(GPIO,  PODR_BUSCTL,PODR_BUSCTL,   8);
    IRMD(GPIO,  PODR_ADDR,  PODR_ADDR,     8);
    IRMD(GPIO,  PODR_CS,    PODR_CS,       8);
    IRMD(GPIO,  PODR_FEC0H, PODR_FEC0H,    8);
    IRMD(GPIO,  PODR_FEC0L, PODR_FEC0L,    8);
    IRMD(GPIO,  PODR_FECI2C,PODR_FECI2C,   8);
    IRMD(GPIO,  PODR_QSPI,  PODR_QSPI,     8);
    IRMD(GPIO,  PODR_SDRAM, PODR_SDRAM,    8);
    IRMD(GPIO,  PODR_TIMERH,PODR_TIMERH,   8);
    IRMD(GPIO,  PODR_TIMERL,PODR_TIMERL,   8);
    IRMD(GPIO,  PODR_UARTL, PODR_UARTL,    8);
    IRMD(GPIO,  PODR_FEC1H, PODR_FEC1H,    8);
    IRMD(GPIO,  PODR_FEC1L, PODR_FEC1L,    8);
    IRMD(GPIO,  PODR_BS,    PODR_BS,       8);
    IRMD(GPIO,  PODR_IRQ,   PODR_IRQ,      8);
    IRMD(GPIO,  PODR_USBH,  PODR_USBH,     8);
    IRMD(GPIO,  PODR_USBL,  PODR_USBL,     8);
    IRMD(GPIO,  PODR_UARTH, PODR_UARTH,    8);
                 
    IRMD(GPIO,  PDDR_BUSCTL,PDDR_BUSCTL,   8);
    IRMD(GPIO,  PDDR_ADDR,  PDDR_ADDR,     8);
    IRMD(GPIO,  PDDR_CS,    PDDR_CS,       8);
    IRMD(GPIO,  PDDR_FEC0H, PDDR_FEC0H,    8);
    IRMD(GPIO,  PDDR_FEC0L, PDDR_FEC0L,    8);
    IRMD(GPIO,  PDDR_FECI2C,PDDR_FECI2C,   8);
    IRMD(GPIO,  PDDR_QSPI,  PDDR_QSPI,     8);
    IRMD(GPIO,  PDDR_SDRAM, PDDR_SDRAM,    8);
    IRMD(GPIO,  PDDR_TIMERH,PDDR_TIMERH,   8);
    IRMD(GPIO,  PDDR_TIMERL,PDDR_TIMERL,   8);
    IRMD(GPIO,  PDDR_UARTL, PDDR_UARTL,    8);
    IRMD(GPIO,  PDDR_FEC1H, PDDR_FEC1H,    8);
    IRMD(GPIO,  PDDR_FEC1L, PDDR_FEC1L,    8);
    IRMD(GPIO,  PDDR_BS,    PDDR_BS,       8);
    IRMD(GPIO,  PDDR_IRQ,   PDDR_IRQ,      8);
    IRMD(GPIO,  PDDR_USBH,  PDDR_USBH,     8);
    IRMD(GPIO,  PDDR_USBL,  PDDR_USBL,     8);
    IRMD(GPIO,  PDDR_UARTH, PDDR_UARTH,    8);
                 
    IRMD(GPIO,  PPDSDR_BUSCTL,  PPDSDR_BUSCTL, 8);
    IRMD(GPIO,  PPDSDR_ADDR,    PPDSDR_ADDR,   8);
    IRMD(GPIO,  PPDSDR_CS,      PPDSDR_CS,     8);
    IRMD(GPIO,  PPDSDR_FEC0H,   PPDSDR_FEC0H,  8);
    IRMD(GPIO,  PPDSDR_FEC0L,   PPDSDR_FEC0L,  8);
    IRMD(GPIO,  PPDSDR_FECI2C,  PPDSDR_FECI2C, 8);
    IRMD(GPIO,  PPDSDR_QSPI,    PPDSDR_QSPI,   8);
    IRMD(GPIO,  PPDSDR_SDRAM,   PPDSDR_SDRAM,  8);
    IRMD(GPIO,  PPDSDR_TIMERH,  PPDSDR_TIMERH, 8);
    IRMD(GPIO,  PPDSDR_TIMERL,  PPDSDR_TIMERL, 8);
    IRMD(GPIO,  PPDSDR_UARTL,   PPDSDR_UARTL,  8);
    IRMD(GPIO,  PPDSDR_FEC1H,   PPDSDR_FEC1H,  8);
    IRMD(GPIO,  PPDSDR_FEC1L,   PPDSDR_FEC1L,  8);
    IRMD(GPIO,  PPDSDR_BS,      PPDSDR_BS,     8);
    IRMD(GPIO,  PPDSDR_IRQ,     PPDSDR_IRQ,    8);
    IRMD(GPIO,  PPDSDR_USBH,    PPDSDR_USBH,   8);
    IRMD(GPIO,  PPDSDR_USBL,    PPDSDR_USBL,   8);
    IRMD(GPIO,  PPDSDR_UARTH,   PPDSDR_UARTH,  8);
                 
    IRMD(GPIO,  PCLRR_BUSCTL,PCLRR_BUSCTL,  8);
    IRMD(GPIO,  PCLRR_ADDR,  PCLRR_ADDR,    8);
    IRMD(GPIO,  PCLRR_CS,    PCLRR_CS,      8);
    IRMD(GPIO,  PCLRR_FEC0H, PCLRR_FEC0H,   8);
    IRMD(GPIO,  PCLRR_FEC0L, PCLRR_FEC0L,   8);
    IRMD(GPIO,  PCLRR_FECI2C,PCLRR_FECI2C,  8);
    IRMD(GPIO,  PCLRR_QSPI,  PCLRR_QSPI,    8);
    IRMD(GPIO,  PCLRR_SDRAM, PCLRR_SDRAM,   8);
    IRMD(GPIO,  PCLRR_TIMERH,PCLRR_TIMERH,  8);
    IRMD(GPIO,  PCLRR_TIMERL,PCLRR_TIMERL,  8);
    IRMD(GPIO,  PCLRR_UARTL, PCLRR_UARTL,   8);
    IRMD(GPIO,  PCLRR_FEC1H, PCLRR_FEC1H,   8);
    IRMD(GPIO,  PCLRR_FEC1L, PCLRR_FEC1L,   8);
    IRMD(GPIO,  PCLRR_BS,    PCLRR_BS,      8);
    IRMD(GPIO,  PCLRR_IRQ ,  PCLRR_IRQ,     8);
    IRMD(GPIO,  PCLRR_USBH,  PCLRR_USBH,    8);
    IRMD(GPIO,  PCLRR_USBL,  PCLRR_USBL,    8);
    IRMD(GPIO,  PCLRR_UARTH, PCLRR_UARTH,   8);
                 
    IRMD(GPIO,  PAR_ADDR,   PAR_ADDR,      8);
    IRMD(GPIO,  PAR_CS,     PAR_CS,        8);
    IRMD(GPIO,  PAR_BUSCTL, PAR_BUSCTL,   16);
    IRMD(GPIO,  PAR_IRQ,    PAR_IRQ,      16);
    IRMD(GPIO,  PAR_USB,    PAR_USB,      16);
    IRMD(GPIO,  PAR_FEC0HL, PAR_FEC0HL,    8);
    IRMD(GPIO,  PAR_FEC1HL, PAR_FEC1HL,    8);
    IRMD(GPIO,  PAR_TIMER,  PAR_TIMER,    16);
    IRMD(GPIO,  PAR_UART,   PAR_UART,     16);
    IRMD(GPIO,  PAR_QSPI,   PAR_QSPI,     16);
    IRMD(GPIO,  PAR_SDRAM,  PAR_SDRAM,    16);
    IRMD(GPIO,  PAR_FECI2C, PAR_FECI2C,   16);
    IRMD(GPIO,  PAR_BS,     PAR_BS,        8);
                    
    if (!display_all)
        printf(INVREG,reg);
}

/********************************************************************/
static void
irmd_qspi (char *reg, int regread, uint32 value)
{

    IRMD(QSPI,  QMR,    QMR,    16);
    IRMD(QSPI,  QDLYR,  QDLYR,  16);
    IRMD(QSPI,  QWR,    QWR,    16);
    IRMD(QSPI,  QIR,    QIR,    16);
    IRMD(QSPI,  QAR,    QAR,    16);
    IRMD(QSPI,  QDR,    QDR,    16);

    if (!display_all)
        printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_dma0 (char *reg, int regread, uint32 value)
{
    IRMD(DMA,   SAR0,       SAR0,       32);
    IRMD(DMA,   DAR0,       DAR0,       32);
    IRMD(DMA,   DSR0,       DSR0,        8);
    IRMD(DMA,   BCR0,       BCR0,       32);    
    IRMD(DMA,   DCR0,       DCR0,       32);
    IRMD(DMA,   DMAREQC0,   DMAREQC0,   32);
 
    if (!display_all)
        printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_dma1 (char *reg, int regread, uint32 value)
{
    IRMD(DMA,   SAR1,       SAR1,       32);
    IRMD(DMA,   DAR1,       DAR1,       32);
    IRMD(DMA,   DSR1,       DSR1,        8);
    IRMD(DMA,   BCR1,       BCR1,       32);    
    IRMD(DMA,   DCR1,       DCR1,       32);
    IRMD(DMA,   DMAREQC1,   DMAREQC1,   32);
 
    if (!display_all)
        printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_dma2 (char *reg, int regread, uint32 value)
{
    IRMD(DMA,   SAR2,       SAR2,       32);
    IRMD(DMA,   DAR2,       DAR2,       32);
    IRMD(DMA,   DSR2,       DSR2,        8);
    IRMD(DMA,   BCR2,       BCR2,       32);    
    IRMD(DMA,   DCR2,       DCR2,       32);
    IRMD(DMA,   DMAREQC2,   DMAREQC2,   32);
 
    if (!display_all)
        printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_dma3 (char *reg, int regread, uint32 value)
{
    IRMD(DMA,   SAR3,       SAR3,       32);
    IRMD(DMA,   DAR3,       DAR3,       32);
    IRMD(DMA,   DSR3,       DSR3,        8);
    IRMD(DMA,   BCR3,       BCR3,       32);    
    IRMD(DMA,   DCR3,       DCR3,       32);
    IRMD(DMA,   DMAREQC3,   DMAREQC3,   32);
 
    if (!display_all)
        printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_uart0 (char *reg, int regread, uint32 value)
{
    IRMD(UART,  UMR0,   UMR0,   8);
    IRMD(UART,  USR0,   USR0,   8);
    IRMD(UART,  UCSR0,  UCSR0,  8);

⌨️ 快捷键说明

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