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) ]让寄存器归位呢,这是我猜的,麻烦大家了。