写完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键,就能实现计数功能。
上一篇:Tiny210裸机之按键中断
下一篇:Tiny210裸机之LCD显示图片
推荐阅读
史海拾趣
作为一家电子产品制造企业,Epistar始终关注环保和可持续发展问题。公司积极采用环保材料和生产工艺减少污染排放和能源消耗;同时,Epistar还加强了对废旧产品的回收和处理工作以减少对环境的负面影响。这些努力不仅提升了公司的社会形象也增强了公司的市场竞争力。
随着电子行业的快速发展,Able Systems公司不断引进新技术,对产品进行升级改进。公司在打印机的设计和制造方面结合独家采购的领先技术,确保产品能够满足最苛刻的要求。这种对技术创新的执着追求,使得Able Systems的产品在行业中始终保持领先地位。
发展历程:2007年,公司率先在业内引入了ERP系统,实现了企业高效智能的生产管理、财务管理、物流管理和决策管理。这一创新举措极大地提升了客户订单的响应速度,使德索五金电子步入了数字化信息时代。
成果与影响:ERP系统的引入使德索五金电子的管理水平迈上了新的台阶,为企业的快速发展提供了有力支持。
近年来,随着数字化转型浪潮的兴起,蜂鸟无线也积极投身于这一进程。公司利用自身在通信和物联网领域的技术优势,为制造业、能源、交通等多个行业提供了一站式智能数据服务平台。通过构建工业互联网大数据使能平台,蜂鸟无线帮助企业实现了生产经营数据的汇聚、分析和可视化,助力企业实现智能化管理运营。这一转型不仅提升了蜂鸟无线的服务能力,还为公司带来了新的增长点,推动了公司的持续健康发展。
随着军事现代化的推进,DLA意识到整合与优化供应链的重要性。于是,DLA开始着手整合各个军事部门的后勤系统,实现资源的集中管理和统一调配。通过引入先进的供应链管理技术,DLA大幅提高了物资采购、存储、运输和分发的效率,确保了美军在全球范围内的作战需求得到及时、准确的满足。
我用FPGA控制网卡芯片做一个数据收发的东西,但是怎样让FPGA开始发送数据呢?具体就是, FPGA接收到命令就开始发数据,接收到数据就存储,可是怎样判断接到的是命令还是数据呢?… 查看全部问答∨ |
1.长假,预祝大家双节快乐 2.大家【晒电路】,才是真的【晒电路】,晒 完我就回家了 3.正题 在许多应用场合,需要随时通过调整马达的转速实现调整风量、流量等目的。过去通常采用通过调整串入马达的电感量来实现对马达转速的控制,这种方法存在 ...… 查看全部问答∨ |
WINCE5.0(操作系统已添加 MFC 组件) VS2005 MFC 动态链接 利用向导制作了一个最简单的对话框程序,复制到开发板中运行,结果提示: 缺少库,可是在操作系统中已经添加了 MFC 组件,难道 VS2005 MFC 程序需要自己的 MFC 库吗?… 查看全部问答∨ |
1.精通C++或C语言,能熟练使用EVC或VS2005等工具开发应用软件. 2.有多媒体,GPRS网络应用开发经验者优先. 3.有游戏软件编程经验着优先. 4.熟悉windows ce 系统优先. 5.有较强的团队合作精神,富有责任心. 6.待遇面议. 请把您的简历和作品发送到s ...… 查看全部问答∨ |
从DSP56F803BU80E 中读取的程序,保存为BIN或S19格式,现在希望修改其中的一些字符型数据,但在Hex编辑器下找不到校验位,修改后再写入芯片就无法使用。恳请会该款DSP开发或能直接修改文件内容的高人出手相助,修改成功愿奉万元酬劳。… 查看全部问答∨ |
怀着对ARM的好奇和学习的冲动参加了这个活动。只会一点点51的我显然是低估了ARM的复杂程度。 因为没有接触过ARM,加上自己擅长的是结构设计。以为只有设计个外壳和内部结构还有面板就可以了。没想到项目只是做个板子就结束了。并不是以搞个成型的 ...… 查看全部问答∨ |