要用到MCU上的CAP作为辅助PWM功能,IO口配置了,CAP寄存器也配置了,但MCU无任何动作,看了文档,是有些寄存器必须要在privileged mode才能写操作,也看了论坛里别人的相关提问,但任然不知道如何操作,才能让MCU进入privileged mode,感觉好无助,搞了快1周时间了,MCU死活没动作,板子是LAUNCHXL2板子,同程序里别的演示代码都好好的,我也看了演示代码,里面有串口通信的例程,我想里面应该有配置代码,一路追踪找了好久,感觉这个串口的配置里面就没有进入privileged mode的相关配置代码
Susan Yang:
您可以先参考一下
infocenter.arm.com/…/DDI0363E_cortexr4_r1p3_trm.pdf
的第2.3节
用户模式以外的其他模式均被视为特权模式,只有具有特权访问权限的设备寄存器才能在这些模式下访问。
复位后,CPU处于超级用户模式(SVC),这是特权模式。
可以访问任何外设寄存器(读或写)。通常在此模式下,完成设备初始化。
配置设备后,建议将CPU模式切换到用户模式。
用户模式是唯一没有特权的模式。
仅当您尝试写入受保护的寄存器时,访问受保护的寄存器才会导致数据中止。读取访问不会导致任何中止。
user18914063:
回复 Susan Yang:
那如此说来,MCU复位后是可以直接就配置外设寄存器咯?不需要再配置为特权模式?那是不是我的ECAP配置本身有问题呢?pmmREG->PDCLKDIS= 0x00;pmmREG->PDCLKDISCLR= 0x10;//使能ECAP模块时钟while(pmmTurnONLogicPowerDomain(PMM_LOGICPD6) == FALSE);while(pmmIsLogicPowerDomainActive(PMM_LOGICPD6) == FALSE);//pmmREG->PDCLKDISCLR= 0x10;//使能ECAP模块时钟
ecapEnableAPWMmode(ecapREG2, ACTIVE_HIGH, 1000000, 50000);ecapEnableAPWMmode(ecapREG3, ACTIVE_HIGH, 1000000, 50000);
上面是我的ECAP配置代码,IO口复用代码如下/* Enable Pin Muxing */pinMuxReg->KICKER0 = 0x83E70B13;pinMuxReg->KICKER1 = 0x95A4F1E0;
pinMuxReg->PINMUX[24] = PINMUX_BALL_W8_ECAP3 | PINMUX_BALL_V8_ECAP2 | PINMUX_BALL_H19_MIBSPI5CLK | PINMUX_BALL_E19_MIBSPI5NCS_0;PINMUX_GATE_EMIF_CLK_ENABLE(OFF);PINMUX_EMIF_OUTPUT_ENABLE(OFF);PINMUX_GIOA_DISABLE_HET1_ENABLE(OFF);PINMUX_GIOB_DISABLE_HET2_ENABLE(OFF);PINMUX_ETHERNET_SELECT(MII);PINMUX_ALT_ADC_TRIGGER_SELECT(1);PINMUX_ETPWM1_EQEPERR_ENABLE(EQEPERR12);PINMUX_ETPWM2_EQEPERR_ENABLE(EQEPERR12);PINMUX_ETPWM3_EQEPERR_ENABLE(EQEPERR12);PINMUX_ETPWM4_EQEPERR_ENABLE(EQEPERR12);PINMUX_ETPWM5_EQEPERR_ENABLE(EQEPERR12);PINMUX_ETPWM6_EQEPERR_ENABLE(EQEPERR12);PINMUX_ETPWM7_EQEPERR_ENABLE(EQEPERR12);PINMUX_ETPWM_TIME_BASE_SYNC_ENABLE(OFF);PINMUX_ETPWM_TZ1_ENABLE(ASYNC);PINMUX_ETPWM_TZ2_ENABLE(ASYNC);PINMUX_ETPWM_TZ3_ENABLE(ASYNC);PINMUX_ETPWM_EPWM1SYNCI_ENABLE(ASYNC);PINMUX_ETPWM_SOC1A_ENABLE(ON);PINMUX_ETPWM_SOC2A_ENABLE(ON);PINMUX_ETPWM_SOC3A_ENABLE(ON);PINMUX_ETPWM_SOC4A_ENABLE(ON);PINMUX_ETPWM_SOC5A_ENABLE(ON);PINMUX_ETPWM_SOC6A_ENABLE(ON);PINMUX_ETPWM_SOC7A_ENABLE(ON);PINMUX_EQEP1A_FILTER_ENABLE(OFF);PINMUX_EQEP1B_FILTER_ENABLE(OFF);PINMUX_EQEP1I_FILTER_ENABLE(OFF);PINMUX_EQEP1S_FILTER_ENABLE(OFF);PINMUX_EQEP2A_FILTER_ENABLE(OFF);PINMUX_EQEP2B_FILTER_ENABLE(OFF);PINMUX_EQEP2I_FILTER_ENABLE(OFF);PINMUX_EQEP2S_FILTER_ENABLE(OFF);PINMUX_ECAP1_FILTER_ENABLE(OFF);PINMUX_ECAP2_FILTER_ENABLE(OFF);PINMUX_ECAP3_FILTER_ENABLE(OFF);PINMUX_ECAP4_FILTER_ENABLE(OFF);PINMUX_ECAP5_FILTER_ENABLE(OFF);PINMUX_ECAP6_FILTER_ENABLE(OFF);PINMUX_GIOA0_DMA_ENABLE(OFF);PINMUX_GIOA1_DMA_ENABLE(OFF);PINMUX_GIOA2_DMA_ENABLE(OFF);PINMUX_GIOA3_DMA_ENABLE(OFF);PINMUX_GIOA4_DMA_ENABLE(OFF);PINMUX_GIOA5_DMA_ENABLE(OFF);PINMUX_GIOA6_DMA_ENABLE(OFF);PINMUX_GIOA7_DMA_ENABLE(OFF);PINMUX_GIOB0_DMA_ENABLE(OFF);PINMUX_GIOB1_DMA_ENABLE(OFF);PINMUX_GIOB2_DMA_ENABLE(OFF);PINMUX_GIOB3_DMA_ENABLE(OFF);PINMUX_GIOB4_DMA_ENABLE(OFF);PINMUX_GIOB5_DMA_ENABLE(OFF);PINMUX_GIOB6_DMA_ENABLE(OFF);PINMUX_GIOB7_DMA_ENABLE(OFF);pinMuxReg->PINMUX[174] |= (uint32)(~(0XFEFFFFFFU));
PINMUX_TEMP1_ENABLE(OFF);PINMUX_TEMP2_ENABLE(OFF);PINMUX_TEMP3_ENABLE(OFF);
/* Disable Pin Muxing */pinMuxReg->KICKER0 = 0x00000000;pinMuxReg->KICKER1 = 0x00000000;
user18914063:
回复 user18914063:
现在我的所有外设时钟都打开了,IO口也配置了,外设复用也配置了,然后ECAP的控制寄存器也配置为PWM模式了,周期寄存器,占空比也设置了,还可能哪里没配置呢,感觉弄个外设咋这么异常复杂啊,晕哦