历史上的今天
返回首页

历史上的今天

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

正在发生

2018年10月13日 | S3C2440、S3C6410、S5PV210中断解析

2018-10-13 来源:eefocus

写完S5PV210的按键中断程序后,我才知道"6410只是一个过渡产品"确实是正确的,为什么这样说呢?下面我就给大家进行详细的阐述:

中断处理过程等等我就不讲了,一期视频里面已经讲得非常详细了,建议大家在学习本章前,把2440和6410的关于中断的视频再看一次。接下来,我就直接对比他们吧:

(1).对于2440:

中断向量只出现在start.s开始部分,类容如下:

.globl _start

_start:    b       reset

    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

也就是说,中断向量的入口地址是固定的!!

(2).对于6410:

中断向量不仅出现在start.s开始部分,类容如下:

.globl _start

_start:    b       reset

    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

还引入了向量地址寄存器(即VICxADDRESS),它会进一步存储中断处理函数的入口地址,详细类容,请大家学习一期的6410的视频的相关章节。

(注意:关于6410的讲述可能有问题,因为我没有6410开发板,无法验证,仅供参考)

(3).对于S5PV210:

       只说一说6410只是一个过渡产品,就中断角度而言,是因为在S5PV210中,中断向量舍弃了start.s开始的部分(因为从某种角度来讲,S5PV210上电后,不在是从0地址开始执行了,大家可以看下学习日记(2)中介绍的S5PV210的启动流程),而只保留了向量地址寄存器(即VICxADDRESS)部分,而该寄存器的功能和6410的一样。

问:既然S5PV210的start.s中不再有中断向量入口地址,那么S5PV210是怎么处理中断的呢?

答:以按键中断为例子,当中断发生时,PC不再是跳到0x00000018地址处,而是去访问向量地址寄存器(即VICxADDRESS),在该寄存器里面读出一个地址(即可以认为是我们的中断处理函数的地址),然后进一步跳到该地址处去执行。其他的过程和2440的处理过程一样(比如模式切换等等)

      接下来我一个具体的按键中断为例子(实现按K4,计数器加1,按K5,计数器减1的功能),代码放在了"Tiny210学习日记_代码"目录下了,名为"12_key_irq":

一上来,就写start.s,和2440的几乎无差别(不用写中断向量和关看门狗),需要初始化时钟,初始化nand,初始化内存,初始化需要模式的栈(用户模式,中断模式)等等操作,当然也会初始化中断,类容如下:

void irq_init(void)

{

    // 设置GPH2_3(K4),GPH3_0(K5)用于中断 

    GPH2CON |= 0xf<<12;

    GPH3CON |= 0xf<<0;

    // 设置触发方式为下降沿触发 

    EXT_INT_2_CON |= 0x2<<12;

    EXT_INT_3_CON |= 0x2<<0;

    // 使能中断(GPIO里面的) 

    EXT_INT_2_MASK &= ~(1<<3);

    EXT_INT_3_MASK &= ~(1<<0);

    // 设置为IRQ中断 

    VIC0INTSELECT &= ~(1<<16);

    // 使能中断(中断控制器里面的) 

    VIC0INTENABLE |= 1<<16;

    // 设置中断向量 

    VIC0VECTADDR16 = (int)key_IRQ; 

}

注意:

当中断发生时,VIC0VECTADDR16中的值(即中断处理函数的地址)会被自动的复制给向量地址寄存器(即VICxADDRESS),然后当中断发生时,就会访问向量地址寄存器(即VICxADDRESS),从而找到key_IRQ中断处理函数。(这些在6410视频里面有讲解)

问:以前2440在中断来时,我们会计算返回地址,保护现场等操作,难道S5PV210就不用了吗?

答:答案是否定的,S5PV210一样是要做的,而且一个不能够少,过程如下(这部分程序写在start.s中):

.global key_IRQ

key_IRQ:                         // 该函数就是在中断初始化中,VIC0VECTADDR16指向的函数 

    sub lr, lr, #4                // 1.计算返回地址 

    stmdb sp!, {r0-r12, lr} // 2.保护现场 

    // 3. 处理异常 

    bl do_irq

    

    // 4. 恢复现场 

    ldmia sp!, {r0-r12, pc}^    // ^表示把spsr恢复到cpsr 

最终,经过上面的处理后,又和我们的2440的中断函数完全一样了,因此我们就在do_irq函数中清中断,分辨中断,执行处理等操作,该部分程序中是这样做的,如下:

void do_irq(void)

{

    // 清中断 

    EXT_INT_2_PEND |= 1<<3;

    EXT_INT_3_PEND |= 1<<0;

    // 清中断向量 

    VIC0ADDRESS = 0;

    if(!(GPH2DAT & (1<<3)))      // 如果K4被按下 

    {

        wy_printf("counter(k4) : %d \n",i++); // 计数器加1 

    }

    if(!(GPH3DAT & (1<<0)))      // 如果K4被按下 

    {

        wy_printf("counter(K5) : %d \n",i--);// 计数器减1 

    }

}

注意:

1.参考代码放在了"Tiny210学习日记_代码"目录下了,名为"12_key_irq"。

2.测试方法,当终端有显示后,直接按开发板上面的K4,K5键,就能实现计数功能。


推荐阅读

史海拾趣

Compex Corporation公司的发展小趣事

为了进一步扩大市场份额,Compex Corporation开始实施全球化战略。公司积极开拓国际市场,与全球多个国家的客户建立了合作关系。同时,公司还在海外设立了生产基地和研发中心,以便更好地服务当地市场。这一战略的实施使得公司的业务范围不断扩大,国际影响力也逐渐增强。

思博科技(Cybermax)公司的发展小趣事

随着市场竞争的加剧,思博科技意识到只有不断创新才能在市场中立足。于是,公司加大了研发投入,不断推出具有创新性的产品。其中,一款名为“MaxPower”的高效能电源芯片在市场上引起了广泛关注。这款芯片不仅性能卓越,而且具有极高的能效比,为客户节省了大量能源成本。这一创新产品的成功推出,使思博科技在行业中树立了良好的口碑。

Advanced Energy公司的发展小趣事

在发展过程中,AE公司不断突破技术瓶颈,实现了多项重要技术的创新。这些技术突破不仅提升了公司产品的性能和质量,也推动了整个电子行业的发展。随着技术的不断进步,AE公司开始将业务拓展至全球市场。通过与各国客户的合作与交流,AE公司不断了解市场需求,优化产品设计,为全球客户提供更加优质的电源解决方案。

American Technical Ceramics (ATC)公司的发展小趣事

AE公司一直将创新作为企业发展的核心动力。公司不断投入研发资源,推动电源技术的持续创新。同时,AE公司也积极与各大电子企业建立合作伙伴关系,共同推动电子行业的发展。通过与合作伙伴的紧密合作,AE公司不仅获得了更多的市场机会,也提升了自身的技术水平和创新能力。

Highland Electronics Co Ltd公司的发展小趣事

High Tech Chips Inc深知人才是企业发展的核心竞争力。因此,公司一直将人才战略放在企业发展的重要位置。公司不仅吸引了大量来自国内外顶尖高校的优秀人才加盟,还建立了完善的人才培养体系和激励机制。通过举办技术交流会、设立创新基金等方式激发员工的创新潜能和工作热情。这些举措为公司的发展奠定了坚实的人才基础和技术储备。

启攀微电子(Chiphomer)公司的发展小趣事

在知识产权保护方面,启攀微电子高度重视自主创新能力的培养和提升。公司成立了专门的知识产权保护团队,负责申请和管理公司的专利和集成电路布图设计专有权。截至目前,公司累计申请专利已达26项,集成电路布图设计专有权54项。这些知识产权的取得不仅保护了公司的技术成果和市场地位,也为公司的持续创新提供了有力的支持。

问答坊 | AI 解惑

GSM基站的优化建设[推荐]

引用《移动在线》 GSM数字移动通信发展非常迅速,从早期规划的大区制,到后来的小区制,直到现在的微蜂窝、微微蜂窝,相对应的天线从早期架设在屋面铁塔上,到后来天线降到屋面上,直到现在要把天线设置在屋面下的外墙侧面上。所有的这些变化都说 ...…

查看全部问答>

LM3S 系列单片机休眠与深度休眠应用笔记(二)

1.4 深度睡眠模式设置步骤 处理通过调用WFI 指令即可进入睡眠模式,但要进入深度睡眠实现最低的功耗需要正确配置,其步骤如下: 1. 使能ACG 自动时钟门控。这样睡眠模式和深度睡眠模式的外设时钟可以单独控制。 2. 配置寄存器DCGC0、 DCGC1 和DC ...…

查看全部问答>

高分求一源码

哪位哥们有sirf atlasIII的BSP呀?,发一份给我好吗?我的QQ是648433648,邮箱:sunboyljp@163.com,不弟不胜感谢!…

查看全部问答>

wince怎么编译这么慢

我用WINCE60的platform builder去编译一个IMAGE,每次都很慢,。。。。…

查看全部问答>

cadence16.2学习.pdf

很不错的资料 ,希望对大家有所帮助…

查看全部问答>

求教数据存储问题

MSP430F449中我想把一个整形的数A存入某地方 掉电也不丢失! 作为以后程序运行的参数。 应该是放在FLASH里面吧?或者建议是在哪儿? 怎么写和读? 应该读写各一句话就能搞定的吧?不是例子里面那么复杂!! 求给个例子或者指个方向 谢谢 ...…

查看全部问答>

请问广州哪里有零售漆包线、绝缘纸和绝缘漆的地方??

本帖最后由 paulhyde 于 2014-9-15 09:00 编辑 请问广州哪里有零售漆包线、绝缘纸和绝缘漆的地方?? 昨天下午走了一下午,传说中有这些东西的解放中,都没看见有卖忘各位朋友指出哪里有得买  …

查看全部问答>

在同一空间如果存在多个ZigBee网络,终端设备如何辨别并加入属于自己的网络?

请斑竹指教,谢谢!   [ 本帖最后由 lvhoujun 于 2011-9-19 22:52 编辑 ]…

查看全部问答>

关于C2000芯片的FLASH锁死----以及解决办法

FLASH锁死了这是为什么,有没有办法解锁。为什么会有类似下面这几种报错: Read status value 0x0001 from symbol PRG_status(24x系列) ADC Calibration not complete, check if device is unlocked and recalibrate.(2833x系列)   答:FL ...…

查看全部问答>

关于施密特触发器的直流信号处理

想问一下各位大侠,施密特触发器对于直流信号是怎么处理的?(我仿真过,发现如果输入一个电压介于两个门限电压之间,那输出电压和输入电压是成比例的,谁能告诉我为什么啊?)…

查看全部问答>