大家好,我发现GPIO中断与EXTINT3共享最高
优先级大约为60usec。延迟,而不是EXTINT3引脚。
可以修复此功能吗?有什么方法吗?
我正在尝试连接条形码阅读器,并且总是丢失第一个
clock.
我在eclipse IDE中使用gcc gnu arm。
提前致谢
克里斯
LPC2387 GPIO中断延迟
开始于 ●2014年12月17日
回覆者 ●2014年12月17日2014-12-17
我不知道您如何定义中断程序或您是哪个编译器
使用,但GCC会生成大量的前导代码来保存和恢复一堆
of registers.
因此,如果您使用的是GCC,请考虑让函数原型包含 属性为“裸”。这消除了任何进入和退出代码。现在你是 负责保存和恢复使用的所有寄存器。这使得 判断中断代码是否用汇编语言编写。试图out测 C编译器在寄存器使用上几乎注定会失败。
RTOS实施中使用的GCC属性 http://www.freertos.org/implementation/a00013.html
RTOS实施中使用的GCC属性 http://www.freertos.org/implementation/a00013.html 使用GCC属性 防止编译器将代码插入RTOS中断程序。
在www.freertos.org上查看 http://www.freertos.org/implementation/a00013.html
雅虎预览
流水线处理器不一定具有最低的延迟。它 取决于设计者如何决定处理队列。他们可能会中止一切 正在进行的指令(不太可能),或者只是将分支指令塞入 队列的开头,而不是下一个顺序指令。我没有 任何想法如何在ARM处理器上完成。不过,60美元似乎很长 time.
在LPC2148中,有两种到达引脚的方法:标准GPIO和 快速IO。内部引脚的连接方式对 引脚可切换的速率。我不知道这是否适用于 中断系统,但可能会。
LPC2378具有类似的结构。查看用户中是否有东西 Manual re: Fast IO.
理查德
因此,如果您使用的是GCC,请考虑让函数原型包含 属性为“裸”。这消除了任何进入和退出代码。现在你是 负责保存和恢复使用的所有寄存器。这使得 判断中断代码是否用汇编语言编写。试图out测 C编译器在寄存器使用上几乎注定会失败。
RTOS实施中使用的GCC属性 http://www.freertos.org/implementation/a00013.html
RTOS实施中使用的GCC属性 http://www.freertos.org/implementation/a00013.html 使用GCC属性 防止编译器将代码插入RTOS中断程序。
在www.freertos.org上查看 http://www.freertos.org/implementation/a00013.html
雅虎预览
流水线处理器不一定具有最低的延迟。它 取决于设计者如何决定处理队列。他们可能会中止一切 正在进行的指令(不太可能),或者只是将分支指令塞入 队列的开头,而不是下一个顺序指令。我没有 任何想法如何在ARM处理器上完成。不过,60美元似乎很长 time.
在LPC2148中,有两种到达引脚的方法:标准GPIO和 快速IO。内部引脚的连接方式对 引脚可切换的速率。我不知道这是否适用于 中断系统,但可能会。
LPC2378具有类似的结构。查看用户中是否有东西 Manual re: Fast IO.
理查德
回覆者 ●2014年12月30日2014-12-30
嗨,理查德,
感谢您的答复。
所有IO引脚均配置为FIO。在我的程序集启动文件中,我做了一些 我以前的项目中发生了变化(没有时间紧迫的中断),所有这些似乎 to be OK.
我尝试使用ISR_ENTRY()设置“裸”属性&ISR_EXIT()defs但相同 results.
这是我的项目的一些文件的链接:
//www.sendspace.com/file/7wux9h //www.sendspace.com/file/7wux9h
在ISR_EINT3的s_irq.c gile中,您会看到发生gpio中断时,我 禁用Interrpt,然后更改另一个GPIO的状态。 从条形码发出的第一个时钟开始,此更改大约需要60us 读者。看一下(GPIRQ_DisableInterrupt(KW_CLK_PRT,KW_CLK_PIN);
ClrPin(DO1_PRT,DO1_PIN);)
如果有人可以帮助我,我将非常感激。
提前致谢
克里斯
感谢您的答复。
所有IO引脚均配置为FIO。在我的程序集启动文件中,我做了一些 我以前的项目中发生了变化(没有时间紧迫的中断),所有这些似乎 to be OK.
我尝试使用ISR_ENTRY()设置“裸”属性&ISR_EXIT()defs但相同 results.
这是我的项目的一些文件的链接:
//www.sendspace.com/file/7wux9h //www.sendspace.com/file/7wux9h
在ISR_EINT3的s_irq.c gile中,您会看到发生gpio中断时,我 禁用Interrpt,然后更改另一个GPIO的状态。 从条形码发出的第一个时钟开始,此更改大约需要60us 读者。看一下(GPIRQ_DisableInterrupt(KW_CLK_PRT,KW_CLK_PIN);
ClrPin(DO1_PRT,DO1_PIN);)
如果有人可以帮助我,我将非常感激。
提前致谢
克里斯
回覆者 ●2014年12月30日2014-12-30
如果您编写最短的代码来确认
中断并切换图钉?摆脱所有其他代码,尤其是其他
中断代码。新项目可能少于100行代码
INCLUDING crt.s
您有很多其他中断正在进行的中断处理,而我 并没有看它们是否可以重叠或它们是否更高 priority.
理查德
您有很多其他中断正在进行的中断处理,而我 并没有看它们是否可以重叠或它们是否更高 priority.
理查德
回覆者 ●2014年12月30日2014-12-30
另外,如果您没有将FIQ用于短延迟中断,则应该这样做。
参见第7.5节:
http://www.nxp.com/documents/data_sheet/LPC2387.pdf http://www.nxp.com/documents/data_sheet/LPC2387.pdf
理查德
http://www.nxp.com/documents/data_sheet/LPC2387.pdf http://www.nxp.com/documents/data_sheet/LPC2387.pdf
理查德
回覆者 ●2014年12月31日2014-12-31
理查德,早上好
如果您编写最短的代码来确认会发生什么 中断并切换引脚?我想我错过了你的意思。 3个或4个GPIO加EXTINT(最高优先级ISR)引脚共享相同的ISR。 当我意识到自己有 long latency
摆脱所有其他代码,尤其是其他中断代码。
每种情况都是另一个引脚(中断)源。如果我误会了就让你 code suggestion.
感谢您的时间!
问候克里斯
如果您编写最短的代码来确认会发生什么 中断并切换引脚?我想我错过了你的意思。 3个或4个GPIO加EXTINT(最高优先级ISR)引脚共享相同的ISR。 当我意识到自己有 long latency
摆脱所有其他代码,尤其是其他中断代码。
每种情况都是另一个引脚(中断)源。如果我误会了就让你 code suggestion.
感谢您的时间!
问候克里斯
回覆者 ●2014年12月31日2014-12-31
我以某种方式认为您只有一个时间要求严格的输入。我意识到那里
在您的项目中有很多中断。
当我尝试排除故障时,我将代码剥离到最小 演示问题所需的行。一针一中断,一无所有 其他。这样,我知道硬件在最佳情况下会做什么。
顺便说一句,即使在使用快速IO的情况下,ARM也无法很好地实现引脚的切换。尝试 编写一个循环,看看使引脚改变状态的速度有多快。你可能会 感到惊讶的是它不会以MHz速率切换。
过去对于GPIO来说如此严峻,以至于他们不得不发明FIO设置。
理查德
当我尝试排除故障时,我将代码剥离到最小 演示问题所需的行。一针一中断,一无所有 其他。这样,我知道硬件在最佳情况下会做什么。
顺便说一句,即使在使用快速IO的情况下,ARM也无法很好地实现引脚的切换。尝试 编写一个循环,看看使引脚改变状态的速度有多快。你可能会 感到惊讶的是它不会以MHz速率切换。
过去对于GPIO来说如此严峻,以至于他们不得不发明FIO设置。
理查德
回覆者 ●2014年12月31日2014-12-31
60 us必须是IO的某种问题。任何合理的中断开销
就像推送寄存器不会花费那么长的时间(假设CCLK是合理的,而您
正在使用内部存储器,并且您不会被某些事物打扰
else)
我曾经遇到过外设时钟速率有所不同的情况。看着 外设中断期间访问的所有外设的时钟速率。和 将外设寄存器的访问权限保持在最低水平。
我曾经遇到过外设时钟速率有所不同的情况。看着 外设中断期间访问的所有外设的时钟速率。和 将外设寄存器的访问权限保持在最低水平。
回覆者 ●2015年1月2日2015-01-02