打印

EXTI的事件问题

[复制链接]
2799|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ninesunsz|  楼主 | 2008-12-22 16:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
exti可以有事件和中断两种方式,现在中断工作模式已经工作正常了我想改成事件模式,然后在主程序中实时查询挂起寄存器。
初始化的代码如下(EXTI部分)其他的部分都和中断工作模式一样,所以未列出。
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Event;
  EXTI_InitStructure.EXTI_Line = EXTI_Line3;
  EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
我现在有两个问题:
1.如果在程序中实时查询PR位能达到GPIO口发生电平变化的时候响应的速度应该比中断快的目的吗?
2.我在程序中查询PR总得不到正确的结果,PR总是不置位,是否还需要其他的初始化代码才能触发事件?
沙发
香水城| | 2008-12-22 18:04 | 只看该作者

设置EXTI的中断与事件的不同只是中断屏蔽寄存器

问题1)估计会节省中断响应的12个时钟周期。如果刻意强调速度,为什么不直接读GPIO口的电平?

问题2)设置EXTI的中断与事件的不同只是中断屏蔽寄存器。

使用特权

评论回复
板凳
ninesunsz|  楼主 | 2008-12-22 21:03 | 只看该作者

没有直接读电平的原因

是因为自己想省事的原因,因为我们的应用是接收一串脉冲,在每一个脉冲的上升沿输出数据,如果读取电平就需要自己做判断,如果能直接用上升沿事件程序上会简单一点。但是脉冲的频率比较快,要求到能够达到500K,原来是用中断处理,后来考虑到时间太短,反正这段时间太短,什么都干不了,干脆用查询算了,脉冲结束之后再处理其他的事情。现在我们用的是101可是感觉速度不是很理想,正在考虑是否要换成103
如果EXTI的中断与事件的不同只是中断屏蔽寄存器设置不同的话,我现在设置就应该是正确的,因为我的中断是能正确触发的,在这个基础上我去掉了中断初始化而用事件初始化,这样应该能直接查询中断挂起位,可是查询结果不正确,怎么能判断出问题是出在哪里呢?
还有一个问题要请教一下香版主,STM32的spi有没有这样的功能:比如我设置了32位数据发送,能否在发送到25位以后,停止发送,使状态回到初始状态,又从第一位开始发送 ?

使用特权

评论回复
地板
香水城| | 2008-12-23 13:44 | 只看该作者

STM32的SPI不支持32位数据字,开始发送后也不能被停止

对于“应用是接收一串脉冲,在每一个脉冲的上升沿输出数据”,可以考虑使用脉冲的上升沿触发DMA请求,由DMA完成输出数据。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

82

帖子

1

粉丝