📄 mcf5272_hi.c
字号:
/*
* File: mcf5272_hi.c
* Purpose: Register display/modify routines for MCF5272 modules.
*
* Notes:
*
*/
#include "src/include/dbug.h"
#include "src/uif/cpu.h"
/********************************************************************/
/*
* CPU name string and source code version for display at boot-up.
*/
const char CPU_STR[] = "ColdFire MCF5272";
const int CPU_VER_MAJOR = 1;
const char CPU_VER_MINOR = 'a';
/********************************************************************/
static const char FORMAT8[] = "%6s (%-6s): %02X\n";
static const char FORMAT16[] = "%6s (%-6s): %04X\n";
static const char FORMAT32[] = "%6s (%-6s): %08X\n";
static const char XFORMAT[] = "%6s (%-6s): %6s\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 = MCF5272_ ## MOD ## _ ## RDREG; \
printf(FORMAT ## SIZE, #RDREG, #WRREG, rdata); \
\
pause(&displayed); \
\
if (!display_all) return; \
} \
} \
else \
{ \
if (strcasecmp(#WRREG,reg) == 0) \
{ \
MCF5272_ ## MOD ## _ ## WRREG = (uint ## SIZE) value; \
return; \
} \
}
#define IRMD_NOWR(MOD,RDREG,SIZE) \
if (regread) \
{ \
if ((strcasecmp(#RDREG,reg) == 0) || display_all) \
{ \
rdata = MCF5272_ ## 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) \
{ \
MCF5272_ ## MOD ## _ ## WRREG = (uint ## SIZE) value; \
return; \
} \
}
static int display_all;
static int displayed;
static uint32 rdata;
/********************************************************************/
static void
irmd_sim (char *reg, int regread, uint32 value)
{
IRMD_NOWR(SIM, MBAR, 32);
IRMD(SIM, SCR, SCR, 16);
IRMD(SIM, SPR, SPR, 16);
IRMD(SIM, PMR, PMR, 32);
IRMD_NORD(SIM, ALPR, 16);
IRMD_NOWR(SIM, DIR, 32);
IRMD(TIMER, WRRR, WRRR, 16);
IRMD(TIMER, WIRR, WIRR, 16);
IRMD(TIMER, WCR, WCR, 16);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_intc (char *reg, int regread, uint32 value)
{
IRMD(INTC, ICR1, ICR1, 32);
IRMD(INTC, ICR2, ICR2, 32);
IRMD(INTC, ICR3, ICR3, 32);
IRMD(INTC, ICR4, ICR4, 32);
IRMD_NOWR(INTC, ISR, 32);
IRMD(INTC, PITR, PITR, 32);
IRMD(INTC, PIWR, PIWR, 32);
IRMD(INTC, PIVR, PIVR, 8);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_cs (char *reg, int regread, uint32 value)
{
IRMD(CS, CSBR0, CSBR0, 32);
IRMD(CS, CSOR0, CSOR0, 32);
IRMD(CS, CSBR1, CSBR1, 32);
IRMD(CS, CSOR1, CSOR1, 32);
IRMD(CS, CSBR2, CSBR2, 32);
IRMD(CS, CSOR2, CSOR2, 32);
IRMD(CS, CSBR3, CSBR3, 32);
IRMD(CS, CSOR3, CSOR3, 32);
IRMD(CS, CSBR4, CSBR4, 32);
IRMD(CS, CSOR4, CSOR4, 32);
IRMD(CS, CSBR5, CSBR5, 32);
IRMD(CS, CSOR5, CSOR5, 32);
IRMD(CS, CSBR6, CSBR6, 32);
IRMD(CS, CSOR6, CSOR6, 32);
IRMD(CS, CSBR7, CSBR7, 32);
IRMD(CS, CSOR7, CSOR7, 32);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_gpio (char *reg, int regread, uint32 value)
{
IRMD(GPIO, PACNT, PACNT, 32);
IRMD(GPIO, PADDR, PADDR, 16);
IRMD(GPIO, PADAT, PADAT, 16);
IRMD(GPIO, PBCNT, PBCNT, 32);
IRMD(GPIO, PBDDR, PBDDR, 16);
IRMD(GPIO, PBDAT, PBDAT, 16);
IRMD(GPIO, PCDDR, PCDDR, 16);
IRMD(GPIO, PCDAT, PCDAT, 16);
IRMD(GPIO, PDCNT, PDCNT, 32);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_qspi (char *reg, int regread, uint32 value)
{
IRMD(QSPI, QMR, QMR, 16);
IRMD(QSPI, QDLYR, QDLYR, 16);
IRMD(QSPI, QWR, QWR, 16);
IRMD(QSPI, QIR, QIR, 16);
IRMD(QSPI, QAR, QAR, 16);
IRMD(QSPI, QDR, QDR, 16);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_pwm (char *reg, int regread, uint32 value)
{
IRMD(PWM, PWCR0, PWCR0, 8);
IRMD(PWM, PWCR1, PWCR1, 8);
IRMD(PWM, PWCR2, PWCR2, 8);
IRMD(PWM, PWWD0, PWWD0, 8);
IRMD(PWM, PWWD1, PWWD1, 8);
IRMD(PWM, PWWD2, PWWD2, 8);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_dma (char *reg, int regread, uint32 value)
{
IRMD(DMA, DCMR, DCMR, 32);
IRMD(DMA, DCIR, DCIR, 16);
IRMD(DMA, DBCR, DBCR, 32);
IRMD(DMA, DSAR, DSAR, 32);
IRMD(DMA, DDAR, DDAR, 32);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_uart0 (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_NOWR(UART0, UABR1, 8);
IRMD_NOWR(UART0, UABR2, 8);
IRMD(UART0, UTFCSR, UTFCSR, 8);
IRMD(UART0, URFCSR, URFCSR, 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 (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_NOWR(UART1, UABR1, 8);
IRMD_NOWR(UART1, UABR2, 8);
IRMD(UART1, UTFCSR, UTFCSR, 8);
IRMD(UART1, URFCSR, URFCSR, 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 (char *reg, int regread, uint32 value)
{
IRMD(SDRAMC, SDCCR, SDCCR, 16);
IRMD(SDRAMC, SDCTR, SDCTR, 16);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_timer0 (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, 16);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_timer1 (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, 16);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_timer2 (char *reg, int regread, uint32 value)
{
IRMD(TIMER2, TMR, TMR, 16);
IRMD(TIMER2, TRR, TRR, 16);
IRMD_NOWR(TIMER2, TCR, 16);
IRMD(TIMER2, TCN, TCN, 16);
IRMD(TIMER2, TER, TER, 16);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_timer3 (char *reg, int regread, uint32 value)
{
IRMD(TIMER3, TMR, TMR, 16);
IRMD(TIMER3, TRR, TRR, 16);
IRMD_NOWR(TIMER3, TCR, 16);
IRMD(TIMER3, TCN, TCN, 16);
IRMD(TIMER3, TER, TER, 16);
if (!display_all)
printf(INVREG,reg);
}
/********************************************************************/
static void
irmd_pli (char *reg, int regread, uint32 value)
{
IRMD_NOWR( PLI, P0B1RR, 32);
IRMD_NOWR( PLI, P1B1RR, 32);
IRMD_NOWR( PLI, P2B1RR, 32);
IRMD_NOWR( PLI, P3B1RR, 32);
IRMD_NOWR( PLI, P0B2RR, 32);
IRMD_NOWR( PLI, P1B2RR, 32);
IRMD_NOWR( PLI, P2B2RR, 32);
IRMD_NOWR( PLI, P3B2RR, 32);
IRMD_NOWR( PLI, P0DRR, 32);
IRMD_NOWR( PLI, P1DRR, 32);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -