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

📄 mcf532x_hi.c

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

    IRMD(LCDC,  LSSAR,   32);
    IRMD(LCDC,  LSR,   32);
    IRMD(LCDC,  LVPWR,   32);
    IRMD(LCDC,  LCPR,   32);
    IRMD(LCDC,  LCWHBR,   32);
    IRMD(LCDC,  LCCMR,   32);
    IRMD(LCDC,  LPCR,   32);
    IRMD(LCDC,  LHCR,   32);
    IRMD(LCDC,  LVCR,   32);
    IRMD(LCDC,  LPOR,   32);
    IRMD(LCDC,  LSCR,   32);
    IRMD(LCDC,  LPCCR,   32);
    IRMD(LCDC,  LDCR,   32);
    IRMD(LCDC,  LRMCR,   32);
    IRMD(LCDC,  LICR,   32);
    IRMD(LCDC,  LIER,   32);
    IRMD(LCDC,  LISR,   32);
    IRMD(LCDC,  LGWSAR,   32);
    IRMD(LCDC,  LGWSR,   32);
    IRMD(LCDC,  LGWVPWR,   32);
    IRMD(LCDC,  LGWPOR    ,   32);
    IRMD(LCDC,  LGWPR     ,   32);
    IRMD(LCDC,  LGWCR     ,   32);
    IRMD(LCDC,  LGWDCR    ,   32);
    IRMD(LCDC,  BPLUT_BASE,   32);
    IRMD(LCDC,  GWLUT_BASE,   32);    

    if (!display_all)
        printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_can (char *reg, int regread, uint32 value)
{
    IRMD(CAN,   CANMCR,    32);
    IRMD(CAN,   CANCTRL,   32);
    IRMD(CAN,   TIMER,     32);
    IRMD(CAN,   RXGMASK,   32);
    IRMD(CAN,   RX14MASK,  32);
    IRMD(CAN,   RX15MASK,  32);
    IRMD(CAN,   ERRCNT,    32);
    IRMD(CAN,   ERRSTAT,   32);
    IRMD(CAN,   IMASK,     16);
    IRMD(CAN,   IFLAG,     16);
}
/********************************************************************/
static void
irmd_ssi (char *reg, int regread, uint32 value)
{
    IRMD(SSI,   TX0,    32);
    IRMD(SSI,   TX1,    32);
    IRMD(SSI,   RX0,    32);
    IRMD(SSI,   RX1,    32);
    IRMD(SSI,   CR,    32);
    IRMD(SSI,   ISR,    32);
    IRMD(SSI,   IER,    32);
    IRMD(SSI,   TCR,    32);
    IRMD(SSI,   RCR,    32);
    IRMD(SSI,   CCR,    32);
    IRMD(SSI,   FCSR,    32);
    IRMD(SSI,   ACR,    32);
    IRMD(SSI,   ACADD,    32);
    IRMD(SSI,   ACDAT,    32);
    IRMD(SSI,   ATAG,    32);
    IRMD(SSI,   TMASK,    32);
    IRMD(SSI,   RMASK,    32);
}
/********************************************************************/
static void
irmd_rtc (char *reg, int regread, uint32 value)
{
    IRMD(RTC,   HOURMIN,    32);
    IRMD(RTC,   SECONDS,    32);
    IRMD(RTC,   ALRM_HM,    32);
    IRMD(RTC,   ALRM_SEC,    32);
    IRMD(RTC,   CR,    32);
    IRMD(RTC,   ISR,    32);
    IRMD(RTC,   IER,    32);
    IRMD(RTC,   STPWCH,    32);
    IRMD(RTC,   DAYS,    32);
    IRMD(RTC,   ALRM_DAY,    32);
    
}
/********************************************************************/
static void
irmd_pwm (char *reg, int regread, uint32 value)
{
    IRMD(PWM,   PWME,    8);
    IRMD(PWM,   PWMPOL,    8);
    IRMD(PWM,   PWMCLK,    8);
    IRMD(PWM,   PWMPRCLK,    8);
    IRMD(PWM,   PWMCAE,    8);
    IRMD(PWM,   PWMCTL,    8);
    IRMD(PWM,   PWMSCLA,    8);
    IRMD(PWM,   PWMSCLB,    8);
    IRMD(PWM,   PWMCNT0,    8);
    IRMD(PWM,   PWMCNT1,    8);
    IRMD(PWM,   PWMCNT2,    8);
    IRMD(PWM,   PWMCNT3,    8);
    IRMD(PWM,   PWMCNT4,    8);
    IRMD(PWM,   PWMCNT5,    8);
    IRMD(PWM,   PWMCNT6,    8);
    IRMD(PWM,   PWMCNT7,    8);
    IRMD(PWM,   PWMPER0,    8);
    IRMD(PWM,   PWMPER1,    8);
    IRMD(PWM,   PWMPER2,    8);
    IRMD(PWM,   PWMPER3,    8);
    IRMD(PWM,   PWMPER4,    8);
    IRMD(PWM,   PWMPER5,    8);
    IRMD(PWM,   PWMPER6,    8);
    IRMD(PWM,   PWMPER7,    8);
    IRMD(PWM,   PWMDTY0,    8);
    IRMD(PWM,   PWMDTY1,    8);
    IRMD(PWM,   PWMDTY2,    8);
    IRMD(PWM,   PWMDTY3,    8);
    IRMD(PWM,   PWMDTY4,    8);
    IRMD(PWM,   PWMDTY5,    8);
    IRMD(PWM,   PWMDTY6,    8);
    IRMD(PWM,   PWMDTY7,    8);
    IRMD(PWM,   PWMSDN,    8);
    
}
/********************************************************************/
static void
irmd_mdha (char *reg, int regread, uint32 value)
{
    IRMD(MDHA,   MDMR,    32);
    IRMD(MDHA,   MDCR,    32);
    IRMD(MDHA,   MDCMR,    32);
    IRMD(MDHA,   MDSR,    32);
    IRMD(MDHA,   MDISR,    32);
    IRMD(MDHA,   MDIMR,    32);
    IRMD(MDHA,   MDDSR,    32);
    IRMD(MDHA,   MDIN,    32);
    IRMD(MDHA,   MDA0,    32);
    IRMD(MDHA,   MDB0,    32);
    IRMD(MDHA,   MDC0,    32);
    IRMD(MDHA,   MDD0,    32);
    IRMD(MDHA,   MDE0,    32);
    IRMD(MDHA,   MDMDS,    32);
    IRMD(MDHA,   MDA1,    32);
    IRMD(MDHA,   MDB1,    32);
    IRMD(MDHA,   MDC1,    32);
    IRMD(MDHA,   MDD1,    32);
    IRMD(MDHA,   MDE1,    32);    
}
/********************************************************************/
static void
irmd_rng (char *reg, int regread, uint32 value)
{
    IRMD(RNG,   RNGCR,    32);
    IRMD(RNG,   RNGSR,    32);
    IRMD(RNG,   RNGER,    32);
    IRMD(RNG,   RNGOUT,    32);
    
}
/********************************************************************/
static void
irmd_skha (char *reg, int regread, uint32 value)
{
    IRMD(SKHA,   SKMR,    32);
    IRMD(SKHA,   SKCR,    32);
    IRMD(SKHA,   SKCMR,    32);
    IRMD(SKHA,   SKSR,    32);
    IRMD(SKHA,   SKISR,    32);
    IRMD(SKHA,   SKIMR,    32);
    IRMD(SKHA,   SKKSR,    32);
    IRMD(SKHA,   SKDSR,    32);
    IRMD(SKHA,   SKIN,    32);
    IRMD(SKHA,   SKOUT,    32);
    IRMD(SKHA,   SKK0,    32);
    IRMD(SKHA,   SKK1,    32);
    IRMD(SKHA,   SKK2,    32);
    IRMD(SKHA,   SKK3,    32);
    IRMD(SKHA,   SKK4,    32);
    IRMD(SKHA,   SKK5,    32);
    IRMD(SKHA,   SKC0,    32);
    IRMD(SKHA,   SKC1,    32);
    IRMD(SKHA,   SKC2,    32);
    IRMD(SKHA,   SKC3,    32);
    IRMD(SKHA,   SKC4,    32);
    IRMD(SKHA,   SKC5,    32);
    IRMD(SKHA,   SKC6,    32);
    IRMD(SKHA,   SKC7,    32);
    IRMD(SKHA,   SKC8,    32);
    IRMD(SKHA,   SKC9,    32);
    IRMD(SKHA,   SKC10,    32);
    
}
/********************************************************************/
static const struct module_t
{
    char    *module;
    void    (*func)(char *, int, uint32);
} MODULE[] =
{
    {"SCM",     irmd_scm},
    {"XBS",	irmd_xbs},
    {"FBCS",    irmd_fbcs},
    {"FEC",     irmd_fec},
    {"PMM",	irmd_pmm},
    {"EDMA",	irmd_edma},
    {"EDMA_TCD0",irmd_edma_tcd0},
    {"EDMA_TCD1",irmd_edma_tcd1},
    {"EDMA_TCD2",irmd_edma_tcd2},
    {"EDMA_TCD3",irmd_edma_tcd3},
    {"EDMA_TCD4",irmd_edma_tcd4},
    {"EDMA_TCD5",irmd_edma_tcd5},
    {"EDMA_TCD6",irmd_edma_tcd6},
    {"EDMA_TCD7",irmd_edma_tcd7},
    {"EDMA_TCD8",irmd_edma_tcd8},
    {"EDMA_TCD9",irmd_edma_tcd9},
    {"EDMA_TCD10",irmd_edma_tcd10},
    {"EDMA_TCD11",irmd_edma_tcd11},
    {"EDMA_TCD12",irmd_edma_tcd12},
    {"EDMA_TCD13",irmd_edma_tcd13},
    {"EDMA_TCD14",irmd_edma_tcd14},
    {"EDMA_TCD15",irmd_edma_tcd15},
    {"INTC0",    irmd_intc0},
    {"INTC1",    irmd_intc1},
    {"INTC_IACK",    irmd_intc_iack},
    {"I2C",     irmd_i2c},
    {"QSPI",    irmd_qspi},
    {"UART0",   irmd_uart0},
    {"UART1",   irmd_uart1},
    {"UART2",   irmd_uart2},
    {"TIMER0",  irmd_dma_timer0},
    {"TIMER1",  irmd_dma_timer1},
    {"TIMER2",  irmd_dma_timer2},
    {"TIMER3",  irmd_dma_timer3},
    {"PIT0",    irmd_pit0},
    {"PIT1",    irmd_pit1},
    {"PIT2",    irmd_pit2},
    {"PIT3",    irmd_pit3},
    {"EPORT",   irmd_eport},
    {"WTM",     irmd_wtm},
    {"RCM",	irmd_rcm},
    {"CCM",	irmd_ccm},
    {"PLL",     irmd_pll},
    {"GPIO",    irmd_gpio},
    {"SDRAMC",  irmd_sdramc},
    {"USB_OTG", irmd_usb_otg},
    {"USB_HOST", irmd_usb_host},
    {"LCDC",	irmd_lcdc},  
    {"CAN",		irmd_can},  
    {"SSI",		irmd_ssi},
    {"RTC",		irmd_rtc},
    {"PWM",		irmd_pwm},
    {"MDHA",	irmd_mdha},
    {"SKHA",	irmd_skha},
    {"RNG",		irmd_rng}
};

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

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

    display_all = FALSE;
    displayed = 0;

    if (argc == 1)
    {
        for (mi = 0; mi < MODULE_SIZE; ++mi)
        {
            if (!(mi % 6))
                printf("\n");
            printf("%-11s ",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 > 128)
        return;

    switch (vector)
    {
        case 65: /* Eport Interrupt 1 */
        
           	MCF_EPORT_EPFR = MCF_EPORT_EPFR_EPF1;
           	printf("\nEdge Port Interrupt #1\n");
			
			break;                               
        
        case 66: /* Eport Interrupt 4 */

           	MCF_EPORT_EPFR = MCF_EPORT_EPFR_EPF4;
           	printf("\nEdge Port Interrupt #4\n");

			break;

        case 67: /* Eport Interrupt 7 */

            MCF_EPORT_EPFR = MCF_EPORT_EPFR_EPF7;
            printf("\nEdge Port Interrupt #7\n");                     
            
            break;
              
        default:
            printf("\nUser Defined Vector #%d\n",vector);
            break;
    }
}
/********************************************************************/
/*
 * Pause for the specified number of micro-seconds.
 * Uses DTIM3 as a timer
 */
void
cpu_pause_usec(int usecs)
{
    /* Enable the DMA Timer 3 */
    MCF_TIMER3_DTRR = (usecs - 1);
    MCF_TIMER3_DTER = MCF_TIMER_DTER_REF;
    MCF_TIMER3_DTMR = 0
        | MCF_TIMER_DTMR_PS(SYSTEM_CLOCK)
        | MCF_TIMER_DTMR_ORRI
        | MCF_TIMER_DTMR_FRR
        | MCF_TIMER_DTMR_CLK_DIV1
        | MCF_TIMER_DTMR_RST;

    while ((MCF_TIMER3_DTER & MCF_TIMER_DTER_REF) == 0) 
    {};
    
    /* Disable the timer */
    MCF_TIMER3_DTMR = 0;
}
/********************************************************************/

⌨️ 快捷键说明

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