This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

OMAPL138 ARM端syscfgreg控制问题



/*
 * Description: init uart
 * Author : xxxxxx
 */
static Bool InitUart(void)
{
	// Pointers to OMAPL1x Module Memory Mapped Registers
	CSL_SyscfgRegsOvly sysRegs = (CSL_SyscfgRegsOvly)(CSL_SYSCFG_0_REGS);
	CSL_PscRegsOvly psc0Regs = (CSL_PscRegsOvly)(CSL_PSC_0_REGS);	

	// enable_module_clocks Enable peripherals; Initiate transition
	CSL_FINST(psc0Regs->MDCTL[CSL_PSC_UART0], PSC_MDCTL_NEXT, ENABLE);
	CSL_FINST(psc0Regs->PTCMD, PSC_PTCMD_GO0, SET);

	Delay_nUs(100);

	// Open Permissions to SYSCFG Registers
	CSL_FINS(sysRegs->KICK0R, SYSCFG_KICK0R_KICK0, KICK0_KEY);
	CSL_FINS(sysRegs->KICK1R, SYSCFG_KICK1R_KICK1, KICK1_KEY);

	//Select runto dsp or arm
	if (OPERATION_PLATFORM_RUNTO == OPERATION_PLATFORM_DSP) {
		CSL_FINST(sysRegs->SUSPSRC, SYSCFG_SUSPSRC_UART0SRC, DSP);
	} else {
		CSL_FINST(sysRegs->SUSPSRC, SYSCFG_SUSPSRC_UART0SRC, ARM);
	}

	Delay_nUs(100);

	//enable UART0_RXD/TXD Signals
	CSL_FINST(sysRegs->PINMUX3, SYSCFG_PINMUX3_PINMUX3_19_16, UART0_RXD);
	CSL_FINST(sysRegs->PINMUX3, SYSCFG_PINMUX3_PINMUX3_23_20, UART0_TXD);

	// Close Permissions to SYSCFG Registers
	CSL_FINS(sysRegs->KICK0R, SYSCFG_KICK0R_KICK0, KICK_LOCK);
	CSL_FINS(sysRegs->KICK0R, SYSCFG_KICK1R_KICK1, KICK_LOCK);
	Delay_nUs(100);

	return TRUE;
}

我想在ARM端控制下UART0,然后通过InitUart()函数完成UART电源管理、管脚复用的配置,但是在线DEBUG仿真,通过Registers窗口发现,PINMUX3寄存器值并没有发生改变,状态依旧是default状态。但是通过Debug Registers窗口直接配置SYSCFG_PINMUX3_PINMUX3_19_16和SYSCFG_PINMUX3_PINMUX3_23_20为UART0_RXD和UART0_TXD,就会立即生效。

而比较有意思的是,同样是这段代码,当切换到DSP端Debug的时候,就会发现当我配置这两个管脚为UART0_RXD和UART0_TXD时,寄存器值立即生效。(PS,Debug未运行前,检查过这寄存器SYSCFG_PINMUX3值为default状态)

不明白,在ARM端到底是因为什么原因导致的无法配置?