野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15051|回复: 6

底层函数操作寄存器,实现。

[复制链接]
发表于 2014-11-25 15:12:01 | 显示全部楼层 |阅读模式
void ADC_ClearFlag(ADC_TypeDef* ADCx, uint8_t ADC_FLAG)
{
  /* Check the parameters */
  assert_param(IS_ADC_ALL_PERIPH(ADCx));
  assert_param(IS_ADC_CLEAR_FLAG(ADC_FLAG));
  /* Clear the selected ADC flags */
  ADCx->SR = ~(uint32_t)ADC_FLAG;
}
这个清除寄存器的某一位,不会影响其他的位吗?   
我觉得要 ADC->SR &= ~(uint32_t)ADC_FLAG ;
大家有什么想法吗?
回复

使用道具 举报

发表于 2014-11-25 15:20:36 | 显示全部楼层
不影响, &=操作可以保证只影响ADC_FLAG 位
回复 支持 反对

使用道具 举报

发表于 2014-11-25 15:29:32 | 显示全部楼层
这是很常见的位操作,参考这个帖子:http://www.firebbs.cn/forum.php? ... =%CE%BB%B2%D9%D7%F7
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-25 15:46:13 | 显示全部楼层
但是程序里用的是ADCx->SR = ~(uint32_t)ADC_FLAG;
回复 支持 反对

使用道具 举报

发表于 2014-11-25 16:04:36 | 显示全部楼层
小隆sxy 发表于 2014-11-25 15:46
但是程序里用的是ADCx->SR = ~(uint32_t)ADC_FLAG;

你再认真看一下吧,明明有个&
回复 支持 反对

使用道具 举报

发表于 2014-11-25 16:06:00 | 显示全部楼层
小隆sxy 发表于 2014-11-25 15:46
但是程序里用的是ADCx->SR = ~(uint32_t)ADC_FLAG;

是我看错了,我看的是你写的那个句子。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-26 18:50:53 | 显示全部楼层
我弄清楚了,ADC1->SR寄存器组中的寄存器,只能硬件置位,软件清零。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 21:01 , Processed in 0.027963 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表