OpenEdv-开源电子网

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

stm32外部中断丢失

[复制链接]

3

主题

123

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
364
金钱
364
注册时间
2012-4-30
在线时间
11 小时
发表于 2015-7-12 15:09:02 | 显示全部楼层 |阅读模式
5金钱

采用GPIO外部中断,大概70us就会中断一次,在主循环中有对中断函数中的变量进行判断,所以加了临界区保护,即加开关外部中断操作,
开始通过外部中断寄存器开关实现,即如下宏中的#esle,但发现会有一定几率丢失中断,而换成通过NVIC实现,即如下代码中的#if 1则正常。
可是再仔细查看各种资料,通过外部中断寄存器的方式应该也不会丢才对, 想不明白。

void  EXTI2_IRQ_enable(void)
{
 #if 1
 NVIC_InitTypeDef nvic_init;
 
 nvic_init.NVIC_IRQChannel = EXTI2_IRQn; 
 nvic_init.NVIC_IRQChannelPreemptionPriority = 0;
 nvic_init.NVIC_IRQChannelSubPriority = 0;
 nvic_init.NVIC_IRQChannelCmd = ENABLE;
 NVIC_Init(&nvic_init);
 #else//这种方法会丢中断;
 EXTI->IMR |= EXTI_Line2;
 #endif
}

void  EXTI2_IRQ_disable(void)
{
 #if 1
 NVIC_InitTypeDef nvic_init;
 
 nvic_init.NVIC_IRQChannel = EXTI2_IRQn; 
 nvic_init.NVIC_IRQChannelPreemptionPriority = 0;
 nvic_init.NVIC_IRQChannelSubPriority = 0;
 nvic_init.NVIC_IRQChannelCmd = DISABLE;
 NVIC_Init(&nvic_init);
 #else//这种方法会丢中断;
 EXTI->IMR &= ~EXTI_Line2;

 #endif
}

真的勇士,敢于直面惨淡的warning,敢于正视淋漓的error.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-7-12 23:18:29 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

123

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
364
金钱
364
注册时间
2012-4-30
在线时间
11 小时
 楼主| 发表于 2015-7-13 10:26:00 | 显示全部楼层
中断处理:
回复【2楼】正点原子:
---------------------------------
 中断处理:
void EXTI2_IRQHandler(void)
{
u8 i;
u8 ucTemp[8]; 
#if 0
EXTI_ClearITPendingBit(EXTI_Line2);
#else
EXTI->R = EXTI_Line2;
#endif

...(SPI读取8个数据到缓存)
}

主循环中读取缓存数据,并且读取前后分别加了关、开外部中断
真的勇士,敢于直面惨淡的warning,敢于正视淋漓的error.
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-7-13 23:24:28 | 显示全部楼层
回复【3楼】Lkingz:
---------------------------------
大大精简。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

123

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
364
金钱
364
注册时间
2012-4-30
在线时间
11 小时
 楼主| 发表于 2015-7-14 09:46:52 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
...无关的怕影响你们时间,如下是中断函数
u16 spi_read_data(void)
{  
  /* Wait until the transmit buffer is empty */
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
  
  /* Send the byte */
  SPI_I2S_SendData(SPI1, 0xFFFF);

  /* Wait until a data is received */
  while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
  
  /* Get the received data */
  return SPI_I2S_ReceiveData(SPI1);
}

void EXTI2_IRQHandler(void)
{
u8 i;
u8 ucTemp[8]; 

EXTI->R = EXTI_Line2;

for(i = 0; i < 4; i++)
{
*((u16 *)(&ucTemp[i*2])) = spi_read_data();
}      

...(将ucTemp值保存到环形缓存中)


}

主循环中,在读环形缓存前后做外部中断关、开
真的勇士,敢于直面惨淡的warning,敢于正视淋漓的error.
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-7-14 22:46:53 | 显示全部楼层
回复【5楼】Lkingz:
---------------------------------
你这还是在中断里面读SPI。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

123

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
364
金钱
364
注册时间
2012-4-30
在线时间
11 小时
 楼主| 发表于 2015-7-15 14:58:37 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
是的,因为70us就会来一次中断,主循环里读的话怕来不及,
目前测量波形,中断里读SPI的时间到下一次中断还有空闲的时间
真的勇士,敢于直面惨淡的warning,敢于正视淋漓的error.
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-7-16 00:08:50 | 显示全部楼层
回复【7楼】Lkingz:
---------------------------------
所以丢数据正常。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-7-16
在线时间
0 小时
发表于 2015-7-17 18:28:35 | 显示全部楼层
个人理解,EXTI_Line2 --> 0x00000004
|= 无条件加0x00000004
&=~ 无条件屏蔽第3位 ?
回复

使用道具 举报

3

主题

123

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
364
金钱
364
注册时间
2012-4-30
在线时间
11 小时
 楼主| 发表于 2015-7-22 17:42:51 | 显示全部楼层
回复【9楼】zerofzt:
---------------------------------
是的,
有什么问题吗
真的勇士,敢于直面惨淡的warning,敢于正视淋漓的error.
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 00:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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