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

📄 mcf5272_hi.c

📁 motorola自己开发的针对coldfire 5272的Dbug bootloader程序
💻 C
📖 第 1 页 / 共 2 页
字号:
}

/********************************************************************/
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);
	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_SIZE(USB,	EP0DR,	EP0DR,	32);
	IRMD_SIZE(USB,	EP1DR,	EP1DR,	32);
	IRMD_SIZE(USB,	EP2DR,	EP2DR,	32);
	IRMD_SIZE(USB,	EP3DR,	EP3DR,	32);
	IRMD_SIZE(USB,	EP4DR,	EP4DR,	32);
	IRMD_SIZE(USB,	EP5DR,	EP5DR,	32);
	IRMD_SIZE(USB,	EP6DR,	EP6DR,	32);
	IRMD_SIZE(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},
	{"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_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("%s ",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
mcf5272_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 + -