OpenEdv-开源电子网

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

imx6ul 裸机 中断实验允许中断在何处

[复制链接]

2

主题

4

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2022-9-5
在线时间
3 小时
发表于 2022-9-19 11:17:34 | 显示全部楼层 |阅读模式
  1. IRQ_Handler:
  2.         push {lr}                                        /* 保存lr地址 */
  3.         push {r0-r3, r12}                        /* 保存r0-r3,r12寄存器 */

  4.         mrs r0, spsr                                /* 读取spsr寄存器 */
  5.         push {r0}                                        /* 保存spsr寄存器 */

  6.         mrc p15, 4, r1, c15, c0, 0 /* 从CP15的C0寄存器内的值到R1寄存器中
  7.                                                                 * 参考文档ARM Cortex-A(armV7)编程手册V4.0.pdf P49
  8.                                                                 * Cortex-A7 Technical ReferenceManua.pdf P68 P138
  9.                                                                 */                                                       
  10.         add r1, r1, #0X2000                        /* GIC基地址加0X2000,也就是GIC的CPU接口端基地址 */
  11.         ldr r0, [r1, #0XC]                        /* GIC的CPU接口端基地址加0X0C就是GICC_IAR寄存器,
  12.                                                                  * GICC_IAR寄存器保存这当前发生中断的中断号,我们要根据
  13.                                                                  * 这个中断号来绝对调用哪个中断服务函数
  14.                                                                  */
  15.         push {r0, r1}                                /* 保存r0,r1 */
  16.        
  17.         cps #0x13                                        /* 进入SVC模式,允许其他中断再次进去 */
  18.        
  19.         push {lr}                                        /* 保存SVC模式的lr寄存器 */
  20.         ldr r2, =system_irqhandler        /* 加载C语言中断处理函数到r2寄存器中*/
  21.         blx r2                                                /* 运行C语言中断处理函数,带有一个参数,保存在R0寄存器中 */

  22.         pop {lr}                                        /* 执行完C语言中断服务函数,lr出栈 */
  23.         cps #0x12                                        /* 进入IRQ模式 */
  24.         pop {r0, r1}                               
  25.         str r0, [r1, #0X10]                        /* 中断执行完成,写EOIR */

  26.         pop {r0}                                               
  27.         msr spsr_cxsf, r0                        /* 恢复spsr */

  28.         pop {r0-r3, r12}                        /* r0-r3,r12出栈 */
  29.         pop {lr}                                        /* lr出栈 */
  30.         subs pc, lr, #4                                /* 将lr-4赋给pc */
复制代码


在裸机中断实验中,请问下老师 为什么说这句话注释是 “允许其他中断再次进去" , 这只是修改处理器模式,并没有修改I/F标志,我个人理解是最后一句话  subs pc, lr, #4        /* 将lr-4赋给pc */ 才是重新使能中断的,请老师分析下,谢谢
  cps #0x13        /* 进入SVC模式,允许其他中断再次进去 */
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
15
金钱
15
注册时间
2022-9-5
在线时间
3 小时
 楼主| 发表于 2022-9-19 11:18:26 | 显示全部楼层
cps #0x13        /* 进入SVC模式,允许其他中断再次进去 */ 其实就是想问下这里的注释是否标注的不对?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 08:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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