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

📄 mcf5272_hi.c

📁 motorola 针对coldfire 5275 评估板的Dbug bootloader源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    IRMD_NOWR(  PLI,    P2DRR,  32);
    IRMD_NOWR(  PLI,    P3DRR,  32);
    IRMD(PLI,   P0B1TR, P0B1TR, 32);
    IRMD(PLI,   P1B1TR, P1B1TR, 32);
    IRMD(PLI,   P2B1TR, P2B1TR, 32);
    IRMD(PLI,   P3B1TR, P3B1TR, 32);
    IRMD(PLI,   P0B2TR, P0B2TR, 32);
    IRMD(PLI,   P1B2TR, P1B2TR, 32);
    IRMD(PLI,   P2B2TR, P2B2TR, 32);
    IRMD(PLI,   P3B2TR, P3B2TR, 32);
    IRMD(PLI,   P0DTR,  P0DTR,  8);
    IRMD(PLI,   P1DTR,  P1DTR,  8);
    IRMD(PLI,   P2DTR,  P2DTR,  8);
    IRMD(PLI,   P3DTR,  P3DTR,  8);
    IRMD(PLI,   P0CR,   P0CR,   16);
    IRMD(PLI,   P1CR,   P1CR,   16);
    IRMD(PLI,   P2CR,   P2CR,   16);
    IRMD(PLI,   P3CR,   P3CR,   16);
    IRMD(PLI,   P0ICR,  P0ICR,  16);
    IRMD(PLI,   P1ICR,  P1ICR,  16);
    IRMD(PLI,   P2ICR,  P2ICR,  16);
    IRMD(PLI,   P3ICR,  P3ICR,  16);
    IRMD_NOWR(  PLI,    P0GMR,  16);
    IRMD_NOWR(  PLI,    P1GMR,  16);
    IRMD_NOWR(  PLI,    P2GMR,  16);
    IRMD_NOWR(  PLI,    P3GMR,  16);
    IRMD(PLI,   P0GMT,  P0GMT,  16);
    IRMD(PLI,   P1GMT,  P1GMT,  16);
    IRMD(PLI,   P2GMT,  P2GMT,  16);
    IRMD(PLI,   P3GMT,  P3GMT,  16);
    IRMD_NOWR(  PLI,    PGMTS,  8);
    IRMD(PLI,   PGMTA,  PGMTA,  8);
    IRMD_NOWR(  PLI,    P0GCIR, 8);
    IRMD_NOWR(  PLI,    P1GCIR, 8);
    IRMD_NOWR(  PLI,    P2GCIR, 8);
    IRMD_NOWR(  PLI,    P3GCIR, 8);
    IRMD(PLI,   P0GCIT, P0GCIT, 8);
    IRMD(PLI,   P1GCIT, P1GCIT, 8);
    IRMD(PLI,   P2GCIT, P2GCIT, 8);
    IRMD(PLI,   P3GCIT, P3GCIT, 8);
    IRMD_NOWR(  PLI,    PGCITSR,8);
    IRMD_NOWR(  PLI,    PDSUSR, 8);
    IRMD_NOWR(  PLI,    PDCSR,  8);
    IRMD_NOWR(  PLI,    P0PSR,  16);
    IRMD_NOWR(  PLI,    P1PSR,  16);
    IRMD_NOWR(  PLI,    P2PSR,  16);
    IRMD_NOWR(  PLI,    P3PSR,  16);
    IRMD_NOWR(  PLI,    PASR,   16);
    IRMD(PLI,   PLCR,   PLCR,   8);
    IRMD(PLI,   PDRQR,  PDRQR,  16);
    IRMD(PLI,   P0SDR,  P0SDR,  16);
    IRMD(PLI,   P1SDR,  P1SDR,  16);
    IRMD(PLI,   P2SDR,  P2SDR,  16);
    IRMD(PLI,   P3SDR,  P3SDR,  16);
    IRMD(PLI,   PCKSELR,PCKSELR,16);

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

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

    IRMD(FEC,   ECR,    ECR,    32);
    IRMD(FEC,   EIR,    EIR,    32);
    IRMD(FEC,   IMR,    IMR,    32);
    IRMD_NOWR(  FEC,    IVSR,   32);
    IRMD(FEC,   RDAR,   RDAR,   32);
    IRMD(FEC,   TDAR,   TDAR,   32);
    IRMD(FEC,   MMFR,   MMFR,   32);
    IRMD(FEC,   MSCR,   MSCR,   32);
    IRMD_NOWR(  FEC,    FRBR,   32);
    IRMD(FEC,   FRSR,   FRSR,   32);
    IRMD(FEC,   TFWR,   TFWR,   32);
    IRMD(FEC,   FTSR,   FTSR,   32);
    IRMD(FEC,   RCR,    RCR,    32);
    IRMD(FEC,   MFLR,   MFLR,   32);
    IRMD(FEC,   TCR,    TCR,    32);
    IRMD(FEC,   MALR,   MALR,   32);
    IRMD(FEC,   MAUR,   MAUR,   32);
    IRMD(FEC,   HTUR,   HTUR,   32);
    IRMD(FEC,   HTLR,   HTLR,   32);
    IRMD(FEC,   ERDSR,  ERDSR,  32);
    IRMD(FEC,   ETDSR,  ETDSR,  32);
    IRMD(FEC,   EMRBR,  EMRBR,  32);

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

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

    IRMD(USB,   FNR,        FNR,    16);
    IRMD(USB,   FNMR,       FNMR,   16);
    IRMD_NOWR(  USB,        RFMR,   16);
    IRMD(USB,   RFMMR,      RFMMR,  16);
    IRMD_NOWR(  USB,        FAR,    8);
    IRMD_NOWR(  USB,        ASR,    32);
    IRMD_NOWR(  USB,        DRR1,   32);
    IRMD_NOWR(  USB,        DRR2,   32);
    IRMD_NOWR(  USB,        SPECR,  16);
    IRMD_NOWR(  USB,        EP0SR,  16);
    IRMD(USB,   IEP0CFG,    IEP0CFG,32);
    IRMD(USB,   OEP0CFG,    OEP0CFG,32);
    IRMD(USB,   EP1CFG,     EP1CFG, 32);
    IRMD(USB,   EP2CFG,     EP2CFG, 32);
    IRMD(USB,   EP3CFG,     EP3CFG, 32);
    IRMD(USB,   EP4CFG,     EP4CFG, 32);
    IRMD(USB,   EP5CFG,     EP5CFG, 32);
    IRMD(USB,   EP6CFG,     EP6CFG, 32);
    IRMD(USB,   EP7CFG,     EP7CFG, 32);
    IRMD(USB,   EP0CTL,     EP0CTL, 32);
    IRMD(USB,   EP1CTL,     EP1CTL, 16);
    IRMD(USB,   EP2CTL,     EP2CTL, 16);
    IRMD(USB,   EP3CTL,     EP3CTL, 16);
    IRMD(USB,   EP4CTL,     EP4CTL, 16);
    IRMD(USB,   EP5CTL,     EP5CTL, 16);
    IRMD(USB,   EP6CTL,     EP6CTL, 16);
    IRMD(USB,   EP7CTL,     EP7CTL, 16);
    IRMD(USB,   EP0ISR,     EP0ISR, 32);
    IRMD(USB,   EP1ISR,     EP1ISR, 16);
    IRMD(USB,   EP2ISR,     EP2ISR, 16);
    IRMD(USB,   EP3ISR,     EP3ISR, 16);
    IRMD(USB,   EP4ISR,     EP4ISR, 16);
    IRMD(USB,   EP5ISR,     EP5ISR, 16);
    IRMD(USB,   EP6ISR,     EP6ISR, 16);
    IRMD(USB,   EP7ISR,     EP7ISR, 16);
    IRMD(USB,   EP0IMR,     EP0IMR, 32);
    IRMD(USB,   EP1IMR,     EP1IMR, 16);
    IRMD(USB,   EP2IMR,     EP2IMR, 16);
    IRMD(USB,   EP3IMR,     EP3IMR, 16);
    IRMD(USB,   EP4IMR,     EP4IMR, 16);
    IRMD(USB,   EP5IMR,     EP5IMR, 16);
    IRMD(USB,   EP6IMR,     EP6IMR, 16);
    IRMD(USB,   EP7IMR,     EP7IMR, 16);
    IRMD(USB,   EP0DR,      EP0DR,  32);
    IRMD(USB,   EP1DR,      EP1DR,  32);
    IRMD(USB,   EP2DR,      EP2DR,  32);
    IRMD(USB,   EP3DR,      EP3DR,  32);
    IRMD(USB,   EP4DR,      EP4DR,  32);
    IRMD(USB,   EP5DR,      EP5DR,  32);
    IRMD(USB,   EP6DR,      EP6DR,  32);
    IRMD(USB,   EP7DR,      EP7DR,  32);
    IRMD_NOWR(  USB,        EP0DPR, 16);
    IRMD_NOWR(  USB,        EP1DPR, 16);
    IRMD_NOWR(  USB,        EP2DPR, 16);
    IRMD_NOWR(  USB,        EP3DPR, 16);
    IRMD_NOWR(  USB,        EP4DPR, 16);
    IRMD_NOWR(  USB,        EP5DPR, 16);
    IRMD_NOWR(  USB,        EP6DPR, 16);
    IRMD_NOWR(  USB,        EP7DPR, 16);

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

/********************************************************************/
static const struct module_t
{
    char    *module;
    void    (*func)(char *, int, uint32);
} MODULE[] =
{
    {"SIM",     irmd_sim},
    {"INTC",    irmd_intc},
    {"CS",      irmd_cs},
    {"GPIO",    irmd_gpio},
    {"QSPI",    irmd_qspi},
    {"PWM",     irmd_pwm},
    {"DMA",     irmd_dma},
    {"UART0",   irmd_uart0},
    {"UART1",   irmd_uart1},
    {"SDRAMC",  irmd_sdramc},
    {"TIMER0",  irmd_timer0},
    {"TIMER1",  irmd_timer1},
    {"TIMER2",  irmd_timer2},
    {"TIMER3",  irmd_timer3},
    {"PLI",     irmd_pli},
    {"FEC",     irmd_fec},
    {"USB",     irmd_usb}
} ;

#define MODULE_SIZE (int)(sizeof(MODULE)/sizeof(struct module_t))

/********************************************************************/
void
mcf5272_irmd (int argc, char **argv)
{
    uint32 value;
    char *rstr;
    char mstr[20];
    int mi, success;

    display_all = FALSE;
    displayed = 0;

    if (argc == 1)
    {
        printf("Internal Modules (MBAR = %#08X):",MBAR_ADDRESS);
        for (mi = 0; mi < MODULE_SIZE; ++mi)
        {
            if ((mi % 8) == 0)
                printf("\n");
            printf("%-8s ",MODULE[mi].module);
        }
        printf("\n\n");
        return;
    }

    /*
     * Pick out module name and Point to register name
     */
    mi = 0;
    rstr = argv[1];
    while (*rstr != '.')
    {
        mstr[mi++] = *rstr;
        if (*++rstr == '\0')
        {
            rstr = NULL;
            break;
        }
    }
    mstr[mi] = '\0';
    if (rstr != NULL)
    {
        if (*rstr == '.')
            ++rstr;
    }

    /*
     * Get the new value
     */
    if (argc == 3)
    {
        if (rstr == NULL)
        {
            printf("Error:  Invalid Register:  %s\n",argv[1]);
            return;
        }
        value = get_value(argv[2],&success,16);
        if (success == 0)
        {
            printf(INVALUE,argv[2]);
            return;
        }
    }
    else
        value = 0;

    /*
     * Determine which module
     */
    for (mi = 0; mi < MODULE_SIZE; ++mi)
    {
        if (strcasecmp(MODULE[mi].module,mstr) == 0)
        {
            if (argc == 3)  /* modify operation */
            {
                MODULE[mi].func(rstr, REGWRITE, value);
            }
            else
            {
                /* display operation */
                if (rstr == NULL)
                {
                    display_all = TRUE;
                    printf("Module: %s\n",MODULE[mi].module);
                }
                MODULE[mi].func(rstr, REGREAD, 0);
            }
            return;
        }
    }

    printf(INVMOD,argv[1]);
}
/********************************************************************/
/*
 * Handle the MCF5272 specific interrupts.  This handler assumes that 
 * the PIVR is programmed to place the added vectors starting at vector
 * number 64 (0x40) which is considered the "normal mode".
 *
 */
void
cpu_handle_interrupt (int vector)
{
    if (vector < 64 || vector > 95)
        return;
    switch (vector)
    {
        case 64:
            printf("User Spurious Interrupt\n");
            break;
        case 65:
            MCF5272_INTC_ICR1 = ((MCF5272_INTC_ICR1 & MCF5272_INTC_ICR_IPL_ALL) 
                                 | MCF5272_INTC_ICR1_INT1PI);
            printf("External Interrupt Input 1\n");
            break;
        case 66:
            MCF5272_INTC_ICR1 = ((MCF5272_INTC_ICR1 & MCF5272_INTC_ICR_IPL_ALL) 
                                 | MCF5272_INTC_ICR1_INT2PI);
            printf("External Interrupt Input 2\n");
            break;
        case 67:
            MCF5272_INTC_ICR1 = ((MCF5272_INTC_ICR1 & MCF5272_INTC_ICR_IPL_ALL) 
                                 | MCF5272_INTC_ICR1_INT3PI);
            printf("External Interrupt Input 3\n");
            break;
        case 68:
            MCF5272_INTC_ICR1 = ((MCF5272_INTC_ICR1 & MCF5272_INTC_ICR_IPL_ALL) 
                                 | MCF5272_INTC_ICR1_INT4PI);
            printf("External Interrupt Input 4\n");
            break;
        case 90:
            MCF5272_INTC_ICR4 = ((MCF5272_INTC_ICR4 & MCF5272_INTC_ICR_IPL_ALL) 
                                 | MCF5272_INTC_ICR4_INT5PI);
            printf("External Interrupt Input 5\n");
            break;
        case 91:
            MCF5272_INTC_ICR4 = ((MCF5272_INTC_ICR4 & MCF5272_INTC_ICR_IPL_ALL) 
                                 | MCF5272_INTC_ICR4_INT6PI);
            printf("External Interrupt Input 6\n");
            break;
        default:
            printf("User Defined Vector #%d\n",vector);
            break;
    }
}
/********************************************************************/

⌨️ 快捷键说明

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