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.

F28M35 Dual System Examples -- blinky

Other Parts Discussed in Thread: CONTROLSUITE

我使用ti官方f28m35开发板运行controlSuite的blinky例程,运行结果正常;

但是我对代码的一些部分有点疑问:

在代码中有如下调用关系:

main()

---->

InitSysCtrl();              //F28M35x_SysCtrl.c

---->

InitPeripheralClocks();

当我打开InitPeripheralClocks()的代码时,发现它的代码如下:

void InitPeripheralClocks(void)
{

......

EALLOW;
while((**AnalogClockEnable)(AnalogConfig1,ADC1_ENABLE));
// Enable ADC 1

while((**AnalogClockEnable)(AnalogConfig2,ANALOGCONFIG2ALL));
// Enable  ADC2, COMP1,2,3,4,5,6

(**ReadAnalogClockStatus)(AnalogConfig2);                                                          
// Wait for AnalogClockEnable function to finish

......

}

我认为这个例程(blinky)和adc功能无关,所以我就试着把斜体部分的三行代码(从第一个while()行到(**ReadAnalogClockStatus)()行) 注释掉,

结果我发现程序无法正常工作了,led灯不闪了。

请问,这是什么原因?

  • 在函数的注释中有说明,The Device_cal function MUST be called for the ADC and oscillators to function according to specification. The clocks to the ADC MUST be enabled before calling this function

  • Hi, Hank, 多谢回答!

    我的疑问不在于Device_cal的调用,我并没有把Device_cal()的调用注释掉,包括Device_cal调用前的打开ADC时钟的代码(AnalogClockEnable())和调用后的关闭ADC时钟的代码(AnalogClockDisable());这些代码都在 InitSysCtrl()中;

    我注释掉的部分是void InitPeripheralClocks()中:(斜体部分)

    void InitPeripheralClocks(void)
    {

    // LOSPCP prescale register settings, normally it will be set to default
    // values
    EALLOW;
    SysCtrlRegs.LOSPCP.all = 0x0002;
    EDIS;

    EALLOW;
    while((**AnalogClockEnable)(AnalogConfig1,ADC1_ENABLE));
    // Enable ADC 1

    while((**AnalogClockEnable)(AnalogConfig2,ANALOGCONFIG2ALL));
    // Enable ADC 2, COMP1,2,3,4,5,6

    (**ReadAnalogClockStatus)(AnalogConfig2);
    // Wait for AnalogClockEnable function to finish

    ......

    }

    请问,是不是这部分代码和Device_cal()也有关系?

    或者开发板上控制的LED灯的GPIO(PC6_GPIO70和PC6_GPIO71)也和ADC时钟有关系?

    谢谢!

  • InitSysCtrl中的这三条语句不能注释掉,不过InitPeripheralClocks中的这三个语句是可以注释掉的,注释掉之后在线调试程序仍然正常工作,LED仍能闪烁。你的程序不能工作应该跟注释掉这三句没有关系。

  • Hi, Hank, 多谢回答!

    我确实只注释掉InitPeripheralClocks()中的这三个语句;

    这样子,我回头检查一下我的代码,确认一下,是否有哪些遗漏。如果有疑问再从这个帖子主题向你请教。

    如果没有疑问,我再把这个问题给结案。

    再次谢谢!

  • Hi, Hank.

    我又试了一下,如果只是把这三行代码注释掉,程序执行起来确实不正常,由C28控制的 LED0不闪;

    但是我又试了一下,把闪灯的代码由

    LED_0_DAT_REG = 0;

    LED_0_DAT_REG = 1;

    改成LED_0_TOGGLE = 1;

    程序就能正常工作。

    多谢!你说的没错!