📄 mcf5249_hi.c
字号:
/*
* File: mcf5249_hi.c
* Purpose: Register display/modify routines for MCF5249 modules.
*
* Notes:
*
*/
#include "src/include/dbug.h"
/********************************************************************/
/*
* CPU name string and source code version for display at boot-up.
*/
const char CPU_STR[] = "ColdFire MCF5249";
const int CPU_VER_MAJOR = 1;
const char CPU_VER_MINOR = 'b';
/********************************************************************/
static const char FORMAT8[] = "%-15s (%-15s): %02X\n";
static const char FORMAT16[] = "%-15s (%-15s): %04X\n";
static const char FORMAT32[] = "%-15s (%-15s): %08X\n";
static const char XFORMAT[] = "%-15s (%-15s): %12s\n";
static const char INVMOD[] = "Error: Invalid Module: %s\n";
static const char NOREG[] = "XXXXXX";
#define IRMD(MOD,RDREG,WRREG,SIZE) \
if (regread) \
{ \
if ((strcasecmp(#RDREG,reg) == 0) || display_all) \
{ \
rdata = MCF5249_ ## MOD ## _ ## RDREG; \
printf(FORMAT ## SIZE, #RDREG, #WRREG, rdata); \
\
pause(&displayed); \
\
if (!display_all) return; \
} \
} \
else \
{ \
if (strcasecmp(#WRREG,reg) == 0) \
{ \
MCF5249_ ## MOD ## _ ## WRREG =(uint ## SIZE)value; \
return; \
} \
}
#define IRMD_NOWR(MOD,RDREG,SIZE) \
if (regread) \
{ \
if ((strcasecmp(#RDREG,reg) == 0) || display_all) \
{ \
rdata = MCF5249_ ## MOD ## _ ## RDREG; \
printf(FORMAT ## SIZE, #RDREG, NOREG, rdata); \
\
pause(&displayed); \
\
if (!display_all) return; \
} \
}
#define IRMD_NORD(MOD,WRREG,SIZE) \
if (regread && display_all) \
{ \
printf(XFORMAT, NOREG, #WRREG, NOREG); \
} \
else \
{ \
if (strcasecmp(#WRREG,reg) == 0) \
{ \
MCF5249_ ## MOD ## _ ## WRREG =(uint ## SIZE) value; \
return; \
} \
}
static int display_all;
static int displayed;
static uint32 rdata;
/********************************************************************/
static void
//irmd_sim (void *imm, char *reg, int regread, uint32 value)
irmd_sim (char *reg, int regread, uint32 value)
{
IRMD(SIM, RSR, RSR, 8);
IRMD(SIM, SYPCR, SYPCR, 8);
IRMD(SIM, SWIVR, SWIVR, 8);
IRMD(SIM, SWSR, SWSR, 8);
IRMD(SIM, IRQPAR, IRQPAR, 8);
IRMD(SIM, MPARK, MPARK, 8);
IRMD(SIM, IPR, IPR, 32);
IRMD(SIM, IMR, IMR, 32);
IRMD(SIM, ICR0, ICR0, 8);
IRMD(SIM, ICR1, ICR1, 8);
IRMD(SIM, ICR2, ICR2, 8);
IRMD(SIM, ICR3, ICR3, 8);
IRMD(SIM, ICR4, ICR4, 8);
IRMD(SIM, ICR5, ICR5, 8);
IRMD(SIM, ICR6, ICR6, 8);
IRMD(SIM, ICR7, ICR7, 8);
IRMD(SIM, ICR8, ICR8, 8);
IRMD(SIM, ICR9, ICR9, 8);
IRMD(SIM, ICR10, ICR10, 8);
IRMD_NOWR(SIM, DEVID, 32);
IRMD(SIM, GPIO_READ, GPIO_READ, 32);
IRMD(SIM, GPIO_OUT, GPIO_OUT, 32);
IRMD(SIM, GPIO_ENABLE, GPIO_ENABLE, 32);
IRMD(SIM, GPIO_FUNC, GPIO_FUNC, 32);
IRMD(SIM, GPIO1_READ, GPIO1_READ, 32);
IRMD(SIM, GPIO1_OUT, GPIO1_OUT, 32);
IRMD(SIM, GPIO1_ENABLE, GPIO1_ENABLE, 32);
IRMD(SIM, GPIO1_FUNC, GPIO1_FUNC, 32);
IRMD(SIM, GPIO_INT_STAT, GPIO_INT_STAT, 32);
IRMD(SIM, GPIO_INT_CLEAR, GPIO_INT_CLEAR, 32);
IRMD(SIM, GPIO_INT_EN, GPIO_INT_EN, 32);
IRMD(SIM, INTERRUPT_STAT3,INTERRUPT_STAT3,32);
IRMD(SIM, INTERRUPT_CLR3, INTERRUPT_CLR3, 32);
IRMD(SIM, INTERRUPT_EN3, INTERRUPT_EN3, 32);
IRMD(SIM, INTLEV1, INTLEV1, 8);
IRMD(SIM, INTLEV2, INTLEV2, 8);
IRMD(SIM, INTLEV3, INTLEV3, 8);
IRMD(SIM, INTLEV4, INTLEV4, 8);
IRMD(SIM, INTLEV5, INTLEV5, 8);
IRMD(SIM, INTLEV6, INTLEV6, 8);
IRMD(SIM, INTLEV7, INTLEV7, 8);
IRMD(SIM, INTLEV8, INTLEV8, 8);
IRMD(SIM, SPURVEC, SPURVEC, 8);
IRMD(SIM, INTBASE, INTBASE, 8);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_pll (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(PLL, PLLCR, PLLCR, 32);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_cs (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(CS, CSAR0, CSAR0, 16);
IRMD(CS, CSMR0, CSMR0, 32);
IRMD(CS, CSCR0, CSCR0, 16);
IRMD(CS, CSAR1, CSAR1, 16);
IRMD(CS, CSMR1, CSMR1, 32);
IRMD(CS, CSCR1, CSCR1, 16);
IRMD(CS, CSAR2, CSAR2, 16);
IRMD(CS, CSMR2, CSMR2, 32);
IRMD(CS, CSCR2, CSCR2, 16);
IRMD(CS, CSAR3, CSAR3, 16);
IRMD(CS, CSMR3, CSMR3, 32);
IRMD(CS, CSCR3, CSCR3, 16);
IRMD(CS, IDECONFIG1, IDECONFIG1, 32);
IRMD(CS, IDECONFIG2, IDECONFIG2, 32);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_qspi (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(QSPI, QMR, QMR, 32);
IRMD(QSPI, QDLYR, QDLYR, 32);
IRMD(QSPI, QWR, QWR, 32);
IRMD(QSPI, QIR, QIR, 32);
IRMD(QSPI, QAR, QAR, 32);
IRMD(QSPI, QDR, QDR, 32);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_dma0 (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(DMA0, SAR, SAR, 32);
IRMD(DMA0, DAR, DAR, 32);
IRMD(DMA0, DCR, DCR, 16);
IRMD(DMA0, BCR, BCR, 16);
IRMD(DMA0, DSR, DSR, 8);
IRMD(DMA0, DIVR, DIVR, 8);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_dma1 (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(DMA1, SAR, SAR, 32);
IRMD(DMA1, DAR, DAR, 32);
IRMD(DMA1, DCR, DCR, 16);
IRMD(DMA1, BCR, BCR, 16);
IRMD(DMA1, DSR, DSR, 8);
IRMD(DMA1, DIVR, DIVR, 8);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_dma2 (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(DMA2, SAR, SAR, 32);
IRMD(DMA2, DAR, DAR, 32);
IRMD(DMA2, DCR, DCR, 16);
IRMD(DMA2, BCR, BCR, 16);
IRMD(DMA2, DSR, DSR, 8);
IRMD(DMA2, DIVR, DIVR, 8);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_dma3 (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(DMA3, SAR, SAR, 32);
IRMD(DMA3, DAR, DAR, 32);
IRMD(DMA3, DCR, DCR, 16);
IRMD(DMA3, BCR, BCR, 16);
IRMD(DMA3, DSR, DSR, 8);
IRMD(DMA3, DIVR, DIVR, 8);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_uart0 (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(UART0, UMR, UMR, 8);
IRMD(UART0, USR, UCSR, 8);
IRMD_NORD(UART0, UCR, 8);
IRMD(UART0, URB, UTB, 8);
IRMD(UART0, UIPCR, UACR, 8);
IRMD(UART0, UISR, UIMR, 8);
IRMD_NORD(UART0, UBG1, 8);
IRMD_NORD(UART0, UBG2, 8);
IRMD(UART0, UIVR, UIVR, 8);
IRMD_NOWR(UART0, UIP, 8);
IRMD_NORD(UART0, UOP1, 8);
IRMD_NORD(UART0, UOP0, 8);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_uart1 (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(UART1, UMR, UMR, 8);
IRMD(UART1, USR, UCSR, 8);
IRMD_NORD(UART1, UCR, 8);
IRMD(UART1, URB, UTB, 8);
IRMD(UART1, UIPCR, UACR, 8);
IRMD(UART1, UISR, UIMR, 8);
IRMD_NORD(UART1, UBG1, 8);
IRMD_NORD(UART1, UBG2, 8);
IRMD(UART1, UIVR, UIVR, 8);
IRMD_NOWR(UART1, UIP, 8);
IRMD_NORD(UART1, UOP1, 8);
IRMD_NORD(UART1, UOP0, 8);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_sdramc (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(DRAMC, DCR, DCR, 16);
IRMD(DRAMC, DACR0, DACR0, 32);
IRMD(DRAMC, DMR0, DMR0, 32);
IRMD(DRAMC, DACR1, DACR1, 32);
IRMD(DRAMC, DMR1, DMR1, 32);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_timer0 (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(TIMER0, TMR, TMR, 16);
IRMD(TIMER0, TRR, TRR, 16);
IRMD_NOWR(TIMER0, TCR, 16);
IRMD(TIMER0, TCN, TCN, 16);
IRMD(TIMER0, TER, TER, 8);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_timer1 (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(TIMER1, TMR, TMR, 16);
IRMD(TIMER1, TRR, TRR, 16);
IRMD_NOWR(TIMER1, TCR, 16);
IRMD(TIMER1, TCN, TCN, 16);
IRMD(TIMER1, TER, TER, 8);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_audio (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(AUDIO, IIS1_CFG, IIS1_CFG, 32);
IRMD(AUDIO, IIS2_CFG, IIS2_CFG, 32);
IRMD(AUDIO, IIS3_CFG, IIS3_CFG, 32);
IRMD(AUDIO, IIS4_CFG, IIS4_CFG, 32);
IRMD(AUDIO, EBU_CFG, EBU_CFG, 32);
IRMD(AUDIO, EBU_RCV_C_CH_1, EBU_RCV_C_CH_1, 32);
IRMD(AUDIO, EBU_TX_C_CH_1, EBU_TX_C_CH_1, 32);
IRMD(AUDIO, EBU_TX_C_CH_2, EBU_TX_C_CH_2, 32);
IRMD(AUDIO, DATA_IN_CONTROL, DATA_IN_CONTROL, 16);
IRMD(AUDIO, PDIR1_L, PDIR1_L, 32);
IRMD(AUDIO, PDIR3_L, PDIR3_L, 32);
IRMD(AUDIO, PDIR1_R, PDIR1_R, 32);
IRMD(AUDIO, PDIR3_R, PDIR3_R, 32);
IRMD(AUDIO, PDOR1_L, PDOR1_L, 32);
IRMD(AUDIO, PDOR1_R, PDOR1_R, 32);
IRMD(AUDIO, PDOR2_L, PDOR2_L, 32);
IRMD(AUDIO, PDOR2_R, PDOR2_R, 32);
IRMD(AUDIO, PDOR3, PDOR3, 32);
IRMD(AUDIO, PDIR, PDIR, 32);
IRMD(AUDIO, U_CHANNEL_XMIT, U_CHANNEL_XMIT, 32);
IRMD(AUDIO, U_CHANNEL_RCV, U_CHANNEL_RCV, 32);
IRMD(AUDIO, Q_CHANNEL_RCV, Q_CHANNEL_RCV, 32);
IRMD(AUDIO, CD_TEXT_CONTROL, CD_TEXT_CONTROL, 8);
IRMD(AUDIO, INTERRUPT_EN, INTERRUPT_EN, 32);
IRMD(AUDIO, INTERRUPT_CLEAR, INTERRUPT_CLEAR, 32);
IRMD(AUDIO, INTERRUPT_STAT, INTERRUPT_STAT, 32);
IRMD(AUDIO, DMA_CONFIG, DMA_CONFIG, 8);
IRMD(AUDIO, PHASE_CONFIG, PHASE_CONFIG, 8);
IRMD(AUDIO, XTRIM, XTRIM, 16);
IRMD(AUDIO, FREQ_MEAS, FREQ_MEAS, 32);
IRMD(AUDIO, BLOCK_CONTROL, BLOCK_CONTROL, 16);
IRMD(AUDIO, GLOB, GLOB, 16);
IRMD(AUDIO, EBU2_CONFIG, EBU2_CONFIG, 32);
IRMD(AUDIO, EBU2_RCV_C_CNL_1, EBU2_RCV_C_CNL_1, 32);
IRMD(AUDIO, U2_CHANNEL_RCV, U2_CHANNEL_RCV, 32);
IRMD(AUDIO, Q2_CHANNEL_RCV, Q2_CHANNEL_RCV, 32);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_adc (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(ADC, ADCONFIG, ADCONFIG, 16);
IRMD(ADC, ADVALUE, ADVALUE, 16);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_i2c (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(I2C, MADR, MADR, 8);
IRMD(I2C, MFDR, MFDR, 8);
IRMD(I2C, MBCR, MBCR, 8);
IRMD(I2C, MBSR, MBSR, 8);
IRMD(I2C, MBDR, MBDR, 8);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_i2c2 (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(I2C2, MADR, MADR, 8);
IRMD(I2C2, MFDR, MFDR, 8);
IRMD(I2C2, MBCR, MBCR, 8);
IRMD(I2C2, MBSR, MBSR, 8);
IRMD(I2C2, MBDR, MBDR, 8);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_flashmedia (/*void *imm,*/ char *reg, int regread, uint32 value)
{
IRMD(FLASHMEDIA, CONFIG, CONFIG, 32);
IRMD(FLASHMEDIA, CMD1, CMD1, 32);
IRMD(FLASHMEDIA, CMD2, CMD2, 32);
IRMD(FLASHMEDIA, DATA1, DATA1, 32);
IRMD(FLASHMEDIA, DATA2, DATA2, 32);
IRMD(FLASHMEDIA, STATUS, STATUS, 32);
IRMD(FLASHMEDIA, INT_EN, INT_EN, 32);
IRMD(FLASHMEDIA, INT_STAT, INT_STAT, 32);
IRMD(FLASHMEDIA, INT_CLEAR, INT_CLEAR, 32);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static const struct module_t
{
char *module;
void (*func)(char *, int, uint32);
} MODULE[] =
{
{"SIM", irmd_sim},
{"CS", irmd_cs},
{"PLL", irmd_pll},
{"QSPI", irmd_qspi},
{"DMA0", irmd_dma0},
{"DMA1", irmd_dma1},
{"DMA2", irmd_dma2},
{"DMA3", irmd_dma3},
{"UART0", irmd_uart0},
{"UART1", irmd_uart1},
{"SDRAMC", irmd_sdramc},
{"TIMER0", irmd_timer0},
{"TIMER1", irmd_timer1},
{"AUDIO", irmd_audio},
{"ADC", irmd_adc},
{"I2C", irmd_i2c},
{"I2C2", irmd_i2c2},
{"FLASHMEDIA", irmd_flashmedia}
} ;
#define MODULE_SIZE (int)(sizeof(MODULE)/sizeof(struct module_t))
/********************************************************************/
void
mcf5249_ird (int argc, char **argv)
{
/*
* Display Internal Memory Mapped register contents
*/
char *rstr;
char mstr[20];
int mi;
(void)argc;
display_all = FALSE;
if (argv[1] == NULL)
{
printf("Internal Modules (MBAR = %#08X):",MBAR_ADDRESS);
for (mi = 0; mi < MODULE_SIZE; ++mi)
{
if (!(mi % 9))
printf("\n");
printf("%-6s ",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 == '.')
++rstr;
/*
* Display the module contents
*/
for (mi = 0; mi < MODULE_SIZE; ++mi)
{
if (strcasecmp(MODULE[mi].module,mstr) == 0)
{
if (rstr == NULL)
{
display_all = TRUE;
printf("Module: %s\n",MODULE[mi].module);
}
MODULE[mi].func(rstr, TRUE, 0);
return;
}
}
printf(INVMOD,argv[1]);
}
/********************************************************************/
void
mcf5249_irm (int argc, char **argv)
{
/*
* Modify Internal Memory Mapped register contents
*/
uint32 value;
int success;
char *rstr;
char mstr[20];
int mi;
(void)argc;
display_all = FALSE;
/*
* 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 == '.')
++rstr;
/*
* Get the new value
*/
value = get_value(argv[2],&success,16);
if(success == 0)
{
printf(INVALUE,argv[2]);
return;
}
/*
* Modify the module contents
*/
for (mi = 0; mi < MODULE_SIZE; ++mi)
{
if (strcasecmp(MODULE[mi].module,mstr) == 0)
{
MODULE[mi].func(rstr, FALSE, value);
return;
}
}
printf(INVMOD,argv[1]);
}
/********************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -