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