高手们,请帮我看看下面的程序框架结构是否正确? 本来目前在做的项目配置如下: CSD(3个模拟模块,3个数字模块)、ADC10(1个数字,2个模拟)、timer8(1个数字)所以time8放在基本配置里,ADC10第二重配置,CSD第三重配置。由于time8要计时,怕动态配置影响到时钟。所以时钟采用的是32K的。 该控制器为了省电,还用到了SLEEPTIME.
PCB板上有个POWER键,上电后程序就处于睡眠状态,按POWER键后开机唤醒睡眠,再按POWER键就关机,又进入睡眠扫描状态。程序框架如下:
void main() { LoadConfig_Base(); //Load BaseConfig M8C_EnableGInt; //Main Interrupt enable Timer8_EnableInt(); //Timer Interrupt enable Timer8_Start(); //Timer Start while(1) { LoadConfig_CapSense_CSD(); //Load CSD Model Config M8C_EnableGInt; CSD_Start(); CSD_ScanAllSensors(); CSD_UpdateAllBaselines(); { .... } //中间为判断并设置按键标志位 CSD_Stop(); if(sleep_mode_bit==1) //睡眠标志位,关机中,1S扫一次,计算按键的时间1s*3(a)
{key_active();} else { if(time_flag_20ms==1) //开机中,20ms扫一次,计算按键的时间20ms*150(a) { time_flag_20ms=0; key_active(); } } UnloadConfig_CapSense_CSD(); //Unload CSD Model Config if(sleep_mode_bit==1) //关机中运行 { Timer8_DisableInt(); //Timer Interrupt disable Timer8_Stop(); //Timer Stop M8C_ClearWDTAndSleep; M8C_EnableIntMask(INT_MSK0, INT_MSK0_SLEEP); M8C_Sleep; //睡眠时间为1S Timer8_EnableInt(); //Timer Interrupt enable Timer8_WritePeriod(14); Timer8_Start(); } else //开机中运行 { LoadConfig_ADC(); //Load ADC Model Config M8C_EnableGInt; ADC10_Start(ADC10_FULLRANGE); //ADC Measure Range {..... } //AD 处理 ADC10_Stop(); UnloadConfig_ADC(); } 关机:睡眠1S--唤醒---扫描(加载CSD,再卸载)——再睡眠1S—— (一直循环) 开机:睡眠中断失效,20ms(timer8)扫描(加载CSD,再卸载)---加载ADC,再卸载--循环 大概的流程就是这样,不知可否?请指点 |