- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在 ARM 处理器上运行嵌入式 linux 3.2.6。我正在使用修改版的 atmel 串行驱动程序来控制我设备上的 4 个 USART 端口。当我使用内核编译的驱动程序时,一切正常。但我想改为将驱动程序作为内核模块运行。我进行了所有必要的更改并禁用了内部驱动程序,一切似乎都很好。 4 个 tty 设备已成功注册,我可以看到我的所有探测和初始化函数都正常工作。
问题来了:当我尝试写入任何设备时,我的“开始传输”功能被调用,但随后等待来自 usart 的中断从未发生。所以写入只是挂起,并且使用逻辑分析器我可以看到 RTS 被断言但没有字节显示在 tx 线上。我知道我对 request_irq 的调用成功了,但我从未在/proc/interrupts 中看到任何 irq 条目。在驱动程序中,我也尝试过使用 request_irq 为 gpio 线路注册一个单独的中断处理程序,这工作正常。
我知道这是一个可能难以诊断的问题,但我正在寻找任何可能的建议,这些建议可以引导我朝着正确的方向找到解决方案。如果您需要任何说明,请告诉我。谢谢
最佳答案
症状看起来像一个尚未启用(或关闭)的外设时钟:设备可以初始化而没有错误,并且可以设置 I/O 操作,但是设备什么都不做;它装死了。由于从来没有 I/O 开始,因此您永远不会得到指示完成的中断!
要检查的另一件事是 arch/arm/mach-xxx/zzz_devices.c
文件中硬件配置结构的条件编译指令。
确保串行端口结构具有如下内容:
#if defined(CONFIG_SERIAL_ATMEL) || defined(CONFIG_SERIAL_ATMEL_MODULE)
不仅仅是
#if defined(CONFIG_SERIAL_ATMEL)
I could be wrong but the clock shouldn't have any effect on the CTS pin causing an interrupt, right?
不对。
这些数字电路是同步状态机:没有时钟,无法处理输入的状态变化。
此外,SoC 和现代 uController 使用外设时钟作为这些集成外设的开/关开关。硅芯片上的功能(即外围设备)通常比实际使用的要多得多,这主要是由于电路板上的引脚数量不足。因此,通过禁用未使用设备的时钟来降低功耗。
你太专注于中断了。
您没有可解决的中断问题;那些是次要故障。
尝试传输时缺少输出更为重要和具有启发性。
根本原因可能是 USART 设备的配置有缺陷,因为传输位是配置和运行的 USART 的自动操作。
如果不工作与工作之间的区别是可加载模块与静态链接,那么根本原因将是一些基本的(而且微不足道的)事情,就像我的两个建议一样。
此外,您对 #if defined()
缺乏确认,例如你没有回应“哦,是的,我们已经知道了”,举起一面巨大的红旗,上面写着“先修复我!”
在发现无法使用 make menuconfig
(这是一半答案的前提)将 Atmel 串行驱动程序配置/构建为可加载模块后,我很想删除此答案。 (当然,Kconfig
文件可以被黑客攻击,使配置变量tristate 而不是boolean 来克服模块限制。)我已经对 OP 发表了评论。但我也想保留对 Stratton 先生的评论,指出如何(不)使用 .config
文件中的符号。
关于linux - request_irq 成功但从未检测到中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13650564/
背景 我最近在 merge 期间遇到了一个意外未 merge 的文档文件的问题。 无论出于何种原因,我搞砸了 merge 并有效地删除了文件(和其他几个文件),因为我忘记了它们的存在。 现在我想查看我
我在我的网站上使用旧的 mysql 版本和 php 版本 4。 我的表结构: | orders_status_history_id | orders_id | orders_status_id |
我是一名优秀的程序员,十分优秀!