精华内容
下载资源
问答
  • 本篇主要针对太熟悉的TZ 故障捕获 DB 死区产生两个子模块进行学习研究感觉TI的寄存器命名还是有一定规律可循的SEL主要用于选择位 CTL主要用于控制位 EINT主要用于使能中断 FLG是标志查询位 CLR中断标志清除位 ...

    DSP EPWM学习笔记2 - EPWM相关寄存器设置问题解析

    彭会锋

    本篇主要针对不太熟悉的TZ 故障捕获 和 DB 死区产生两个子模块进行学习研究

    感觉TI的寄存器命名还是有一定规律可循的

    SEL主要用于选择位 CTL主要用于控制位 EINT主要用于使能中断 FLG是标志查询位 CLR中断标志清除位 FRC 软件强制使能设置位

    1 TZ 故障捕获子模块

         TZ子模块可以工作在Cycle-by-Cycle、One-Shot两种模式下,这两种状态的区别是:

    • one-shot是永久起作用的,恢复它只有人工清除。
    • 而Cycle-by-Cycle却是本周期有用,下一周期自动恢复

         外部触发选择寄存器TZSEL 寄存器设置选项如下:

        TZCTL主要设置TZA 和TZB寄存器即可,主要定义当外部触发事件发生时,定义EPWMxA和EPWMxB所采取的动作:

    TZEINT 中断使能寄存器  控制周期触发和单次触发的中断标志使能

    TZFLG 是外部触发标志寄存器  TZCLR外部触发清零寄存器  这两个理解起来比较简单,所以不再做过多说明,就是中断的时候查询标志位,然后中断发生了就把标志位清零即可!

    TZFRC 外部触发强制寄存器

    TZ寄存器配置代码
        EALLOW;
        EPwm1Regs.TZCTL.bit.TZA = TZ_FORCE_HI;            // Forced Hi (EPWM1A = High state)
        EPwm1Regs.TZCTL.bit.TZB = TZ_FORCE_HI;            // Forced Hi (EPWM1B = High state)
        EPwm1Regs.TZFRC.bit.OST = 1;                    // Forces a fault on the OST latch and sets the OSTFLG bit.
        EDIS;
    2 DB 死区产生
    2.1 DB寄存器设置

     

    2.2 死区产生子模块内部结构

         结合上图可以看出,DBCLT[IN_MODEL]就是选择哪个作为输入信号源进行延时控制;通过延时模块之后,实现上升沿和下降沿的延时功能;

         然后有一个反相器模块,可以产生互补的输出信号,是否反转可以通过寄存器DBCTL[POLSEL]进行设置,感觉这个寄存器就是设置信号是否反转的,如果是1就反转,如果0就不反转,就这样子!

         DBCTL[OUT_MODE]主要作用是选择那个信号进行输出,如果选择0,那么之前的延时的信号就被旁路掉了,整个DB模块就不起作用了,选择1才会产生死区功能;

    2.3 经典死区配置方案(感觉这里的后缀 C 就是互补的意思,没后缀则无互补,这个在2.4的波形图里面可以得到更好的体现

    2.4 加入死区延时的波形输出 (对比着2.2看2.3和2.4的图是最好明白寄存器配置的,也好理解输出波形是怎么样子的!)

     

    2.5 寄存器配置代码
    // DBCTL (Dead-Band Control)
    //==========================
    // OUT MODE bits
    #define DB_DISABLE            0x0
    #define DBB_ENABLE            0x1
    #define DBA_ENABLE            0x2
    #define DB_FULL_ENABLE        0x3
    // POLSEL bits
    #define DB_ACTV_HI            0x0
    #define DB_ACTV_LOC           0x1
    #define DB_ACTV_HIC           0x2
    #define DB_ACTV_LO            0x3
    // IN MODE
    #define DBA_ALL               0x0
    #define DBB_RED_DBA_FED       0x1
    #define DBA_RED_DBB_FED       0x2
    #define DBB_ALL               0x3

      // Active Low PWMs - Setup Deadband
      EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;  //这里基本上都是配置两个波形都是有延时才输出的,不会旁路掉延时波形
      EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LO; //低电平有效,这里会对电平进行一个反转
      EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL; //选择 epwmxa作为信号源作为延时依据
      EPwm1Regs.DBRED = EPWM1_MIN_DB; //设置上升沿的延时
      EPwm1Regs.DBFED = EPWM1_MIN_DB; //设置下降沿的延时
      EPwm1_DB_Direction = DB_UP;

     

    转载于:https://www.cnblogs.com/qiufenghui/p/4635060.html

    展开全文
  • 外部中断和内部中断

    千次阅读 2014-12-18 15:07:50
    内部中断主要是指定时器/计数器中断,装栈溢出后置位相关特殊寄存器来执行中断; 举一个例子,外部中断:你在吃饭,这时候电话响了,你暂时放下餐具去接听电话在这里吃饭是你目前正在执行程序,电话响了,是一个...

    外部中断是指外部有中断源时执行相应的中断程序,主要是指INT0,INT1,通讯中断;内部中断主要是指定时器/计数器中断,装栈溢出后置位相关特殊寄存器来执行中断;
    举一个例子,外部中断:你在吃饭,这时候电话响了,你暂时放下餐具去接听电话在这里吃饭是你目前正在执行的程序,电话响了,是一个中断源,他是随机的,不定时发生,接完电话(处理完中断事件)你回来继续吃,(继续执行中断点没有做处理完的程序)
    内部中断:你正在吃饭,这时碗里的饭没有了,你要去盛饭,盛了饭回来继续吃,在这里吃饭依然是你目前正在处理的一个程序,碗里的饭没有了相当于是一个中断,这个中断是由你吃饭引起了,相当于系统中的标志位溢出;

    展开全文
  • STM32的中断和事件

    2015-01-30 13:16:27
    上图框图中对应的寄存器可以在技术手册中找到相关的意义。 上图19个中断源的意义也可以在技术手册中找到, 可以这样简单的理解: 详细点的理解: 在STM32中,中断与事件不是等价的,一个中断肯定对应一个...

    上图框图中对应的寄存器可以在技术手册中找到相关的意义。


    上图19个中断源的意义也可以在技术手册中找到,



    可以这样简单的理解:


    详细点的理解:

    在STM32中,中断与事件不是等价的,一个中断肯定对应一个事件,但一个事件不一定对应一个中断。

    事件只是一个触发信号(脉冲),而中断则是一个固定的电平信号。

    事件:是表示检测到某一动作(电平边沿)触发事件发生了。
    中断:有某个事件发生并产生中断,并跳转到对应的中断处理程序中。
    事件可以触发中断,也可以不触发。
    中断有可能被更优先的中断屏蔽,事件不会。

    中断信号也即中断事件.它往往有寄存器作记录,但也有例外,如AVR的脚的电平变化引起的中断,就没有寄存器记录.

    事件是中断的触发源,开放了对应的中断屏蔽位,则事件可以触发相应的中断。 

    事件还是其它一些操作的触发源,比如DMA,还有TIM中影子寄存器的传递与更新;

    简单点就是中断一定要有中断服务函数,但是事件却没有对应的函数.但是事件可以触发其他关联操作,比如触发DMA,触发ADC采样等.可以在不需要CPU干预的情况下,执行这些操作.中断则必须要CPU介入.

    中断和事件的产生源都可以是一样的! 之所以分成2个部分,由于中断是需要CPU参与的,需要软件的中断服务函数才能完成中断后产生的结果; 但是事件,是靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件产生的结果,当然相应的联动部件需要先设置好,比如引起DMA操作,AD转换等; 

    通常一个中断服务程序对应一个中断事件,但有些cpu设计,可以一个中断服务程序对应几个中断事件(实际上,是一个中断入口,对应若干中断信号或称中断源)

    这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套.图中的蓝色虚线箭头,标出了外部中断信号的传输路径,首先外部信号从编号1的芯片管脚进入,经过编号2的边沿检测电路,通过编号3的或门进入中断挂起请求寄存器,最后经过编号4的与门输出到NVIC中断检测电路,这个边沿检测电路受上升沿或下降沿选择寄存器控制,用户可以使用这两个寄存器控制需要哪一个边沿产生中断,因为选择上升沿或下降沿是分别受2个平行的寄存器控制,所以用户可以同时选择上升沿或下降沿,而如果只有一个寄存器控制,那么只能选择一个边沿了.

    按下来是编号3的或门,这个或门的另一个输入是软件中断/事件寄存器,从这里可以看出,软件可以优先于外部信号请求一个中断或事件,即当软件中断/事件寄存器的对应位为"1"时,不管外部信号如何,编号3的或门都会输出有效信号.

    一个中断或事件请求信号经过编号3的或门后,进入挂起请求寄存器,到此之前,中断和事件的信号传输通路都是一致的,也就是说,挂起请求寄存器中记录了外部信号的电平变化.

    外部请求信号最后经过编号4的与门,向NVIC中断控制器发出一个中断请求,如果中断屏蔽寄存器的对应位为"0",则该请求信号不能传输到与门的另一端,实现了中断的屏蔽.

    明白了外部中断的请求机制,就很容易理解事件的请求机制了.图中红色虚线箭头,标出了外部事件信号的传输路径,外部请求信号经过编号3的或门后,进入编号5的与门,这个与门的作用与编号4的与门类似,用于引入事件屏蔽寄存器的控制;最后脉冲发生器的一个跳变的信号转变为一个单脉冲,输出到芯片中的其它功能模块.从这张图上我们也可以知道,从外部激励信号来看,中断和事件的产生源都可以是一样的.之所以分成2个部分,由于中断是需要CPU参与的,需要软件的中断服务函数才能完成中断后产生的结果;但是事件,是靠脉冲发生器产生一个脉冲,进而由硬件自动完成这个事件产生的结果,当然相应的联动部件需要先设置好,比如引起DMA操作,AD转换等;


    简单举例:外部I/O触发AD转换,来测量外部物品的重量;如果使用传统的中断通道,需要I/O触发产生外部中断,外部中断服务程序启动AD转换,AD转换完成中断服务程序提交最后结果;要是使用事件通道,I/O触发产生事件,然后联动触发AD转换,AD转换完成中断服务程序提交最后结果;相比之下,后者不要软件参与AD触发,并且响应速度也更块;要是使用事件触发DMA操作,就完全不用软件参与就可以完成某些联动任务了。

    总结:

    中断请求:当产生中断的时候,会执行对应的中断处理程序

    事件请求:当产生事件的时候,会想向其他模块发送触发信号,对于其他模块如何处理这个信号,则由模块自己决定!

    可以这样简单的认为,事件机制提供了一个完全有硬件自动完成的触发到产生结果的通道,不要软件的参与,降低了CPU的负荷,节省了中断资源,提高了响应速度(硬件总快于软件),是利用硬件来提升CPU芯片处理事件能力的一个有效方法;




     









    展开全文
  • 由于PCI设备的多样化,而系统的中断数量是有限的。所以采用多个设备共用一个中断号。...在操作系统收到IRP_MN_START_DEVICE请求时,PDO会获取到中断相关的资源。参考例子如下:NTSTATUS GetPciReso

    由于PCI设备的多样化,而系统的中断数量是有限的。所以采用多个设备共用一个中断号。在获取到中断后,操作系统会询问这条中断线上的所以设备。设备通过查询中断寄存器就可以知道是不是自己的中断,如果不是则在中断处理例程中返回FALSE,如果是则处理并返回TRUE。
    在操作系统收到IRP_MN_START_DEVICE请求时,PDO会获取到中断相关的资源。参考例子如下:

    NTSTATUS GetPciResource(IN PDEVICE_EXTENSION pExtension, IN PCM_PARTIAL_RESOURCE_LIST list)
    {
        PDEVICE_OBJECT fdo = pExtension->fdo;
    
        KINTERRUPT_MODE  mode;
        BOOLEAN          irqshare;
        BOOLEAN          gotinterrupt = FALSE;
    
        PCM_PARTIAL_RESOURCE_DESCRIPTOR resource = &list->PartialDescriptors[0];
        ULONG nres = list->Count;
        for (ULONG i = 0; i < nres; ++i, ++resource)
        {                       // for each resource
            switch (resource->Type)
            {                   // switch on resource type
            case CmResourceTypeInterrupt:
            {
                KdPrint(("resource->Type = CmResourceTypeInterrupt\n"));
                pExtension->Irql = (KIRQL)resource->u.Interrupt.Level;
                pExtension->Vector = resource->u.Interrupt.Vector;
                pExtension->Affinity = resource->u.Interrupt.Affinity;
                mode = (resource->Flags == CM_RESOURCE_INTERRUPT_LATCHED) ? Latched : LevelSensitive;
                irqshare = (resource->ShareDisposition == CmResourceShareShared);
                gotinterrupt = TRUE;
            }break;
            default:
                KdPrint(("Unexpected I/O resource type %d\n", resource->Type));
                break;
            }                   // switch on resource type
        }                       // for each resource
    
        return STATUS_SUCCESS;
    }

    获取到中断资源后,驱动程序可以使用IoConnectInterrupt将中断与中断处理函数挂接。IoConnectInterrupt的原型如下:

    NTSTATUS IoConnectInterrupt(
      _Out_    PKINTERRUPT       *InterruptObject,  //输出一个INTERRUPT结构的中断对象
      _In_     PKSERVICE_ROUTINE ServiceRoutine,    //中断处理例程
      _In_opt_ PVOID             ServiceContext,    //中断处理例程的参数
      _In_opt_ PKSPIN_LOCK       SpinLock,          //用于同步的自旋锁
      _In_     ULONG             Vector,            //中断向量号,在PDO获得
      _In_     KIRQL             Irql,              //中断优先级,在PDO获得
      _In_     KIRQL             SynchronizeIrql,   //同IRQL
      _In_     KINTERRUPT_MODE   InterruptMode,     //中断模式,Latched(电平触发),LevelSensitive (边沿触发)
      _In_     BOOLEAN           ShareVector,       //是否与其他设备共享中断向量,设为TRUE
      _In_     KAFFINITY         ProcessorEnableMask,//CPU屏蔽位,在PDO获得
      _In_     BOOLEAN           FloatingSave       //X86平台默认为FALSE
    );
     NTSTATUS status = IoConnectInterrupt(&pExtension->pInterruptObject, (PKSERVICE_ROUTINE)OnInterrupt,
            (PVOID)pExtension, NULL, pExtension->Vector, pExtension->Irql, pExtension->Irql, LevelSensitive, TRUE, pExtension->Affinity, FALSE);
        if (!NT_SUCCESS(status))
        {
            KdPrint(("IoConnectInterrupt failed - %X\n", status));
            return status;
        }

    中断处理例程原型如下:

    KSERVICE_ROUTINE InterruptService;
    
    BOOLEAN InterruptService(
      _In_ struct _KINTERRUPT *Interrupt,
      _In_ PVOID              ServiceContext
    )
    { ... }

    值得注意的是,如果不是自己设备产生的中断,一定要返回FALSE,如果是自己设备的中断,则必须清除掉中断。

    展开全文
  • 在Linux 内核中提供了完善的中断框架,我们只需要申请中断,然后注册中断处理函数即可,使用非常方便,需要一系列复杂的寄存器配置。 在ARM裸机中对中断发生的处理方式大致为 1、使能中断、初始化对应的寄存器 2、...
  • 28335单单是个CPU,还有非常多的...就像你使用SCI只需设置好波特率和相关的中断,然后做好数据的收发,数据的串并/并串转换、fifo的控制、并行帧监测这都是由硬件模块完成。  CPU跟这些模块的接口就是这些模块...
  • 虽然我们知道怎么配置单片机的中断,但估计很多人对它的细节还不是很理解,我将在后半部分讲解,但不会涉及寄存器的操作,有关中断的寄存器操作机理请见文献[2],我也将在后续博客中进行实例分析。 文中的例子是...
  • HAL库使用太死板HAL串口中断接收HAL库使用起来太灵活,限制太多,后面如有时间,将使用寄存器和HAL库混合操作方式。 如使用串口中断接收,在接收到数据后,库里做了关闭接收非空中断RXNEIE,如下 HAL库DMA发送...
  • 中断的处理过程

    2012-12-11 20:59:48
    (1) 中断控制器汇集各类外设发出的中断信号,然后告诉CPU; (2) CPU保存当前程序运行环境(各个寄存器等),调用中断服务...(4) 通过读写中断控制器外设的相关寄存器清除中断,如果清楚,CPU会误认为该中
  • 中断的实现裸机代码是一样,对于裸机代码来说,它处理过程更符合下面这个流程,我们在编写裸板驱动代码时候,一般处理是硬件中断,而且中断号也是硬件中断号,这个中断号是CPU寄存器的连线方式直接...
  • STM32F103ZET6的中断管理

    2019-06-09 12:21:00
     STM32的中断管理是属于内核部分的,所以中断管理的寄存器也是属于内核组,属于芯片外设,在查看相关资料的时候,需要查看相对应的内核手册。  STM32F103ZET6是Cortex-M3内核的IC。Cortex-M3内核支持256个中断...
  • 术语解释2.F103系列单片机的中断及其管理器二、中断相关的寄存器及其设置方法三、配置中断的步骤及其库函数四、中断配置的模板总结 前言 随富随贫且欢乐,开口笑是痴人。-----白居易 中断是学习单片机必须掌握...
  • 中断分类: 1.由软件中断指令SWI引起软件中断。SWI中断可以实现从用户模式到特权模式切换。一般用于特权操作系统...FIQ模式下备份寄存器最多,保证了FIQ需要花更多时间去备份寄存器数据,而ldmstm
  • 异常(Exception)是指由处理器执行指令导致原来运行程序中止,异常与指令运行相关,是CPU执行程序产生,是同步,可分为精确异常非精确异常。异常处理遵守严格程序顺序,能嵌套,只有当第一个异常处理完...
  • 中断

    2012-09-19 15:36:10
    外设的输入直接送入内存CPU,而是送入相关的接口芯片的端口中;CPU向外设的输出也不是直接送入外设,而是先送入段口中,再由相关的芯片送到外设。也就是说CPU通过端口外部设备进行联系。 2、可屏蔽中断的引发...
  • Cortex-M3中断NVIC 概览

    2021-06-12 16:13:56
    NVIC 的寄存器以存储器映射的方式来访问,除了包含控制寄存器和中断处理的控制逻辑之外, NVIC 还包含了 MPU、 SysTick 定时器以及调试控制相关的寄存器。 NVIC 共支持 1 至 240 个外部中断输入(通常外部中断写作...
  • 中断就是通常意义上的\"中断处理程序\",它是直接处理由硬件发过来的中断信号的。当硬中断收到它应当处理的中断信号以后,就回去自己驱动的设备上去看看设备的状态寄存器...本文讨论的是硬中断,即硬件相关的中断
  • stm32之中断

    2020-05-20 21:38:08
    NVIC:嵌套向量中断控制器,属于内核外设,管理着包括内核片上所有外设的中断相关的功能。 两个重要的库文件:core_cm3.hmisc.h NVIC寄存器简介,core_cm3.h定义 数组成员很多,一般用到用完。内核10个,...
  • 课程内容 ARM中断体系结构 -7种工作模式 ...如上图所示,在处于系统/用户模式下中断模式下r0-r7是一样,但是r8-r14是相同,快中断模式下有属于自己r8-r14寄存器,其他模式同理。 同一条mov...
  • 实验五--中断系统

    2014-11-16 16:00:00
    一。平台  系统:ubuntu12.04  开发板:jz2440  编译器:gcc ... arm中断和51类似,无非就是设置相关寄存器中断开关,中断源,中断分辨之类东西;但是注意,arm的中断只是7个模式下一...
  • 2.外设的输入直接送入内存CPU,而是送入相关的接口芯片的【端口】中 3.CPU向外设的输出也是要先送入【端口】中,再由相关芯片送入到外设 4.CPU可以向外设输出控制命令,这些控制命令也是先送到【端口】中,然后...
  • 而对于寄存器是可以直接位操作的,但如果对所有的寄存器都能实现位操作,那么硬件结构上就非常复杂庞大了,所以必须采用一种折中的处理方法。 3。现在的趋势是采用C语言编写系统程序,而标准的C中,没有位变量的...
  • stm32中断向量表

    2013-05-05 16:17:00
    NVIC相关寄存器才是管理STM32所有中断开关和中断优先级司令部,NVIC共支持1至240个外部中断输入(通常外部中断写作IRQs)。具体数值由芯片厂商在设计芯片时决定。此外,NVIC还支持一个“永垂不朽”的不可屏蔽...
  • 最近NB项目上使用ST公司一款低功耗MCU,要求功耗越低越好。经过几天时间,终于把它搞定了。...1、调试低功耗产品先去看低功耗相关说明和寄存器操作,这个是避免不的。(去百度搜索stm32L0中文参考手...
  • 【STM32F103】中断综述

    千次阅读 2019-01-19 21:26:21
    每个外设都可以产生中断,F103在内核水平上搭载了异常响应系统,系统异常有8个(算上RESETHardFault也就10个),外部中断有60个,但是根据NVIC(嵌套向量中断控制器,控制整个芯片中断相关的功能),IP(中断...
  • 第十五章 外中断

    2012-03-19 16:47:00
    外设的输入直接送入内存CPU,而是送入相关的接口芯片的端口中;CPU向外设的输出也不是直接送入外设,而是先送入段口中,再由相关的芯片送到外设。也就是说CPU通过端口外部设备进行联系。 2、可屏蔽中断的引发...
  • 与之相关的四个寄存器: LOAD自动重装载值 VAL当前值寄存器 CALIB校准值寄存器 CTRL控制状态 外部时钟源是HCLK(AHB时钟总线)的1/8. 内核时钟是HCLK时钟。 配置函数SysTick_CLKSourceConfig(); SysTick_...
  • STM32F0系列重写UART相关代码。 在新UART里,容易发出错误是FE错误ORE错误。 FE解释如下: FE: 帧错误 当一个同步现象、 强噪声或一个断开符号...如果 USART_CR1 寄存器 EIE 位是 1, 会产生中断请求。
  • 衍生自旋锁主要是基于自旋锁和中断屏蔽实现,对于使用衍生自旋锁内容能进行休眠操作 /* 对要操作全局变量或寄存器添加衍生自旋锁函数: spin_lock_irqsave(lock,flags); 参数: lock : spinlock_t lock; ...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 139
精华内容 55
关键字:

和中断不相关的寄存器是