首页 新闻 会员 周边

ADC驱动的小问题(wince)

0
悬赏园豆:30 [待解决问题]

void ADC_InitializeRegister(DWORD cpu_pclk)  
{  
  // 保存 ADC 寄存器原来的设置值  
  m_tmp_ADCCON = v_pADCregs->ADCCON;  
  m_tmp_ADCTSC = v_pADCregs->ADCTSC;  
  m_tmp_ADCDLY = v_pADCregs->ADCDLY;  
  v_pADCregs-> ADCCON=v_pADCregs-> ADCCON&0x4; //yjq add 
  v_pADCregs-> ADCCON = ADCCON_PRSCEN_EN | // 使能 ADC 转换分频  
  ((cpu_pclk / ADC_DEFAULT_FREQ - 1) << 6) | // 设置 ADC 默认转换时钟(A/D转换预分频值)  
  ADCCON_CHANNEL_0<<3 | // 默认 ADC 转换通道  
  ADCCON_NORMAL_MODE | // ADC 标准模式  
  ADCCON_EN_READSTART | // 使能读操作开始转换  
  ADCCON_DIS_START; // 禁止 ADC 进行转换  
   
  v_pADCregs->ADCTSC = v_pADCregs->ADCTSC & ~ADCTSC_NORMAL_MODE; // 普通ADC模式(非触摸屏)  
   
  v_pADCregs->ADCDLY = 10; // 延时时间最小  
}  

DWORD ADC_GetCurFreqency(DWORD cpu_pclk)  
{  
  DWORD adcfrequency;  
   
  /* calculate the clock of IIC transmit speed */  
  adcfrequency = cpu_pclk / (((v_pADCregs-> ADCCON & ADCCON_PRSCVL_MSK) >> 6) + 1);  
  return adcfrequency;  


我标注的那两句话我没有理解, 共同的是都有移动6位 不同的是 一个左移 一个右移,还有加减1,您能给我简单说说嘛,我知道是对 ADCCON 进行控制的。其他的照着手册看明白了,就这里有疑惑。
顺便说下对于第二个问题的自己的理解:

对于这个的理解是:
DWORD ADC_GetCurFreqency(DWORD cpu_pclk)  
{  
  DWORD adcfrequency;  
   
  /* calculate the clock of IIC transmit speed */  
  adcfrequency = cpu_pclk / (((v_pADCregs-> ADCCON & ADCCON_PRSCVL_MSK) >> 6) + 1);  
  return adcfrequency;  
}  

它使得ADCCON【13:6】位成为255(1111 1111),但是为什么要右移6位呢?是不是ADCCON_PRSCVL_MSK这个定义的是[#define ADCCON_PRSCVL_MSK (0xFF << 6) ]让寄存器归位呢,这是我猜的,麻烦大家了。

飞扬的心的主页 飞扬的心 | 初学一级 | 园豆:170
提问于:2010-12-27 18:18
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册