我使用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灯不闪了。
请问,这是什么原因?
Johnson Chen2:
回复 Hank Zhao:
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时钟有关系?
谢谢!
我使用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灯不闪了。
请问,这是什么原因?
Johnson Chen2:
回复 Hank Zhao:
Hi, Hank, 多谢回答!
我确实只注释掉InitPeripheralClocks()中的这三个语句;
这样子,我回头检查一下我的代码,确认一下,是否有哪些遗漏。如果有疑问再从这个帖子主题向你请教。
如果没有疑问,我再把这个问题给结案。
再次谢谢!
我使用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灯不闪了。
请问,这是什么原因?
Johnson Chen2:
回复 Johnson Chen2:
Hi, Hank.
我又试了一下,如果只是把这三行代码注释掉,程序执行起来确实不正常,由C28控制的 LED0不闪;
但是我又试了一下,把闪灯的代码由
LED_0_DAT_REG = 0;
和
LED_0_DAT_REG = 1;
改成LED_0_TOGGLE = 1;
程序就能正常工作。
多谢!你说的没错!