首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏TopSemic嵌入式

    __disable_irq() 和 __enable_irq()定义在哪?

    前段时间一工程师向我咨询了一个问题,问我为什么他的MCU KEIL工程代码里没有找到__disable_irq() 和 __enable_irq()的具体定义,是不是有问题。 __disable_irq() 和 __enable_irq() 是所谓的intrinsic函数,编译器自动识别并替换为相关的指令,它们其实是编译器的一部分,实际的定义位于arm_compat.h 文件中 这说明__disable_irq()只是禁止CPU去响应中断,没有真正的去屏蔽中断的触发,当中断发生后,相应的寄存器会将中断标志置位,在__enable_irq()开启中断后,由于相应的中断标志没有清空 实际测试如果在调用__disable_irq()后、__enable_irq()之前的这3s时间内按下按键,并不会进入中断翻转LED,虽然这时中断标志位已经产生了。 但是调用__enable_irq()之后就会立刻进入到中断服务函数中。

    1.9K10编辑于 2024-06-06
  • 来自专栏技术杂记

    ARM(十五).IIC with IRQ 3

    unsigned *)0x4a000008) //Interrupt mask control #define rPRIORITY (*(volatile unsigned *)0x4a00000c) //IRQ _ISR_STARTADDRESS+0x10)) #define pISR_RESERVED (*(unsigned *)(_ISR_STARTADDRESS+0x14)) #define pISR_IRQ

    940110发布于 2021-08-12
  • 来自专栏Linux内核深入分析

    Linux Irq domain

    本节学习下什么是irq domain, 以及irq domain的作用。 linux内核为了应对此问题,引入了IRQ-domain的概念 irq-domain的引入相当于一个中断控制器就是一个irq-domain。就是一个中断区域。 利用树状的结构可以充分的利用irq数目,而且每一个irq-domain区域可以自己去管理自己interrupt的特性 IRQ-Domain的作用 咋们通过/proc/interrupt的值来看下irq-domain *irq_to_desc(unsigned int irq) { return radix_tree_lookup(&irq_desc_tree, irq); } struct irq_desc *irq_to_desc(unsigned int irq) { return (irq < NR_IRQS) ?

    1.6K20编辑于 2021-12-07
  • 来自专栏linux驱动个人学习

    local_irq_disable和disable_irq的区别

    __disable_irq_nosync(irq)) 416 synchronize_irq(irq); 417 } 372 static int __disable_irq_nosync desc->irq_data.chip->irq_disable(&desc->irq_data); 221 irq_state_set_masked(desc); 222 } –>chip->irq_mask –>chip->irq_ack –> handle_irq_event (就是调用irq_handler的处理) –>chip-> irq_unmask 具体可以参考蜗窝上的文章 ->irq_mask(&desc->irq_data); if (desc->irq_data.chip->irq_ack) desc->irq_data.chip ->irq_ack(&desc->irq_data); } irq_state_set_masked(desc); } 该函数中调用的就是chip中的irq_mask和irq_ack

    1.9K30发布于 2019-05-25
  • 来自专栏技术杂记

    ARM(十五).IIC with IRQ

    EXPORT声明一个符号Default_IRQ_ISR可以被其它文件引用 Default_IRQ_ISR ;定义一个Default_IRQ_ISR,并且啥也不干 B . ;B Default_IRQ_ISR代表啥都不干(因为上面对Default_IRQ_ISR中的操作定义就是啥都没干) EINT1_Handle B Default_IRQ_ISR B Default_IRQ_ISR TICK_Handle B Default_IRQ_ISR WDT_AC97_Handle B Default_IRQ_ISR Default_IRQ_ISR ISR_SDI_Handle B Default_IRQ_ISR ISR_SPI0_Handle B Default_IRQ_ISR ISR_UART1 B Default_IRQ_ISR ISR_ADC_Handle B Default_IRQ_ISR IRQ_Handler PROC EXPORT IRQ_Handler

    1.3K20发布于 2021-08-12
  • 来自专栏技术杂记

    ARM(十四).WatchDog with IRQ

    EXPORT声明一个符号Default_IRQ_ISR可以被其它文件引用 Default_IRQ_ISR ;定义一个Default_IRQ_ISR,并且啥也不干 B . ;B Default_IRQ_ISR代表啥都不干(因为上面对Default_IRQ_ISR中的操作定义就是啥都没干) EINT1_Handle B Default_IRQ_ISR _Handle B Default_IRQ_ISR ISR_UART2_Handle B Default_IRQ_ISR ISR_LCD_Handle B Default_IRQ_ISR Default_IRQ_ISR ISR_DMA3_Handle B Default_IRQ_ISR ISR_SDI_Handle B Default_IRQ_ISR ISR_SPI0 B Default_IRQ_ISR ISR_ADC_Handle B Default_IRQ_ISR IRQ_Handler PROC EXPORT IRQ_Handler

    1.3K40发布于 2021-08-12
  • 来自专栏技术杂记

    ARM(十四).WatchDog with IRQ2

    Interrupt mode control INTMSK EQU 0x4a000008 ;Interrupt mask control PRIORITY EQU 0x4a00000c ;IRQ SUB_STACK_SIZE EQU 128 ;定义变量子栈大小 STACK_BASE EQU (0x00001000) ;定义栈的基址 IRQStack_BASE EQU STACK_BASE ;定义IRQ

    82730发布于 2021-08-12
  • 来自专栏技术杂记

    ARM(十二).ADC with IRQ1

    EXPORT声明一个符号Default_IRQ_ISR可以被其它文件引用 Default_IRQ_ISR ;定义一个Default_IRQ_ISR,并且啥也不干 B . ;B Default_IRQ_ISR代表啥都不干(因为上面对Default_IRQ_ISR中的操作定义就是啥都没干) EINT1_Handle B Default_IRQ_ISR B Default_IRQ_ISR TICK_Handle B Default_IRQ_ISR WDT_AC97_Handle B Default_IRQ_ISR Default_IRQ_ISR ISR_TIMER3_Handle B Default_IRQ_ISR ISR_TIMER4_Handle B Default_IRQ_ISR ISR_UART2 Default_IRQ_ISR ISR_SDI_Handle B Default_IRQ_ISR ISR_SPI0_Handle B Default_IRQ_ISR ISR_UART1

    97820发布于 2021-08-13
  • 来自专栏技术杂记

    ARM(六).TIMER and IRQ(3)

    SUB_STACK_SIZE EQU 128 ;定义变量子栈大小 STACK_BASE EQU (0x00001000) ;定义栈的基址 IRQStack_BASE EQU STACK_BASE ;定义IRQ unsigned *)0x4a000008) //Interrupt mask control #define rPRIORITY (*(volatile unsigned *)0x4a00000c) //IRQ _ISR_STARTADDRESS+0x10)) #define pISR_RESERVED (*(unsigned *)(_ISR_STARTADDRESS+0x14)) #define pISR_IRQ

    65650发布于 2021-09-14
  • 来自专栏技术杂记

    ARM(五).EINT and IRQ(2)

    Interrupt mode control INTMSK EQU 0x4a000008 ;Interrupt mask control PRIORITY EQU 0x4a00000c ;IRQ

    62030发布于 2021-09-14
  • 来自专栏技术杂记

    ARM(六).TIMER and IRQ(1)

    EXPORT声明一个符号Default_IRQ_ISR可以被其它文件引用 Default_IRQ_ISR ;定义一个Default_IRQ_ISR,并且啥也不干 B . ;B Default_IRQ_ISR代表啥都不干(因为上面对Default_IRQ_ISR中的操作定义就是啥都没干) EINT1_Handle B Default_IRQ_ISR Default_IRQ_ISR ISR_UART2_Handle B Default_IRQ_ISR ISR_LCD_Handle B Default_IRQ_ISR ISR_DMA0 B Default_IRQ_ISR ISR_USBH_Handle B Default_IRQ_ISR ISR_IIC_Handle B Default_IRQ_ISR Default_IRQ_ISR ISR_ADC_Handle B Default_IRQ_ISR IRQ_Handler PROC EXPORT IRQ_Handler

    86830发布于 2021-09-14
  • 来自专栏技术杂记

    ARM(五).EINT and IRQ(1)

    EXPORT声明一个符号Default_IRQ_ISR可以被其它文件引用 Default_IRQ_ISR ;定义一个Default_IRQ_ISR,并且啥也不干 B . Default_IRQ_ISR TICK_Handle B Default_IRQ_ISR WDT_AC97_Handle B Default_IRQ_ISR ISR_TIMER0 Default_IRQ_ISR ISR_LCD_Handle B Default_IRQ_ISR ISR_DMA0_Handle B Default_IRQ_ISR ISR_DMA1 B Default_IRQ_ISR ISR_IIC_Handle B Default_IRQ_ISR ISR_UART0_Handle B Default_IRQ_ISR B Default_IRQ_ISR ISR_ADC_Handle B Default_IRQ_ISR IRQ_Handler PROC EXPORT IRQ_Handler

    75230发布于 2021-09-14
  • 来自专栏技术杂记

    ARM(六).TIMER and IRQ(2)

    Interrupt mode control INTMSK EQU 0x4a000008 ;Interrupt mask control PRIORITY EQU 0x4a00000c ;IRQ

    79730发布于 2021-09-14
  • 来自专栏技术杂记

    ARM(五).EINT and IRQ(3)

    SUB_STACK_SIZE EQU 128 ;定义变量子栈大小 STACK_BASE EQU (0x00001000) ;定义栈的基址 IRQStack_BASE EQU STACK_BASE ;定义IRQ unsigned *)0x4a000008) //Interrupt mask control #define rPRIORITY (*(volatile unsigned *)0x4a00000c) //IRQ _ISR_STARTADDRESS+0x10)) #define pISR_RESERVED (*(unsigned *)(_ISR_STARTADDRESS+0x14)) #define pISR_IRQ

    46510发布于 2021-09-14
  • 来自专栏技术杂记

    ARM(十五).IIC with IRQ 2

    Interrupt mode control INTMSK EQU 0x4a000008 ;Interrupt mask control PRIORITY EQU 0x4a00000c ;IRQ SUB_STACK_SIZE EQU 128 ;定义变量子栈大小 STACK_BASE EQU (0x00001000) ;定义栈的基址 IRQStack_BASE EQU STACK_BASE ;定义IRQ

    47730发布于 2021-08-12
  • 来自专栏技术杂记

    ARM(十二).ADC with IRQ2

    Interrupt mode control INTMSK EQU 0x4a000008 ;Interrupt mask control PRIORITY EQU 0x4a00000c ;IRQ SUB_STACK_SIZE EQU 128 ;定义变量子栈大小 STACK_BASE EQU (0x00001000) ;定义栈的基址 IRQStack_BASE EQU STACK_BASE ;定义IRQ

    65110发布于 2021-08-13
  • 来自专栏技术杂记

    ARM(十二).ADC with IRQ3

    unsigned *)0x4a000008) //Interrupt mask control #define rPRIORITY (*(volatile unsigned *)0x4a00000c) //IRQ _ISR_STARTADDRESS+0x10)) #define pISR_RESERVED (*(unsigned *)(_ISR_STARTADDRESS+0x14)) #define pISR_IRQ

    76130发布于 2021-08-13
  • 来自专栏Linux驱动

    6.分析request_irq和free_irq函数如何注册注销中断(详解)

    本节目标:      分析request_irq()如何申请注册中断,free_irq()如何注销中断 1.request_irq()位于kernel/irq/ manage .c,函数原型如下: int retval = setup_irq(irq, action); // 进入setup_irq(irq, action),设置irq_ desc[irq]->action if 型action,然后把参数都赋给这个action,最后进入setup_irq(irq, action)设置irq_ desc[irq]->action  1.2我们来看看setup_irq(irq, action irq_desc *desc = irq_desc + irq; //根据中断号找到irq_ desc[irq] ... ... ()是注册中断,同样的卸载中断的函数是free_irq() free_irq()也位于kernel/irq/ manage .c,函数原型如下: free_irq(unsigned int irq, void

    3.7K90发布于 2018-01-03
  • 来自专栏技术杂记

    ARM(十二).ADC with IRQ4

    Interrupt mode control INTMSK EQU 0x4a000008 ;Interrupt mask control PRIORITY EQU 0x4a00000c ;IRQ SUB_STACK_SIZE EQU 128 ;定义变量子栈大小 STACK_BASE EQU (0x00001000) ;定义栈的基址 IRQStack_BASE EQU STACK_BASE ;定义IRQ unsigned *)0x4a000008) //Interrupt mask control #define rPRIORITY (*(volatile unsigned *)0x4a00000c) //IRQ

    49520发布于 2021-09-01
  • 来自专栏技术杂记

    ARM(十四).WatchDog with IRQ3

    unsigned *)0x4a000008) //Interrupt mask control #define rPRIORITY (*(volatile unsigned *)0x4a00000c) //IRQ _ISR_STARTADDRESS+0x10)) #define pISR_RESERVED (*(unsigned *)(_ISR_STARTADDRESS+0x14)) #define pISR_IRQ

    68450发布于 2021-08-12
领券