📄 mcf5272_hi.c
字号:
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 + -