OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2193|回复: 7

判断是否发生中断的函数

[复制链接]

22

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2018-7-16
在线时间
58 小时
发表于 2018-10-8 10:57:34 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 wgb123 于 2018-10-8 11:22 编辑

/**  * @brief  Checks whether the TIM interrupt has occurred or not.                    //判断是否发生定时器中断
  * @param  TIMx: where x can be 1 to 17 to select the TIM peripheral.          //选择外设TIMx
  * @param  TIM_IT: specifies the TIM interrupt source to check.                   //中断源 下面八种之一   
  *   This parameter can be one of the following values:
  *     @arg TIM_IT_Update: TIM update Interrupt source
  *     @arg TIM_IT_CC1: TIM Capture Compare 1 Interrupt source
  *     @arg TIM_IT_CC2: TIM Capture Compare 2 Interrupt source
  *     @arg TIM_IT_CC3: TIM Capture Compare 3 Interrupt source
  *     @arg TIM_IT_CC4: TIM Capture Compare 4 Interrupt source
  *     @arg TIM_IT_COM: TIM Commutation Interrupt source
  *     @arg TIM_IT_Trigger: TIM Trigger Interrupt source
  *     @arg TIM_IT_Break: TIM Break Interrupt source
  * @note
  *   - TIM6 and TIM7 can generate only an update interrupt.
  *   - TIM9, TIM12 and TIM15 can have only TIM_IT_Update, TIM_IT_CC1,
  *      TIM_IT_CC2 or TIM_IT_Trigger.
  *   - TIM10, TIM11, TIM13, TIM14, TIM16 and TIM17 can have TIM_IT_Update or TIM_IT_CC1.   
  *   - TIM_IT_Break is used only with TIM1, TIM8 and TIM15.
  *   - TIM_IT_COM is used only with TIM1, TIM8, TIM15, TIM16 and TIM17.  
  * @retval The new state of the TIM_IT(SET or RESET).      //返回值
  */
ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT)
{
  ITStatus bitstatus = RESET;  
  uint16_t itstatus = 0x0, itenable = 0x0;
  /* Check the parameters */
  assert_param(IS_TIM_ALL_PERIPH(TIMx));
  assert_param(IS_TIM_GET_IT(TIM_IT));
TIM_IT = TIM_IT_CC1=0x0002
  itstatus = TIMx->SR & TIM_IT;    //  CC1IF  当捕获事件发生时该位由硬件置,这里怎么由软件置一?(输入捕获实验)
  itenable = TIMx->DIER & TIM_IT;    //使能 CC1IE

  if ((itstatus != (uint16_t)RESET) && (itenable != (uint16_t)RESET))   //由上面两个语句这个条件不是一直成立么?
  {
    bitstatus = SET;
  }
  else
  {
    bitstatus = RESET;
  }
  return bitstatus;
}




最佳答案

查看完整内容[请看2#楼]

后面不是已经判断过了啊,之后还要它干啥呢。就判断他们是否SET的时候,要用到的bitstatus已经返回了啊,itstatus和itenable只是用来判断决定bitstatus的值的么不是
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-10-8 10:57:35 | 显示全部楼层
后面不是已经判断过了啊,之后还要它干啥呢。就判断他们是否SET的时候,要用到的bitstatus已经返回了啊,itstatus和itenable只是用来判断决定bitstatus的值的么不是
回复

使用道具 举报

22

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2018-7-16
在线时间
58 小时
 楼主| 发表于 2018-10-8 11:23:19 | 显示全部楼层
323232 发表于 2018-10-8 11:01
后面不是已经判断过了啊,之后还要它干啥呢。就判断他们是否SET的时候,要用到的bitstatus已经返回了啊,it ...

我重新编辑了一下,麻烦您看下。
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-10-8 11:25:17 | 显示全部楼层
兄弟..并没有软件置1...     好好查查按位与是个什么东西
猪猪熊呢?
回复

使用道具 举报

22

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2018-7-16
在线时间
58 小时
 楼主| 发表于 2018-10-8 11:27:58 | 显示全部楼层
323232 发表于 2018-10-8 11:25
兄弟..并没有软件置1...     好好查查按位与是个什么东西

中文手册里说如果配置成输入模式,该位有硬件置一
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-10-8 11:29:40 | 显示全部楼层
wgb123 发表于 2018-10-8 11:27
中文手册里说如果配置成输入模式,该位有硬件置一

那是硬件的问题啊.....你看软件做什么。这里按位与只是为了把数据提取出来
猪猪熊呢?
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2018-10-8 11:31:17 | 显示全部楼层
你总不能直接把这个SR寄存器里的值拿来用吧?万一里面是FFFF呢?对不对,你不按位与一下,那就是FFFF了啊,FFFF又不等于SET,更不等于RESET
猪猪熊呢?
回复

使用道具 举报

22

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
378
金钱
378
注册时间
2018-7-16
在线时间
58 小时
 楼主| 发表于 2018-10-8 11:34:06 | 显示全部楼层
323232 发表于 2018-10-8 11:29
那是硬件的问题啊.....你看软件做什么。这里按位与只是为了把数据提取出来

懂了,谢谢大神
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 14:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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