单片机学习小组
直播中

哈哈哈

10年用户 785经验值
擅长:可编程逻辑
私信 关注

4412arm中断的知识点汇总,绝对实用

4412arm中断的知识点汇总,绝对实用

回帖(1)

邹媛媛

2022-2-7 11:33:31
中断

4412中断的核心图(面试一般会问)


中断过程



  • 中断初始化
    a. 管脚初始化
    b. 中断控制器初始化
  • 中断向量表
    a.中断发生后,硬件自动跳转
    b. 现场保护
    c. 调用中断处理
  • 中断处理
    a. 根据中断号做相应处理
    b. 清中断
    c. 现场恢复


中断源

Exynos4412中断控制器包含160个中断控制源,
分三类分别是:
1.用于CPU之间通信的SGI
(Software Generated Interrupt),
2.专用于特定CPU核的PPI
(Private Peripheral Interrupt)
3.被多个CPU核共享的SPI
(Shared Peripheral Interrupt)

中断控制器

中断源分发给不同的CPU.
每个中断都有一个唯一对应的ID号,当中断发生时,该ID号会写入一个特定的寄存器。
中断处理程序可以读取该寄存器来决定该调用哪个具体的中断处理函数。


中断初始化
int main(void)
{
/*初始化中断
一. 通过威廉希尔官方网站 图找到K3 的中断管脚
二. 看芯片手册找到对应的特殊功能寄存器
1.  设置管脚控制模块(GPIO):              外*/
    GPX1.GPX1CON = (GPX1.GPX1CON & ~(0xF << 8)) | (0xF << 8);   // 设置管脚为中断模式   
    EXT_INT41_CON = (EXT_INT41_CON & ~(0x7 << 8)) | 0x2 << 8; //设置中断触发方式为下降沿
    EXT_INT41_MASK = (EXT_INT41_MASK & ~(0x1 << 2)); //管脚中断使能(一关)
    /*2.  设置功能模块(中断控制模块 GIC):    内*/
    ICDISER.ICDISER1 |= (0x1 << 26); //使能对应中断(二关)
    ICDIPTR.ICDIPTR14 = 0x01010101;  //SPI25  SPI26  interrupts are sent to processor 0                      ICDDCR = 1;          //分发器中断使能 (三关)
    CPU0.ICCPMR = 0xFF;  //设置CPU的中断优先级门限值,当前为最低,所有的中断都可以处理     
    CPU0.ICCICR |= 0x1;  //CPU接口中断使能(四关)


中断向量表
_start: b       start_code
        ldr     pc, _undefined_instruction
ldr     pc, _software_interrupt
ldr     pc, _prefetch_abort
ldr     pc, _data_abort
ldr     pc, _not_used
ldr     pc, _irq
ldr     pc, _fiq
  _undefined_instruction: .word undefined_instruction
  _software_interrupt:    .word
software_interrupt
_prefetch_abort:        .word prefetch_abort
  _data_abort:            .word data_abort
  _not_used:              .word not_used
  _irq:                   .word irq_handler
  _fiq:                   .word fiq
irq_handler:
        sub  lr,lr,#4
        stmfd sp!,{r0-r12,lr}  @保护现场
        bl        do_irq
        ldmfd sp!,{r0-r12,pc}^ @恢复现场


举报

更多回帖

发帖
×
20
完善资料,
赚取积分