因为sep4020的唤醒需要用到fiq模式,上网搜索了一下linux暂时不支持fiq,但是仔细查看了entry-armv.S的文件,其实linux不是不支持linux,只是不能支持太复杂的操作(这个说法待考证,可能通过修改部分源代码也能实现,因为我在arch/arm/kernel下发现fiq.c文件,有时间再确认下),但是最基本的入口低级操作还是存在的,只需要改动相应的地方就能实现简单的功能。

比如我想在fiq的中断里面实现:

1.清楚wakeup中断,2启动一个蜂鸣器(不然不知道进了fiq模式了)

代码如下:

vector_fiq:

mov r8, #0xe000000c

orr r8, r8, #0x1000

orr r8, r8, #0x10

mov r9, #0x1

str r9, [ r8 ]

mov r10, #0xe0000008

orr r10, r10,#0x0000f000

mov r11, #0x40

str  r11, [r10]

mov r10, #0xe0000008

orr r10, r10, #0x10

orr r10, r10, #0xf000

mov r11, #0x40

str r11, [ r10 ]

subs pc, lr, #4

首先在系统初始化的时候配置gpio口线的fiq模式,使能fiq模式,(因为我是要进中断处理函数的,不是要求唤醒,关于这两个的区别看最后的注意)

这里有个注意点,linux的arm汇编好像不支持ldr rX, =0xXXX这种伪指令模式,因为如果使用这种方式系统立马会报 Bad mode in data abort handler detected: mode FIQ_32,说明取数据错了,因此我采用了上面这种方式,写的好像冗余,先把功能实现了再说,有时间再做改动。当然还有一个需要就是即使在这里也需要用虚拟地址,因为这里已经打开了mmu。

自己犯的几个弱智的问题,贴在下面,虽然怕各位取笑,但是更希望警示自己不再犯,也算是一个可查的记录:

1.我们一直说arm处理器收到一个中断后会自动调至相应的中断向量表,但是这里的中断是指经过中断控制器过滤的中断信号,也就是说即使硬件产生了中断,但是假设中断使能控制器没有使能,或者屏蔽了中断屏蔽寄存器,这时候还是产生不了cpu能够响应中断的信号,跳不到中断向量表的。

2.但是唤醒低功耗模式的中断(idle模式对应所有的普通中断,sleep模式对应wakeup快速中断)可以不通过中断控制器,即使中断没有使能,或者已经被屏蔽了,但是只要有了中断信号,即产生了一个未处理中断,此时就能够唤醒。

比如对于wakeup信号,由于其本身是内部中断,所以不需要配置gpio模式为中断,只要按下wakeup键立马产生唤醒信号,这wakeup信号通过pmc整形后直接作为intc fiq的一个中断源将系统唤醒。

由于idle模式任何中断都能将idle模式唤醒,倘若想用特定的中断唤醒,此时通过终端控制寄存器配置是不起作用的,只有直接切断相应的中断源才行。

3、

唤醒中断控制器(WIC)

WIC可以使处理器和NVIC处于一个低功耗睡眠的模式。

处理器完全使用WFI、WFE和SEV指令集。另外,处理器也支持Sleep-on-exit,这会导致处理器核心在从一个异常处理返回到线程模式时进入睡眠模式。

http://blog.chinaunix.net/uid-9863638-id-1996316.html

linux工作原理fiq,笔记:linux中实现fiq模式(关于arm中断,唤醒中断)相关推荐

  1. 【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用、低功耗模式无法烧录解决方案)

    [STM32笔记]HAL库低功耗模式配置(ADC唤醒无法使用.低功耗模式无法烧录解决方案) [STM32笔记]低功耗模式配置及避坑汇总 一.低功耗模式简介 系统提供了多个低功耗模式,可在 CPU 不需 ...

  2. DDNS 的工作原理及其在 Linux 上的实现--转

    http://www.ibm.com/developerworks/cn/linux/1305_wanghz_ddns/index.html DDNS (Dynamic DNS) 扩展了 DNS 将客 ...

  3. linux查域名对应的ip 系统调用,DDNS 的工作原理及其在 Linux 上的实现

    DDNS 工作原理的分析 DDNS 的实现最根本的一点是当主机的 IP 地址发生变化的时候,实现 DNS 映射信息的及时更新,应用程序需要及时地获得这一信息,主要的方法可分为两大类: 一类是轮询机制, ...

  4. 【非原创】完全用Linux工作(上)(r4笔记第86天)

    "UNIX 是简单的,你不需要成为天才也能理解这种简单." 由于GNU/Linux这个词太长,下面如果没有特别指明,"Linux"就是指"GNU/Li ...

  5. Linux 高并发学习笔记 - Linux 目录操作函数

    1.6.4 Linux 目录操作函数 Linux 高并发学习笔记 - 笔记索引 文章目录 1.6.4 Linux 目录操作函数 前言 切换工作目录 查看工作目录 创建目录 重命名目录 移除目录 遍历目 ...

  6. linux的原理和运用,Linux操作系统原理与应用_内存寻址

    原标题:Linux操作系统原理与应用_内存寻址 第五讲今天上线啦. 在本次课程中,陈老师详细的讲解了有关于内存寻址的演变的相关知识. 第一部分中,介绍了关于内存寻址的相关背景知识.内存寻址-操作系统设 ...

  7. Linux 高并发学习笔记 - Linux 文件操作函数

    1.6.2 Linux 文件操作函数 Linux 高并发学习笔记 - 笔记索引 前言 关于文件操作函数这一块主要用英文文档的形势书写,因为凉皮在写文档的时候发现Markdown用起来太繁琐了.那么关于 ...

  8. Linux 高并发学习笔记 - Linux 文件属性函数

    1.6.3 Linux 文件属性函数 Linux 高并发学习笔记 - 笔记索引 Linux中一切皆文件,你同样可以用下面这些函数操作目录等特殊文件. 前言 关于文件操作函数这一块主要用英文文档的形势书 ...

  9. 结合 category 工作原理分析 OC2.0 中的 runtime

    绝大多数 iOS 开发者在学习 runtime 时都阅读过 runtime.h 文件中的这段代码: struct objc_class {Class isa OBJC_ISA_AVAILABILITY ...

最新文章

  1. 2022-2028年中国汽车俱乐部行业发展趋势与投资战略研究报告
  2. Oracle嵌套表实例说明
  3. 简析TCP的三次握手与四次分手【转】
  4. mac装windows遇到的问题总结
  5. 根据表名如何查找使用它的程序名、接口等
  6. Eclipse Oxygen 解决 自动导包的问题
  7. mysql 内存占用_mysql占用内存过多
  8. python 关联分析算法的包_Python 极简关联分析(购物篮分析)
  9. html上传图片(进度条变化)、音乐
  10. 跨平台开发实践之Flutter
  11. 超全汇总,常见的芯片封装大全-道合顺大数据infinigo
  12. 单片机MCU OTA升级技术
  13. 【JZOJ1320】拯救奶牛
  14. 奥运五环的含义及其颜色对应码
  15. 使用windows系统给C盘分盘
  16. 绿色便携版谷歌浏览器制作流程
  17. 【每日早报】2019/12/09
  18. Android键盘自定义表情包,关于自定义表情键盘...
  19. 前海征信“好信杯”大数据算法大赛——入门篇笔记
  20. b区计算机211学校排名,b区211大学名单排名

热门文章

  1. VUE 组件重新渲染(组件重载)无缝滚动切换重新从顶部开始播放
  2. 三极管的工作原理详解,图文+案例
  3. Select .....
  4. 学校计算机教室运行情况汇报,电脑教室管理总结
  5. 小红书app滑块解决思路
  6. 读书笔记—《销售铁军》随记5
  7. SPSS正交设计的操作
  8. 双极型晶体管(BJT)学习总结
  9. SSL证书过期(即将过期)处理
  10. 记录十月的金山打字练习