- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ZigBee学习之23—zmain_vdd_check()
#1楼主:【原创】ZigBee学习之23—— zmain_vdd_check()
文章发表于:2010-02-08 16:36
zmain_vdd_check();//确认VDD是否达到运行处理器的要求,如果没有达到就会闪烁LED
//【ZMain.c】line210左右
//重复检测VDD的状态,直到成功检测的次数达到规定过的要求为止。估计是等电源稳定吧,呵呵
static ZSEG void zmain_vdd_check( void )
{
uint8 vdd_passed_count = 0;
bool toggle = 0;
while ( vdd_passed_count MAX_VDD_SAMPLES )
//#define MAX_VDD_SAMPLES 3; 【ZMain.c】
//循环检测3次
{
if ( HalADCCheckVdd (ZMAIN_VDD_LIMIT) )
//【ZMain.c】
// #define ZMAIN_VDD_LIMIT HAL_ADC_VDD_LIMIT_4
//【hal_adc.h】
// #define HAL_ADC_VDD_LIMIT_4 0x04
{
vdd_passed_count++; // Keep track # times Vdd passes in a row
MicroWait (10000); // 延时10毫秒
//微秒级延时函数【OnBoard.h】
//#define MicroWait(t) Onboard_wait(t)
//void Onboard_wait( uint16 timeout )
{
while (timeout--)
{
asm(NOP);
asm(NOP);
asm(NOP);
}
}
}
else
{
vdd_passed_count = 0; // Reset passed counter
MicroWait (50000); // Wait 50ms
MicroWait (50000); // Wait another 50ms to try again
}
// HalAdcCheckVdd ()【hal_adc.c】函数用来检查VDD是否大于或等于最小的要求
bool HalAdcCheckVdd (uint8 limit)
{
uint16 value;
//如果芯片修订版本号小于REV_D(0x03)就直接完成电压检测并返回TRUE。CHVER是修订版本号寄存器,此寄存器是只读的。
if (CHVER REV_D)
//检查芯片版本【hal_mcu.h】
//#define REV_A 0x00
//#define REV_D 0x03
{
return TRUE;
}
//清除ADC中断标志
ADCIF = 0;
//设置新的转换状态
//【hal_adc.c】
//使用内部1.25参考电压
// #define HAL_ADC_REF_125V 0x00
// #define HAL_ADC_DEC_064 0x00 /* Decimate by 64 : 8-bit resolution */8位精度
// #define HAL_ADC_CHN_VDD3 0x0f /* VDD/3 */以AVDD_SOC/3为输入,检测电压
ADCCON3 = (HAL_ADC_REF_125V | HAL_ADC_DEC_064 | HAL_ADC_CHN_VDD3);
//等待转换完成
while ( !ADCIF );
//取得转换值
value = ADCL;
value |= ((uint16) ADCH) 8;
//检测
return ( value = H
文档评论(0)