我用的主控芯片是TMS320F28377D的DSP,该型号DSP一共有8个独立cmpss,我使用了其中的三路cmpss(1、2、3路),可以将该三路的cmpss按照XBAR的映射关系将cmpss的比较结果映射到相应的管脚,但是却无法将其他的几路(4、5、6、7、8)的比较结果映射到其他管脚输出。配置都完全一样,通过XBAR的映射逻辑也都参考数据手册的要求整的。但是,只有1、2、3路正常,其他的都异常。大家是否遇到类似的为题。void Cmpss6_Initial_Function(void)
{
EALLOW;
Cmpss6Regs.COMPCTL.bit.COMPDACE = 1; /*使能比较器的DAC*/
Cmpss6Regs.COMPCTL.bit.COMPHSOURCE = 0; /*比较器的P端输入为DAC*/
Cmpss6Regs.COMPCTL.bit.COMPLSOURCE = 1; /*需要设置比较器的N端输入为外部输入引脚*/
Cmpss6Regs.COMPCTL.bit.COMPHINV = 0; /*比较器的输出结果不反向*/
Cmpss6Regs.COMPCTL.bit.ASYNCHEN = 0; /**/
Cmpss6Regs.COMPDACCTL.bit.DACSOURCE = 0; /*配置DAC的数字输入端的值来源于影子寄存器*/
Cmpss6Regs.COMPDACCTL.bit.SELREF = 0; /*配置DAC的参考电压为VDDA 注意不是比较器的参考电压 比较器的参考电压为DAC的输出电压*/
Cmpss6Regs.COMPDACCTL.bit.SWLOADSEL = 0; /*使用系统时钟来同步DAC*/
Cmpss6Regs.DACHVALS.bit.DACVAL = 2047; /*通过配置DAC的输出电压值 来设置比较器的参考电压 该寄存器为影子寄存器 DAC的输出值只能是通过影子寄存器的设置来实现 */
/*比较器数字滤波设计 采用典型的数字滤波 */
Cmpss6Regs.CTRIPHFILCLKCTL.bit.CLKPRESCALE = 2047;
Cmpss6Regs.CTRIPHFILCTL.bit.SAMPWIN = 31;
Cmpss6Regs.CTRIPHFILCTL.bit.THRESH = 31;
Cmpss6Regs.CTRIPHFILCTL.bit.FILINIT = 1;
Cmpss6Regs.COMPCTL.bit.CTRIPOUTHSEL = 0; /*比较器输出非同步*/
Cmpss6Regs.COMPCTL.bit.CTRIPLSEL = 0; /*比较器输出非滤波*/
Cmpss6Regs.COMPHYSCTL.bit.COMPHYS = 4; /*设置滞环宽度*/
OutputXbarRegs.OUTPUT5MUX0TO15CFG.bit.MUX10 = 0; /*MUX6 = 0 XBAR4 设置比较器的为高输出结果*/
OutputXbarRegs.OUTPUT5MUXENABLE.bit.MUX10 = 1; /*使能复用开关*/
EDIS;
}
void Init_Cmpss6_Gpio(void)
{
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO29 = 1; /*配置GPIO29的方向设置为输出口*/
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 1; /*禁止GPIO29的上拉功能 */
GpioCtrlRegs.GPAGMUX2.bit.GPIO29 = 0x01; /*通过设置GPAMUX寄存器和GPAGMUX寄存器的值 来将GPIO29的管脚功能映射到外设功能 参照手册P959的表8-7所示 将GPIO29映射到OUTPUTXBAR6*/
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 0x01;
EDIS;
}
这个是其中一个异常的cmpss的配置和XBAR管脚配置。
|