/*
* 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端到底是因为什么原因导致的无法配置?