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

📄 mcf523x_hi.c

📁 motorola 针对coldfire 5275 评估板的Dbug bootloader源程序
💻 C
📖 第 1 页 / 共 3 页
字号:
static void
irmd_pit1 (char *reg, int regread, uint32 value)
{
    IRMD(PIT,   PCSR1,  PCSR1,  16);
    IRMD(PIT,   PMR1,   PMR1,   16);
    IRMD(PIT,   PCNTR1, PCNTR1, 16);
        
    if (!display_all)
        printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_pit2 (char *reg, int regread, uint32 value)
{
    IRMD(PIT,   PCSR2,  PCSR2,  16);
    IRMD(PIT,   PMR2,   PMR2,   16);
    IRMD(PIT,   PCNTR2, PCNTR2, 16);
        
    if (!display_all)
        printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_pit3 (char *reg, int regread, uint32 value)
{
    IRMD(PIT,   PCSR3,  PCSR3,  16);
    IRMD(PIT,   PMR3,   PMR3,   16);
    IRMD(PIT,   PCNTR3, PCNTR3, 16);
        
    if (!display_all)
        printf(INVREG,reg);
}

/********************************************************************/
static void
irmd_reset (char *reg, int regread, uint32 value)
{
    IRMD(RCM,   RCR,    RCR,    8);
    IRMD(RCM,   RSR,    RSR,    8);
            
    if (!display_all)
        printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_ccm (char *reg, int regread, uint32 value)
{
    IRMD(CCM,   CCR,    CCR,    16);
    IRMD(CCM,   RCON,   RCON,   16);
    IRMD(CCM,   CIR,    CIR,    16);
            
    if (!display_all)
        printf(INVREG,reg);
}
/********************************************************************/
/*
static void
irmd_pmm (char *reg, int regread, uint32 value)
{
    IRMD(PMM,   LPICR,  LPICR,  8);
    IRMD(PMM,   LPCR,   LPCR,   8);
            
    if (!display_all)
        printf(INVREG,reg);
}
*/
/********************************************************************/
static void
irmd_clock (char *reg, int regread, uint32 value)
{
    IRMD(FMPLL, SYNCR,  SYNCR,  32);
    IRMD(FMPLL, SYNSR,  SYNSR,  32);
            
    if (!display_all)
        printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_eport (char *reg, int regread, uint32 value)
{
    IRMD(EPORT, EPPAR,  EPPAR,  16);
    IRMD(EPORT, EPDDR,  EPDDR,  8);
    IRMD(EPORT, EPIER,  EPIER,  8);
    IRMD(EPORT, EPDR,   EPDR,   8);
    IRMD(EPORT, EPPDR,  EPPDR,  8);
    IRMD(EPORT, EPFR,   EPFR,   8);
            
    if (!display_all)
        printf(INVREG,reg);
}

/********************************************************************/
static void
irmd_intc0 (char *reg, int regread, uint32 value)
{
    IRMD(INTC0, IPRH,       IPRH,   32);
    IRMD(INTC0, IPRL,       IPRL,   32);
    IRMD(INTC0, IMRH,       IMRH,   32);
    IRMD(INTC0, IMRL,       IMRL,   32);
    IRMD(INTC0, INTFRCH,    INTFRCH,    32);
    IRMD(INTC0, INTFRCL,    INTFRCL,    32);
    IRMD(INTC0, IRLR,       IRLR,   8);
    IRMD(INTC0, IACKLPR,    IACKLPR,    8);
    IRMD_NOWR(INTC0,        ICR1,   8);
    IRMD_NOWR(INTC0,        ICR2,   8);
    IRMD_NOWR(INTC0,        ICR3,   8);
    IRMD_NOWR(INTC0,        ICR4,   8);
    IRMD_NOWR(INTC0,        ICR5,   8);
    IRMD_NOWR(INTC0,        ICR6,   8);
    IRMD_NOWR(INTC0,        ICR7,   8);
    IRMD(INTC0, ICR8,       ICR8,   8);
    IRMD(INTC0, ICR9,   ICR9,   8);
    IRMD(INTC0, ICR10,  ICR10,  8);
    IRMD(INTC0, ICR11,  ICR11,  8);
    IRMD(INTC0, ICR12,  ICR12,  8);
    IRMD(INTC0, ICR13,  ICR13,  8);
    IRMD(INTC0, ICR14,  ICR14,  8);
    IRMD(INTC0, ICR15,  ICR15,  8);
    IRMD(INTC0, ICR17,  ICR17,  8);
    IRMD(INTC0, ICR18,  ICR18,  8);
    IRMD(INTC0, ICR19,  ICR19,  8);
    IRMD(INTC0, ICR20,  ICR20,  8);
    IRMD(INTC0, ICR21,  ICR21,  8);
    IRMD(INTC0, ICR22,  ICR22,  8);
    IRMD(INTC0, ICR23,  ICR23,  8);
    IRMD(INTC0, ICR24,  ICR24,  8);
    IRMD(INTC0, ICR25,  ICR25,  8);
    IRMD(INTC0, ICR26,  ICR26,  8);
    IRMD(INTC0, ICR27,  ICR27,  8);
    IRMD(INTC0, ICR28,  ICR28,  8);
    IRMD(INTC0, ICR29,  ICR29,  8);
    IRMD(INTC0, ICR30,  ICR30,  8);
    IRMD(INTC0, ICR31,  ICR31,  8);
    IRMD(INTC0, ICR32,  ICR32,  8);
    IRMD(INTC0, ICR33,  ICR33,  8);
    IRMD(INTC0, ICR34,  ICR34,  8);
    IRMD(INTC0, ICR35,  ICR35,  8);
    IRMD(INTC0, ICR36,  ICR36,  8);
    IRMD(INTC0, ICR37,  ICR37,  8);
    IRMD(INTC0, ICR38,  ICR38,  8);
    IRMD(INTC0, ICR39,  ICR39,  8);
    IRMD(INTC0, ICR40,  ICR40,  8);
    IRMD(INTC0, ICR41,  ICR41,  8);
    IRMD(INTC0, ICR42,  ICR42,  8);
    IRMD(INTC0, ICR43,  ICR43,  8);
    IRMD(INTC0, ICR44,  ICR44,  8);
    IRMD(INTC0, ICR45,  ICR45,  8);
    IRMD(INTC0, ICR46,  ICR46,  8);
    IRMD(INTC0, ICR47,  ICR47,  8);
    IRMD(INTC0, ICR48,  ICR48,  8);
    IRMD(INTC0, ICR49,  ICR49,  8);
    IRMD(INTC0, ICR50,  ICR50,  8);
    IRMD(INTC0, ICR51,  ICR51,  8);
    IRMD(INTC0, ICR52,  ICR52,  8);
    IRMD(INTC0, ICR53,  ICR53,  8);
    IRMD(INTC0, ICR54,  ICR54,  8);
    IRMD(INTC0, ICR55,  ICR55,  8);
    IRMD(INTC0, ICR56,  ICR56,  8);
    IRMD(INTC0, ICR57,  ICR57,  8);
    IRMD(INTC0, ICR58,  ICR58,  8);
    IRMD(INTC0, ICR59,  ICR59,  8);
    IRMD(INTC0, ICR60,  ICR60,  8);
    IRMD(INTC0, ICR61,  ICR61,  8);
    IRMD(INTC0, ICR62,  ICR62,  8);
    IRMD(INTC0, SWIACK, SWIACK, 8);
    IRMD(INTC0, L1IACK, L1IACK, 8);
    IRMD(INTC0, L2IACK, L2IACK, 8);
    IRMD(INTC0, L3IACK, L3IACK, 8);
    IRMD(INTC0, L4IACK, L4IACK, 8);
    IRMD(INTC0, L5IACK, L5IACK, 8);
    IRMD(INTC0, L6IACK, L6IACK, 8);
    IRMD(INTC0, L7IACK, L7IACK, 8);
                
    if (!display_all)
        printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_intc1 (char *reg, int regread, uint32 value)
{
    IRMD(INTC1, IPRH,   IPRH,   32);
    IRMD(INTC1, IPRL,   IPRL,   32);
    IRMD(INTC1, IMRH,   IMRH,   32);
    IRMD(INTC1, IMRL,   IMRL,   32);
    IRMD(INTC1, INTFRCH,    INTFRCH,    32);
    IRMD(INTC1, INTFRCL,    INTFRCL,    32);
    IRMD(INTC1, IRLR,   IRLR,   8);
    IRMD(INTC1, IACKLPR,    IACKLPR,    8);
    IRMD(INTC1, ICR8,   ICR8,   8);
    IRMD(INTC1, ICR9,   ICR9,   8);
    IRMD(INTC1, ICR10,  ICR10,  8);
    IRMD(INTC1, ICR11,  ICR11,  8);
    IRMD(INTC1, ICR12,  ICR12,  8);
    IRMD(INTC1, ICR13,  ICR13,  8);
    IRMD(INTC1, ICR14,  ICR14,  8);
    IRMD(INTC1, ICR15,  ICR15,  8);
    IRMD(INTC1, ICR16,  ICR16,  8);
    IRMD(INTC1, ICR17,  ICR17,  8);
    IRMD(INTC1, ICR18,  ICR18,  8);
    IRMD(INTC1, ICR19,  ICR19,  8);
    IRMD(INTC1, ICR20,  ICR20,  8);
    IRMD(INTC1, ICR21,  ICR21,  8);
    IRMD(INTC1, ICR22,  ICR22,  8);
    IRMD(INTC1, ICR23,  ICR23,  8);
    IRMD(INTC1, ICR24,  ICR24,  8);
    IRMD(INTC1, ICR25,  ICR25,  8);
    IRMD(INTC1, ICR26,  ICR26,  8);
    IRMD(INTC1, SWIACK, SWIACK, 8);
    IRMD(INTC1, L1IACK, L1IACK, 8);
    IRMD(INTC1, L2IACK, L2IACK, 8);
    IRMD(INTC1, L3IACK, L3IACK, 8);
    IRMD(INTC1, L4IACK, L4IACK, 8);
    IRMD(INTC1, L5IACK, L5IACK, 8);
    IRMD(INTC1, L6IACK, L6IACK, 8);
    IRMD(INTC1, L7IACK, L7IACK, 8);
                
    if (!display_all)
        printf(INVREG,reg);
}
/********************************************************************/
static const struct module_t
{
    char    *module;
    void    (*func)(char *, int, uint32);
} MODULE[] =
{

    {"SCM",     irmd_scm},
    {"CS0",     irmd_cs0},
    {"CS1",     irmd_cs1},
    {"CS2",     irmd_cs2},
    {"CS3",     irmd_cs3},
    {"CS4",     irmd_cs4},
    {"CS5",     irmd_cs5},
    {"CS6",     irmd_cs6},
    {"GPIO",    irmd_gpio},
    {"QSPI",    irmd_qspi},
    {"DMA0",    irmd_dma0},
    {"DMA1",    irmd_dma1},
    {"DMA2",    irmd_dma2},
    {"DMA3",    irmd_dma3},
    {"UART0",   irmd_uart0},
    {"UART1",   irmd_uart1},
    {"UART2",   irmd_uart2},
    {"SDRAMC",  irmd_sdramc},
    {"TIMER0",  irmd_dma_timer0},
    {"TIMER1",  irmd_dma_timer1},
    {"TIMER2",  irmd_dma_timer2},
    {"TIMER3",  irmd_dma_timer3},
    {"FEC",     irmd_fec},
    {"CAN",     irmd_can},
    {"I2C",     irmd_i2c},
    {"WTM",     irmd_wtm},
    {"PIT0",    irmd_pit0},
    {"PIT1",    irmd_pit1},
    {"PIT2",    irmd_pit2},
    {"PIT3",    irmd_pit3},
    {"PIT3",    irmd_pit3},
/*  {"PMM",     irmd_pmm},  */
    {"RESET",   irmd_reset},
    {"CCM",     irmd_ccm},
    {"CLOCK",   irmd_clock},
    {"EPORT",   irmd_eport},
    {"INTC0",   irmd_intc0},
    {"INTC1",   irmd_intc1}

} ;

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

/********************************************************************/
void
mcf523x_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 (IPSBAR = %#08X):",IPSBAR_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]);
}
/********************************************************************/
void
cpu_handle_interrupt (int vector)
{
    if (vector < 64 || vector > 192)
        return;
    switch (vector)
    {
        case 65: /* Eport Interrupt 1 */
        case 66: /* Eport Interrupt 2 */
        case 67: /* Eport Interrupt 3 */
        case 68: /* Eport Interrupt 4 */
        case 69: /* Eport Interrupt 5 */
        case 70: /* Eport Interrupt 6 */
        case 71: /* Eport Interrupt 7 */

            /* 
             * Clear the interrupt source 
             * This clears the flag for edge triggered interrupts
             */
            MCF_EPORT_EPFR = (uint8)(0x01 << (vector - 64));
            printf("Edge Port Interrupt #%d\n",vector - 64);
            break;  
        default:
            printf("User Defined Vector #%d\n",vector);
            break;
    }
}
/********************************************************************/

⌨️ 快捷键说明

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