linux powerpc e500内核外部中断,PIC,PPC,设备驱动

【3分钟秒懂】示例讲解MCU中断流程 基于NXP MPC574xG 目录 1. 简述 2. 中断配置流程 3. 中断发生时的代码调用流程 1. 简述 MPC574xG的中断向量寄存器(IVPR)提供了下面12个个中断类型, 本文主要介绍IVOR4 ,因为所有的时钟,外设输入输出等产生的中断都是通过IVOR4 处理的。 IVOR0: Critical Input Interrupt (offset 0x00) IVOR1: Machin... 阅读详情

http://blog.chinaunix.net/u2/71164/showart_2038214.html

 

powerpc e500内核中断系统有两部分组成一个是e500 的内核,一个是中断异常控制器programmable interrupt controller (PIC) interrupt protocol

e500内核有些特殊之处是:在e500内核进入中断和异常处理程序时不能关闭mmu 也就是说e500内核所看到的是虚拟地址。E500内核的解决办法是利用IVPR  和 IVOR寄存器来共同决定中断程序的入口地址,IVPR保存中断入口程序的0~15位 IVOR保存16~27位 28~31位为0;(每一个IVOR对应一种中断, 如:IVOR4 对应着外部中断)。此外PIC控制器还有Interrupt Source Configuration Registers 用来区分是具体的中断如外部中断一有EIVPR1 和 EIDR1共同决定

0---------------------------------------------------------------------------------à31

MSK           A      RSV1    P      S             PRIORITY    VECTIOR

0               1        2~7    8      9               12~`15       16~`31

其中vector 位为硬件中断号(不同于datasheet种的中断号)。其他个相关位见datasheet

当e500 int信号有效是期铜外部中断处理,外部中断处理根据具体的硬件中断号执行具体本中断的处理程序。俺也不知道处于啥原因linux又弄了个软中断号这样你在申请中断(request_irq是应该使用的是软中断号)。为此系统必须建立软中断号与硬中断号之间的联系。建立联系之后你就可以通过硬件中断号向系统要软件中断号了然后request_irq了。参见irq_of_parse_and_map函数或者干脆就直接调用irq_create_mapping(不知道会不会有问题)!

与之相关的中断调用如下(arch/powerpc/kernel/head_fsl_booke.S)

      

#define SET_IVOR(vector_number, vector_label)              /

              li      r26,vector_label@l;              /

              mtspr      SPRN_IVOR##vector_number,r26;      /

              sync

 

SET_IVOR(0,  CriticalInput);

       SET_IVOR(1,  MachineCheck);

       SET_IVOR(2,  DataStorage);

       SET_IVOR(3,  InstructionStorage);

       SET_IVOR(4,  ExternalInput);

       SET_IVOR(5,  Alignment);

       SET_IVOR(6,  Program);

       SET_IVOR(7,  FloatingPointUnavailable);

       SET_IVOR(8,  SystemCall);

       SET_IVOR(9,  AuxillaryProcessorUnavailable);

       SET_IVOR(10, Decrementer);

       SET_IVOR(11, FixedIntervalTimer);

       SET_IVOR(12, WatchdogTimer);

       SET_IVOR(13, DataTLBError);

       SET_IVOR(14, InstructionTLBError);

       SET_IVOR(15, DebugCrit);

以外部中断处理为例:SET_IVOR(4,  ExternalInput);

当外部中断发生时根据 IVOR4 和 IVPR中的地址会导致调用ExternalInput

(arch/powerpc/kernel/head_fs_booke.S)-à

/* External Input Interrupt */

       EXCEPTION(0x0500, ExternalInput, do_IRQ, EXC_XFER_LITE)

 

#define EXCEPTION(n, label, hdlr, xfer)                          /

       START_EXCEPTION(label);                             /

       NORMAL_EXCEPTION_PROLOG;                         /

       addi r3,r1,STACK_FRAME_OVERHEAD;                 /

       xfer(n, hdlr)

 

#define EXC_XFER_LITE(n, hdlr)              /

       EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, NOCOPY, transfer_to_handler, /

                       ret_from_except)

 

#define EXC_XFER_TEMPLATE(hdlr, trap, msr, copyee, tfer, ret)    /

       li      r10,trap;                              /

       stw  r10,_TRAP(r11);                                /

       lis    r10,msr@h;                                /

       ori   r10,r10,msr@l;                                  /

       copyee(r10, r9);                                 /

       bl     tfer;                                  /

       .long       hdlr;                                    /

       .long       ret

 

 

首先,trap 加载到寄存器 r10 中。在接下来的一行中,那个值存储在由 TRAP(r11) 给出的地址中。TRAP(r11) 以及接下来两行去做一些硬件相关的位操作。然后,我们调用 tfer 函数(transfer_to_handler 函数),它会处理更多内部事务并将控制转交给 hdlr(do_IRQ)。注意, transfer_to_handler 通过链接寄存器加载处理程序的地址,因此您看到的是.long do_IRQ,而不是 bl do_IRQ。

这个宏完成一些必要的设置后导致do_IRQ的调用!

 (transfer_to_handler 参见arch/powerpc/kernel/entry_32.S )

void do_IRQ(struct pt_regs *regs)

{

       struct pt_regs *old_regs = set_irq_regs(regs);

       unsigned int irq;

 

       irq_enter();

 

       check_stack_overflow();

 

       irq = ppc_md.get_irq();/*这个东西返回传说中的软件中断号,可见申请中断要用   软件中断号而你在寄存器EIPVRn里读出来的是硬件中断号,呵呵,终于给irq_create_mapping   找个说法了*/

 

       if (irq != NO_IRQ && irq != NO_IRQ_IGNORE)

              handle_one_irq(irq);

       else if (irq != NO_IRQ_IGNORE)

              /* That's not SMP safe ... but who cares ? */

              ppc_spurious_interrupts++;

 

       irq_exit();

       set_irq_regs(old_regs);

 

#ifdef CONFIG_PPC_ISERIES

       if (firmware_has_feature(FW_FEATURE_ISERIES) &&

                     get_lppaca()->int_dword.fields.decr_int) {

              get_lppaca()->int_dword.fields.decr_int = 0;

              /* Signal a fake decrementer interrupt */

              timer_interrupt(regs);

       }

#endif

}

暂时写这么多,有新发现在继续添加(呵呵, 有点晕!)

e5500 core rm e5500 core reference manual. 讲述Freescale e5500 core 的内部特性,freescale的p5020芯片采用了此内核。 立即下载

相关推荐

fsl-networking-eglibc-i686-ppce5500-toolchain-QorIQ-SDK-V1.7.sh

飞思卡尔T1系列CPU的工具链,fsl-networking-eglibc-x86_64-ppce5500-toolchain-QorIQ-SDK-V1.7.sh -h查看编译说明,非常简单 支持i686架构

POWERPC中断

从CPU的e500核的角度,中断源分为自己内核产生的异常和 PIC提供的中断。   异常,是e500核产生的,它是同步产生的(可以预知的),如非法指令,或访问存储器时出现TLB Miss等情况 中断,是e500核外部引脚产生的中断,由PIC送进来来的,它是异步产生的(无法预知的), 主要有:int#, cint#, mcp# 分别对应一般中断,critical中断和machine che

evenness的专栏 6048

C#上位机与VisionPro通用框架:视觉标定、通信联动与现场排坑实战

工业自动化设备的上位机开发,往往面临流程控制、视觉检测、通信交互等环节的重复搭建。C#作为主流工业语言,配合VisionPro视觉软件,可通过通用框架设计将状态机调度、相机采集、标定算法与串口/扫码枪通信等底层能力模块化,从而大幅降低项目交付成本。其核心原理在于:将设备工艺差异封装至配置层,视觉流程通过CogToolBlock工具链与VPP模板复用,九点标定建立像素与机械坐标系的映射关系。该方案已在螺丝锁付、点胶定位等多类产线落地,尤其适用于批量交付、换型频繁的视觉设备场景。这套从实践中沉淀的框架思路,以及

weixin_31102231的博客 337

powerpc家族谱系详解

转载地址:http://blog.youkuaiyun.com/gao5528/article/details/6664599

qingfengtsing的专栏 1万+

视觉机器人抓取实战:从物体定位到抓取估计的完整流程解析(附Python代码示例)

本文详细解析了视觉引导机器人抓取的完整技术流程,涵盖从物体定位、位姿估计到抓取估计的核心步骤。通过Python代码示例,演示了如何使用Open3D等工具进行点云处理、平面分割、PCA与ICP位姿估计,以及基于几何启发式的抓取生成方法,为机器人视觉抓取开发提供了清晰的实战指南。

peach的博客 913

非凸问题的求解方法以及连续凸逼近SCA(Successive Convex Approximation)方法

非凸问题的求解方法 针对形如下式的函数: min⁡x∈XV(x)=F(x)+G(x)\min\limits_{{\bf{x}}\in X} V(x)=F(x)+G(x)x∈Xmin​V(x)=F(x)+G(x); 其中F为光滑的(不一定convex),G是convex的但是可能不可微,且存在:对于n维实矢量空间,有X=X1×...×XNX=X_1 \times...\times X_NX=X1​×...×XN​; x=(x1,...,xN)\bf{x} =(x_1,...,x_N)x=(x1​,...,xN

weixin_44535200的博客 2万+

【AI邪修·嵌入式】入门PowerPC P2020

RK3568是瑞芯微推出的高性能四核Cortex-A55处理器,主频最高2.0GHz,支持LPDDR4/LPDDR4X内存,可运行Android、Linux、Debian等操作系统,广泛应用于智能NVR、工业控制、边缘计算、智能座舱等领域。它具备丰富的接口(PCIe 3.0、SATA 3.0、USB 3.0、千兆以太网等)和强大的多媒体处理能力(4K@60fps视频解码、8M ISP),是典型的嵌入式MPU产品。简单说:PowerPC是"电脑CPU",DSP是"数学专家",单片机是"控制管家"。

撬动未来的支点的专栏 280

EMS案例:BMS传导发射超标整改案例

BMS作为新能源汽车的关键部件,其EMC性能直接影响整车的安全性和可靠性。本文通过一个实际的传导发射整改案例,详细展示了从问题定位、分析到解决方案实施的全过程。希望这些经验能够为从事类似产品设计的工程师提供有价值的参考,在未来的产品开发中避免类似问题,设计出更加可靠、稳定的BMS产品。EMC设计是一门结合理论与实践的艺术,只有通过不断积累经验、深入理解电磁场理论,并紧密结合实际应用场景,才能在复杂的电磁环境中设计出鲁棒性强的电子产品。

m0_56451176的博客 272

电脑卡顿怎么办?

电脑卡断怎么办? 最近,不知何故,突然电脑变得卡顿无比,就连鼠标都变得不能连续移动,为了解决问题,首先打开万能的任务管理器,发现系统中断频繁占用CPU资源,而且每当卡顿发生的时候,也正是系统中断排在CPU资源占用的顶端,于是遍访互联网,也走了许多弯路。虽然说:病毒,软件故障,广告网页,甚至禁用可编程控制器都可能导致系统中断,但最终问题的解决却很简单,我的电脑使用了一套无线键盘和鼠标,把插在电脑USB接口上的接收器,换一个端口,问题就解决了。点赞支持加关注,也希望能帮到有类似经历的朋友们。 ...

weixin_42383883的博客 1026

智能车图像处理9-进阶篇1--中线的提取

(1)10-50行 基础扫线 (2)56-71 断行0 ,就是比如遇到十字,十字路口下方 第一次断线的地方。 (3)83-124 按照原先有效行,拟线作为中值,然后从中值向左右扫线,同时计算赛道宽度。 (4)125-138 如果出现赛道宽度小于先前有效行,则找到二次扫线的起点,从二次扫线起点处,继续向下扫线,直至结束,同时记录最后的有效行。 (5) 310-- 最后计算左右边线类似于方差的值,用于环岛的判断 ***这里着重描述一下二次扫线,希望大家可以理解的深刻

taiyuezyh的博客 1万+

2025年GESP12月认证C++一级真题解析

摘要 本文包含13道C++编程选择题,每题2分,涉及语法、运算符、循环、条件判断等知识点。题目考察了变量命名规则、运算符优先级、赋值语句、循环控制、格式化输出等内容。部分题目解析与标答存在差异,例如第4题逗号表达式输出应为5但标答为4,第6题赋值运算结果应为4 4但标答为3 4等。这些题目适合用于检验基础编程能力,但需注意部分标答可能存在争议,建议结合具体编译环境验证。最后一题考察"漂亮数"判断,要求填写数字某位能被3整除的条件表达式。

lan_in的博客 746

POWERPC中断【转】

从CPU的e500核的角度,中断源分为自己内核产生的异常和 PIC提供的中断。

liuqiang_mail的专栏 1635

【75】OpenCV C++实战篇——OpenCV 图像拼接、全景拼接(教程合集)

本文整理了OpenCV实现图像拼接的技术教程合集,涵盖C++和Python两种语言实现方案。图像拼接技术旨在将多张重叠图像融合为无缝全景图,既扩大视角又保持高分辨率。内容包含水平矫正等关键步骤(附对比效果图),提供多个实战案例的完整代码和详细讲解,涉及单应性矩阵、图像变换等核心技术。不同案例展示了从两张到多张图像的拼接效果,适合不同层次的学习者参考实践。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 528

嵌入式Linux内核调试实战:从环境搭建到模块调试全解析

在嵌入式系统开发中,内核调试是确保系统稳定运行的关键技术。其核心原理在于通过调试器接管处理器执行流程,实现对内核代码的源码级单步跟踪与状态监控。这项技术的价值在于能够深入系统底层,精准定位启动失败、驱动异常等复杂问题,极大提升开发效率。在基于Power Architecture等处理器的嵌入式Linux开发场景中,内核调试广泛应用于板卡启动、驱动开发和性能优化。本文聚焦于使用CodeWarrior IDE进行嵌入式Linux内核调试的完整流程,详细解析了调试环境构建、内存布局规划、设备树处理等核心环节,并深

weixin_30487201的博客 322

双Orin PCIe RC&EP模式互通

orin pcie 互通

乐于分享 3877

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

MPC8535E嵌入式处理器:经典架构的系统级集成与能效管理实践

在嵌入式系统设计中,处理器选型是平衡性能、功耗与成本的核心决策。Power Architecture架构以其高性能计算和确定性执行能力,在工业控制、网络通信等领域长期占据重要地位。其技术原理在于通过超标量流水线、硬件多线程及高效的内存子系统,为复杂实时任务提供可靠算力基础。这种架构的技术价值体现在出色的性能功耗比和高度集成的外设控制器上,能有效降低系统复杂性和整体成本。其典型应用场景包括网络路由器、工业网关、能源监控终端等对实时性、可靠性和能效有严苛要求的领域。本文以经典的MPC8535E处理器为例,深入剖

weixin_30407613的博客 436

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

嵌入式Linux共享库与U-Boot调试实战:CodeWarrior IDE配置详解

在嵌入式系统开发中,调试是保障软件质量与稳定性的核心环节。其原理在于通过调试器建立主机与目标机之间的通信与控制链路,实现对运行在目标硬件上的程序进行源码级监控与分析。这项技术的核心价值在于能显著提升复杂系统(如基于Power Architecture处理器的嵌入式Linux)的开发效率与问题定位能力,尤其在驱动开发、系统启动、性能优化等场景中不可或缺。本文聚焦于嵌入式Linux环境下两大典型调试场景:动态链接库(Shared Library)的运行时调试与U-Boot引导程序的深度源码调试。针对共享库调试,

congbao6525的博客 410

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

嵌入式开发实战:CodeWarrior链接器与编译器核心选项深度解析

在嵌入式系统开发中,链接器和编译器是构建工具链的核心组件,负责将源代码转换为可在目标硬件上执行的机器码。链接器作为“空间规划大师”,通过内存布局、地址分配和段合并,将分散的目标文件与库文件整合成统一的可执行映像,其配置直接决定了程序在物理内存中的存放与运行。编译器则根据处理器架构与ABI规范,进行指令生成、优化与数据对齐,深刻影响代码的效率与体积。理解链接器的内存映射原理与编译器的代码生成机制,对于解决内存溢出、优化代码尺寸、提升执行性能具有关键价值,尤其在汽车电子、工业控制等对资源与可靠性要求严苛的嵌入式

504

Windows10 关于系统中断CPU占用过高导致电脑变卡的解决办法

Windows10 关于系统中断CPU占用过高导致电脑变卡的解决办法   最近一段时间笔记本一直很卡,不管打开几个程序,任务管理器中总会有CPU占用80%以上,这一度让我抓狂,开始网上搜教程,然后开始了我的各种硬件禁用的道路,这个试了好久,为了避免以后遇到同样问题束手无策,所以就记录一下,方便以后解决问题。 现象: 任务管理器中进程中有一个系统中断占用超过60%(图中框起来的这个进程) 解决办法: 此电脑(右键)——管理——系统工具——设备管理器——系统设备——可编程中断控制器( Programmabl

wsq119的博客 6万+

T1042/T2080 u-boot移植(一)

QorIQ T1042/T1022系列通信处理器结合64位内核,基于Power Architecture技术构建而成。适用于集成控制和数据平台应用,如固定路由器、交换机、嵌入式接入设备、防火墙和其他数据包过滤应用,以及通用嵌入式计算,它具备较高的集成度,可提供卓越的性能优势,简化设计;支持硬件协助虚拟化,内核提供额外的内核特权等级;集成QorIQ DPAA,可以安排内核、硬件加速器和网络接口的工作...

yhcs1213的专栏 1957

PowerPC家族谱系详解

随着PowerPC的 发展,使用PowerPC构架的处理器已经形成了庞大的家族,在通信、工控、航天国防等要求高性能和高可靠性的领域得到广泛应用,是一颗“贵族的芯片”。 目前几乎没有什么中文资料详细阐述PowerPC家族谱系,实在是一件遗憾的事。本文就给初学者简介PowerPC家族。 要阐述清楚PowerPC的发展不是一件容易的事情,光是“PowerPC”这个词,就很容易被搞混,尤其是IBM注

Kelsey11的博客 1万+

转:也谈栈和栈帧

https://blog.youkuaiyun.com/dsgsnb/article/details/5687591     https://blog.youkuaiyun.com/kexin1212/article/details/38067533 一个码农要是没遇见过coredump,那他就是神仙了。core file(coredump的转储文件)中保存的最重要内容之一,就是函数的call trace。还...

hunter 933

E500的异常和中断分析(1)

关键字:E500 精确异常 同步异常 异步异常  E500的异常可以分为三种:异步,同步精确和同步非精确。 异步异常:被认为是一种和指令执行无关的异常,常见的异常类型为外部中断 同步精确异常:直接由指令执行而导致的异常为同步异常,这种异常处理可以是精确的(precise)也可以是不精确的(imprecise)。精确异常,记录的是发生异常的这条指令。简单的说就

michael_kang的专栏 2031

PowerPC中断系统简介(一)

1. PowerPC中断系统简介PowerPC处理器的中断系统由两部分组成,一是内核的中断及异常的处理;二是中断控制器。以P2020处理器为例,包括E500内核中断及异常处理系统和OpenPIC中断控制器。在E500内核中,包含两种可以暂时中止处理器运行当前指令的事件、中断和异常。其中,异常是由E500内核产生的,如出现非法指令,访问存储器时出现TLB Miss等情况;而中断...

weixin_34138139的博客 834
上一篇: powerpc如何创建mtd 分区,nor flash,nand flash,mpc83xx
下一篇: uboot 用 ramdisk 引导linux命令行,u-boot,bootargs,arm
#Page#
博客等级 码龄23年 1691粉丝 360原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值