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.

TMS320F28M35双核控制器的XCLKOUT时钟输出问题

各位老师,本人在学习F28M35的H52C型号处理器。芯片的GPIO34_PF2引脚可以复用为XCLKOUT,即时钟外部输出。根据资料,这个引脚既可以在M3内核控制下更改MUX来复用,也可以在C28内核控制下复用。我在C28下复用有输出,但在M3内核下复用没有输出,不知道什么原因。因为设计需要,希望能把该引脚控制程序放在M3里面。


在C28里面,更改引脚复用就行了:
EALLOW;
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 3;
EDIS;

在M3环境下就不能输出,M3的配置代码(编译下载运行都没问题):

SysCtlClockConfigSet(SYSCTL_USE_PLL | (SYSCTL_SPLLIMULT_M & 0x0F) |
SYSCTL_SYSDIV_1 | SYSCTL_M3SSDIV_2);

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinConfigureCoreSelect(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_M_CORE_SELECT);

GPIOPinConfigure(GPIO_PF2_XCLKOUT0);
GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_2,GPIO_DIR_MODE_HW);

不知道是什么问题,还是需要其他配置?

  • 这个问题解决了没,怎么做到的? 没用过这个芯片,但是很想了解一下,怎么使用M3内核控制这个引脚输出CLK。

  • 还没解决,感觉是寄存器的问题,库函数里面没有能直接把M3的XCLKOUT引脚初始化的函数,需要自己用几个其他函数把寄存器配出来。
    关于M3内核控制这个引脚输出CLK的问题,我个人大概的理解是:对于单核芯片,同一个引脚通过多路复用器来实现各种功能,例如GPIO、UART等,对于双核芯片又增加了“更高一级”的复用选项,这个选项决定了引脚当前是受到哪个内核的控制,这个选项是由M3内核来决定的。通过这个选项确定了内核,之后才会涉及到内核控制下的引脚的具体复用功能。所以步骤是首先在M3程序里把引脚权限给M3,之后通过引脚复用把这个引脚配置为XCLKOUT模式,这个引脚会输出一个可配置分频的时钟。
  • 我的问题已经解决了,原因是没有把引脚设定为输出模式导致的。

    在c28核中,引脚貌似一旦使能,就默认为输出模式的,所以只要经过引脚复用:

    GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 3;就可以输出CLKOUT时钟了。

    在m3核中,引脚貌似默认不是输出,所以要选为输出模式,增加这句代码:

    GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_TYPE_STD);

    由此,如果不考虑时钟源的话,m3内核下的外部时钟输出的完整配置方法为:

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);     //引脚使能
    GPIOPinConfigureCoreSelect(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_M_CORE_SELECT);   //内核权限选择

    GPIOPinConfigure(GPIO_PF2_XCLKOUT0);   //引脚复用
    GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_DIR_MODE_HW);    //硬件控制模式
    GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_2, GPIO_PIN_TYPE_STD);   //输出模式配置,这里选择了推挽

    其实,对于M3内核中一般的引脚复用,例如UART,例程已经很清楚了,核心是:

    GPIOPinConfigure(GPIO_PE4_U0RX);
    GPIOPinConfigure(GPIO_PE5_U0TX);
    GPIOPinTypeUART(GPIO_PORTE_BASE, GPIO_PIN_4 | GPIO_PIN_5);

    对于实现外部时钟输出,上面最后一行代码的这种函数形式:GPIOPinType_?_?_?官方库函数是没有给的,因此后面的东西要自己配。之前没有仔细分析时钟输出的信号连接原理,所示出现了问题。