|
昨晚瞧了瞧C809的AD
配置也比较简单
主要是:
•外围允许寄存器0 (PER0)
•A/D转换器的模式寄存器0 (ADM0)
•A/D转换器的模式寄存器2 (ADM2)
•A/D转换结果高位保存寄存器 (ADCRH)
•A/D转换结果低位保存寄存器 (ADCRL)
•模拟输入通道指定寄存器(ADS)
然后是端口模式的2个寄存器:
•端口模式寄存器0、 1 (PM0、 PM1)
•端口模式控制寄存器0、 1 (PMC0、 PMC1)
配置好后,就能够采集AD值
关于AD的参考电压,数据手册上
说明可以达到电源电压,如果5V供电的话,最大也能测量到5V的输入电压
上代码
- void R_ADC_Create(void)//AD初始化
- {
- ADCEN = 1U; /* supply AD clock */
- ADM0 = 0x00U; /* disable AD conversion and clear ADM0 register */
- ADMK = 1U; /* disable INTAD interrupt */
- ADIF = 0U; /* clear INTAD interrupt flag */
- /* Set INTAD low priority */
- ADPR1 = 1U;
- ADPR0 = 1U;
- ADM0 = 0x02U; /* fCLK/8 */
- ADM2 = 0x00U; /* 10 bits */
- }
- void R_ADC1_Start(void)//AIN1启动
- {
- ADS = 0x01U; /* ANI1 */
- ADIF = 0U; /* clear INTAD interrupt flag */
- ADMK = 0U; /* enable INTAD interrupt */
- ADCS = 1U; /* enable AD conversion */
- }
- void R_ADC0_Start(void)//AIN2启动
- {
- ADS = 0x00U; /* ANI0 */
- ADIF = 0U; /* clear INTAD interrupt flag */
- ADMK = 0U; /* enable INTAD interrupt */
- ADCS = 1U; /* enable AD conversion */
- }
- ......
复制代码 手册上推荐启动AD通道后,使mcu进入halt模式,以获取比较精确的AD值
所有通道的采集缓存均共用 转换结果寄存器(ADCRH、ADCRL)
这里采集AIN0和AIN1两路
值得注意的是,AIN0和串口TX管脚是复用的哟
- R_ADC0_Start(); /* Start AD converter */
- HALT();
- ADIF = 0U; /* Clear INTAD request */
- R_ADC_Get_Result( &result_buffer0 ); /* Get AIN0 result */
- R_ADC1_Start(); /* Start AD converter */
- HALT(); /* wait for UART Rx interrupt */
- ADIF = 0U; /* Clear INTAD request */
- R_ADC_Get_Result( &result_buffer1 ); /* Get AIN1 result */
复制代码 其中
- void R_ADC_Get_Result(uint16_t *buffer)
- {
- *buffer = ((uint16_t)ADCRH << 8 | ADCRL) >> 6;
- }
复制代码 嗯,到这里
基本上想使用的外设都驱动起来了
准备想想硬件方案吧
|
|