历史上的今天
返回首页

历史上的今天

今天是:2024年12月10日(星期二)

正在发生

2021年12月10日 | Exynos4412裸机开发——中断处理

2021-12-10 来源:eefocus

以KEY2控制LED3亮灭为例:

一、轮询方式

【0】检测按键k2,按键k2按下一次,灯LED2闪一次。

【1】查看原理图,连接引脚和控制逻辑
(1)按键k2 连接在GPX1_1引脚
(2)控制逻辑
       k2 按下  ---- K2闭合 ---- GPX1_1 低电压
       k2 常态  ---- K2打开 ---- GPX1_1 高电压

【2】查看相应的芯片手册

    【2-1】循环检测GPX1_1引脚输入的电平,为低电压时,按键按下

        (1)配置GPX1_1引脚功能为输入,设置内部上拉下拉禁止。
                  GPX1.CON = GPX1.CON &(~(0xf<<4)) ;

                  GPX1.PUD = GPX1.PUD & ~(0x3 << 2);
  (2)循环检测:


  1. while(1)  

  2. {  

  3.     if(!(GPX1.DAT & (0x1<<1)))  // 返回为真,按键按下  

  4.     {      

  5.         msdelay(10);  

  6.         if(!(GPX1.DAT & (0x1<<1))) //二次检测,去抖  

  7.         {  

  8.             GPX2.DAT |= 0x1 << 7;  //Turn on LED2  

  9.             mydelay_ms(500);  

  10.             GPX2.DAT &= ~(0x1<<7);  //Turn off LED2  

  11.             mydelay_ms(500);  

  12.         

  13.             while(!(GPX1.DAT & (0x1<<1)));  

  14.         }  

  15.     }  

  16. }  

这种轮询方式始终占着CPU,不利于操作。

 

二、中断方式

将K2按下时,GPX1_1引脚获得的电平,作为异常事件。使能异常处理,k2每按下一次,响应一次异常处理。SPI 传递流程如下示:

注:

      Exynos4412中断控制器包括160个中断控制源,这些中断源来自软中断(SGI),私有外部中断(PPI),公共外部中断(SPI)。

      Exynos4412采用GIC中断控制器,主要是因为Contex-A9 是多核处理器,GIC(Generic Interrupt Controller)通用中断控制器用来选择使用哪个CPU接口,具体主要有两个功能:

1)分配器:设置一个开关,是否接收外部中断源;为该中断源选择CPU接口;

2)CPU接口:设置一个开发,是否接受该中断源请求;

 

具体实现如下:

1、外设一级 ---设置 GPIO控制器

1-- 将GPX1_1引脚的上拉和下拉禁止

        GPX1PUD[3:2]= 0b00;

2 -- 将GPX1_1引脚功能设置为中断功能 WAKEUP_INT1[1] --- EXT_INT41[1]

        GPX1CON[7:4] = 0xf

3 -- EXT_INT41CON  配置触发电平

       当前配置成下降沿触发:

       EXT_INT41CON[6:4] = 0x2

4 -- EXT_INT41_FLTCON0 配置中断引脚滤波

       默认就是打开的,不需要配置

5 -- EXT_INT41_MASK 中断使能寄存器

      使能INT41[1]

      EXT_INT41_MASK[1] = 0b0

6 -- EXT_INT41_PEND 中断状态寄存器
       当GPX1_1引脚接收到中断信号,中断发生,中断状态寄存器EXT_INT41_PEND 相应位会自动置1
        注意:中断处理完成的时候,需要清除相应状态位。置1清0.
        EXT_INT41_PEND[1] =0b1 

 

2、中断控制器

1-- 找到外设中断名称和GIC中断控制器对应的名称

    查看芯片手册(本例:Exynos_4412 -- 9.2表)
       WAKEUP_INT1[1] --- EXT_INT41[1] --- INT[9] --- SPI[25]/ID[57]

      其对应INT[9],中断ID为57,这是非常重要的,在后面的寄存器设置中起很大作用;

 

下面是外设与中断控制器处理具体流程:

 

2 -- GIC使能

       ICDDCR =1;

       使能分配器。

3 -- 使能相应中断到分配器

      ICDISER.ICDISER1 |= (0x1 << 25);    //57/32 =1...25 取整数(那个寄存器) 和余数(哪位)

      ICDISER用于使能相应中断到分配器,一个bit控制一个中断源,一个ICDISER可以控制32个中断源,这里INT[9] 对应的中断ID为57,所以在ICDSER1中进行设置,57/32 =1余25,所以这里在ICDISER1第25位置一。

 

4 -- 选择CPU接口

      设置SPI[25]/ID[57]由那个cpu处理,当前设置为cpu0的irq中断

      ICDIPTR.ICDIPTR14 |= 0x01<<8; //SPI25  interrupts are sent to processor 0   //57/4 = 14..1 14号寄存器的[15:8]

      ICDIPTR寄存器每8个bit 控制一个中断源

 

5 -- 全局使能cpu0中断处理

       CPU0.ICCICR |= 0x1;

       使能中断到CPU。

 

6 -- 优先级屏蔽寄存器,设置cpu0能处理所有的中断。

      CPU0.ICCPMR = 0xFF;

                          

3、ARM内核(cpu0)

       前面两步设置好,就可以等待中断的发生了,当中断发生时,ARM内核的处理过程如下:

 

 1-- 四大步三小步 --- 硬件

    

      (1)拷贝 CPSR 到 SPSR_
  (2)设置适当的 CPSR 位:                                
    (2-1)--改变处理器状态进入 ARM 态
       (2-2)--改变处理器模式进入相应的异常模式
       (2-3)--设置中断禁止位禁止相应中断 (如果需要)
  (3)保存返回地址到 LR_
  (4)设置 PC 为相应的异常向量
          

2 -- 中断服务程序 --- start.S 汇编

  1. .text  

  2. .global _start  

  3. _start:  

  4.         b       reset  

  5.         ldr     pc,_undefined_instruction  

  6.         ldr     pc,_software_interrupt  

  7.         ldr     pc,_prefetch_abort  

  8.         ldr     pc,_data_abort  

  9.         ldr     pc,_not_used  

  10.         ldr     pc,_irq  

  11.         ldr     pc,_fiq  

  12.   

  13. _undefined_instruction: .word  _undefined_instruction  

  14. _software_interrupt:    .word  _software_interrupt  

  15. _prefetch_abort:        .word  _prefetch_abort  

  16. _data_abort:            .word  _data_abort  

  17. _not_used:              .word  _not_used  

  18. _irq:                   .word  irq_handler  

  19. _fiq:                   .word  _fiq  

  20.   

  21.   

  22. reset:  

  23.   

  24.     ldr r0,=0x40008000  

  25.     mcr p15,0,r0,c12,c0,0       @ Vector Base Address Register  

  26.   

  27.   

  28. init_stack:  

  29.         ldr     r0,stacktop         /*get stack top pointer*/  

  30.   

  31.     /********svc mode stack********/  

  32.         mov     sp,r0  

  33.         sub     r0,#128*4          /*512 byte  for irq mode of stack*/  

  34.     /****irq mode stack**/  

  35.         msr     cpsr,#0xd2  

  36.         mov     sp,r0  

  37.         sub     r0,#128*4          /*512 byte  for irq mode of stack*/  

  38.     /***fiq mode stack***/  

  39.         msr     cpsr,#0xd1  

  40.         mov     sp,r0  

  41.         sub     r0,#0  

  42.     /***abort mode stack***/  

  43.         msr     cpsr,#0xd7  

  44.         mov     sp,r0  

  45.         sub     r0,#0  

  46.     /***undefine mode stack***/  

  47.         msr     cpsr,#0xdb  

  48.         mov     sp,r0  

  49.         sub     r0,#0  

  50.    /*** sys mode and usr mode stack ***/  

  51.         msr     cpsr,#0x10  

  52.         mov     sp,r0             /*1024 byte  for user mode of stack*/  

  53.   

  54.         b       main  

推荐阅读

史海拾趣

Gaomi Xinghe Electronics公司的发展小趣事

背景:在电子产品市场竞争日益激烈的背景下,Galaxy深知技术创新和品质提升的重要性。为了进一步提升产品性能,公司决定寻求与行业顶尖厂商的合作。

行动:Galaxy与瑞士著名散热器厂商“Arctic Cooling”建立了战略合作伙伴关系,共同推出了备受瞩目的影驰GeForce6系列产品。这款产品在散热性能上实现了重大突破,为用户带来了更加稳定、高效的使用体验。

成果:凭借出色的性能和口碑,影驰GeForce6系列产品迅速在市场上走红,不仅巩固了Galaxy在显卡市场的领先地位,还极大地提升了公司在行业内的影响力。

倍思特(BEST)公司的发展小趣事

背景:在21世纪初,Galaxy公司凭借其在电子产品领域的深厚积累,决定进一步拓展国际市场。通过详细的市场调研,公司发现欧洲市场潜力巨大,特别是对高质量电子产品的需求日益增长。

行动:于是,Galaxy在波兰Cracow成立了欧洲分公司,地处欧洲中部,这一地理位置使其能够很好地覆盖整个欧洲大陆,包括东部和西部的国家。该分公司不仅作为销售中心,还承担起返修件回收处理的重任,确保客户能够享受到无时区差别的销售和维修服务。

成果:这一战略部署显著提升了Galaxy在欧洲市场的知名度和竞争力,市场份额逐年攀升,为公司的全球化进程奠定了坚实基础。

Bliley Technologies Inc公司的发展小趣事

二战期间,Bliley迎来了其历史上的一个重要时刻。由于战争对通信设备的巨大需求,Bliley的产品成为军事通信领域的关键组件。政府的大量采购合同使得Bliley的销售额直线上升,员工数量也急剧增加。为了满足战争期间的巨大需求,Bliley不得不扩建工厂,并实行昼夜不停的生产制度。这段时期,Bliley不仅在军事通信领域取得了显著成就,同时也为其在战后的发展奠定了坚实基础。

Esterline Technologies Corporation公司的发展小趣事

Bliley Technologies Inc.的历史可以追溯到1930年,当时它作为Bliley压电公司成立,专注于为业余无线电市场生产石英晶体。石英晶体的精确频率控制特性使其成为无线电通信领域的理想选择。随着技术的不断进步和市场需求的扩大,Bliley很快发现其产品的潜力远不止于此。到了20世纪30年代中期,Bliley的客户和产品范围迅速扩展到新兴的军事和商业通信领域,公司也因此更名为Bliley Electric Company。这一转变标志着Bliley从一家小型压电公司成长为晶振行业的佼佼者。

上海超致公司的发展小趣事

随着技术的不断积累和创新,上海超致在功率半导体领域取得了重大突破。公司成功推出了全球首款量产SJ-IGBT产品,这一产品具有电流密度大、综合器件性能优的特点,在硅基成本下实现了性能的显著提升。此外,上海超致还不断拓宽产品线,产品广泛应用于太阳能微逆变器、车载OBC、充电桩、UPS电源等多个领域。这些产品的推出不仅满足了市场的需求,也进一步提升了公司的市场竞争力。

ABCircuits公司的发展小趣事

随着公司的不断发展,ABCircuits意识到单打独斗难以应对日益激烈的市场竞争。于是,公司开始积极寻求与其他企业的战略合作。通过与上下游企业的紧密合作,ABCircuits不仅获得了稳定的供应链支持,还成功打开了国际市场的大门。这些合作不仅加速了公司的扩张步伐,也提升了其品牌影响力和市场竞争力。

问答坊 | AI 解惑

LED灯具致命缺陷问题-浪涌电压

本帖最后由 jameswangsynnex 于 2015-3-3 19:56 编辑 现象描述:最常见的问题,就是做一个工程,几百台灯,经常会无缘无故的损坏,常见的就象一条街上装的LED路灯,时不时不亮,经常坏,修了又坏,坏了再修.还有LED日光灯,很多用非隔离电源,量产时经常发现 ...…

查看全部问答>

紧急求助:代码有个错误 与语音识别的方案

在做一个毕业设计,遇到几个问题,请高手帮助,谢谢! 1、目前的程序主要是用SPCE061实现下语音播放,不论怎么修改都一直有个错误: Error L0080: The external symbol \"T_SACM_S480_SpeechTable\" has not a public definition. 请高手帮忙啊 ...…

查看全部问答>

招聘WinCE嵌入式工程师,PCB硬件工程师

招聘WinCE嵌入式工程师 职位:WinCE嵌入式工程师 岗位要求:   1、本科及以上,电子,通讯,计算机相关专业;   2、1年以上工作经验;   3、熟悉ARM体系或MIPS体系;   4、熟悉wince等操作系统  ...…

查看全部问答>

关于arm jflash的问题

1、jflash是什么?给个定义说明; 2、jflash有什么作用?能详细介绍吗? 3、jflash主要跟那些硬件有关?有什么样的关系? 谢谢…

查看全部问答>

FPGA芯片RAM分割问题(在线等)

小弟在用xilinx 的XC3S400芯片做LDPC,需要很多个小块RAM(30个字节左右)用来存储数据。而XC3S400利用IP核最多只能生成16个block RAM(与大小无关),而我又不能用Distributed RAM,因为需要的小块RAM很多,会占用很多逻辑资源。      ...…

查看全部问答>

求助高手

                                 小弟用到st72f561做毕业设计,是关于can总线的汽车车门控制系统。那位高手可以指点一下。我的qq278387881…

查看全部问答>

请教版主,STM32运行途中,可不可以修改PLL?

版主: 你好! 请教STM32运行路途,可不可以修改PLL?  比方开机时主频先设置为72MHz,然后再修改成36MHz?…

查看全部问答>

2007年国赛高频方向题目解析——无识别线装置

本帖最后由 paulhyde 于 2014-9-15 03:33 编辑 终于把07年高频题目解析完成了,从上一篇写完就开始写这篇了, 最近两个月项目比较紧,所以每天往前只能推进一点点。 基本都是抽午饭后的时间写的,语言方面没有刻意的组织,写的很随便,请大家见 ...…

查看全部问答>

关于ADXL345在硬件设计的问题

请教大家一个问题,ADXL345在硬件设计和PCB画图时,需要注意哪些问题? \0\0\0eeworldpostqq…

查看全部问答>