关于S3C6410的中断问题,网上有很多高手已经分析过了,在这里我主要分析S3C6410实现过程,和自己已经编写好的简单程序。
我用的是mini6410 的k1键实现外部中断。
按键初始化:
void Key_Init()
{
rGPNCON|=(1<<1); //将GPN0设置为中断模式
rGPNPUD&=~(1<<0);//上拉电阻
rEINT0CON0|=(3<<0); //下降沿触发
rEINT0MASK&=~(1<<0); //取消屏蔽
rEINT0FLTCON0|=(1<<7); //延时滤波
}
注意:我在这只初始化了一个引脚,即GPNCON0
按键中断程序:
void Key_ISR() __irq //按键中断函数
{
i++;
if(i%2==0)Led_Display(0x0);//在这里用户可添加其他的处理操作
else Led_Display(0xf);
rEINT0PEND|=(1<<0);//写1清除中断
INTC_ClearVectAddr();//这个函数下面我们再介绍
}
/*
清除中断指示,防止干扰下一次中断发生
*/
void INTC_ClearVectAddr(void)
{
rVIC0ADDR = 0x0;
rVIC1ADDR = 0x0;
}
中断初始化函数:
void INTC_Init(void)
{
//关闭所有中断
rVIC0INTENCLEAR = 0xffffffff;
rVIC1INTENCLEAR = 0xffffffff;
//都设置为IRQ
rVIC0INTSELECT = 0x0;
rVIC1INTSELECT = 0x0;
INTC_ClearVectAddr();
}
使能中断函数:
//打开某一个中断
int INTC_Enable(unsigned int intNum)
{
if(intNum > INT_LIMIT)//数值检测
{
return -1;
}
if(intNum<32)//如果是vic0组
{
rVIC0INTENABLE |= (1<
指定中断程序函数:
void INTC_SetIntISR(unsigned int intNum, void (*isr)(void) __irq)
{
if(intNum > INT_LIMIT)//数值检测
{
return ;
}
if(intNum < 32)//如果是vic0组
{
VIC0VECTADDR[intNum] = (unsigned )isr;
}
else//如果是vic1组
{
VIC1VECTADDR[intNum-32] = (unsigned )isr;
}
}
编写main函数:
Led_Init();//led初始化
Led_Display(0x0);//控制led
Key_Init();//按键初始化
INTC_Init();//中断初始化
INTC_Enable(INT_EINT0);//中断使能
INTC_SetIntISR(INT_EINT0,Key_ISR);//指定中断处理函数
while(1);//等待
关键字:ARM 体系架构 S3C6410 外部中断控制
引用地址:
深入理解ARM体系架构S3C6410外部中断控制实例
推荐阅读最新更新时间:2024-03-16 14:53
新一代RISC微处理器ARM11的特点及关键技术
ARM11系列微处理器是ARM公司近年推出的新一代RISC处理器,它是ARM新指令架构——ARMv6的第一代设计实现。 该系列主要有ARM1136J,ARM1156T2和ARM1176JZ三个内核型号,分别针对不同应用领域。 本文将对全新的ARMv6架构进行介绍,并深入分析ARM11处理器的先进特点和关键技术。 ARMv6结构体系 实现新一代微处理器的第一步就是订立一个新的结构体系。这里所说的结构体系只是对处理器行为进行描述,并不包括具体地指定处理器是如何被建造的。结构体系的定义提供了处理器和外界(操作系统,应用程序和调试支持)的接口,从细节上说,处理器结构体系定义了指令集、编程模式和最近的存储器之间的接
[其他]
最小化ARM Cortex-M CPU功耗的方法
1理解Thumb-2 首先,让我们从一个看起来并不明显的起点开始讨论节能技术—指令集。所有Cortex-MCPU都使用Thumb-2指令集,它融合了32位ARM指令集和16位Thumb指令集,并且为原始性能和整体代码大小提供了灵活的解决方案。在Cortex-M内核上一个典型的Thumb-2应用程序与完全采用ARM指令完成的相同功能应用程序相比,代码大小减小到25%之内,而执行效率达到90%(当针对运行时间进行优化后)。 Thumb-2中包含了许多功能强大的指令,能够有效减少基础运算所需的时钟周期数。减少时钟周期数意味着现在你能够以更少的CPU功耗完成手头的工作。例如,假设要完成一个16位乘法运算(如图1所示)。在一个8位805
[单片机]
arm异常与中断
1 swi中断的处理步骤: 1) 进中断时pc- lr, cpsr- spsr, cpsr_mode置为特权模式,均由硬件完成。 2)注册中断向量表由软件完成,可以用B指令,也可以用ldr跟dcd表的方式,在中断向量处放置一条跳转指令,跳到中断处理handler处。 3)一级中断处理程序主要目的是根据arm或者thumb状态获取swi号,期间注意保存寄存器和返回。 4)二级中断处理程序可以用C或者汇编,主要是一个分支结构,根据中断号做相应的事,可以用函数指针方式实现。 -----应用程序中使用软中断时,可以使用__swi (仅armcc)关键字声明软中断函数,调用时自动获取中断号。 2 基于s3c2410的irq中断 先上
[单片机]
Arm架构之Arm内核解析
Arm 架构已经主导了当今嵌入式处理和计算市场,但在过去的几十年里,Arm 架构却走过了漫长的道路。从20世纪80年代开始,它起初是作为家用电脑处理器,然后在20世纪90年代成为手机芯片的基础。如今,在几乎所有技术细分市场,Arm都是一个强有力的竞争者。许多人认为,Arm 架构已成为 32 位或 64 位处理器的首选。由于这种广泛应用,现在已经有成千上万种基于Arm架构的变体。了解这些内核彼此之间的不同是做出选择决策的重要一环。 早在 2004 年,最初的 Cortex 家族就使 Arm架构分化为三个内核产品组,每个产品组都针对不同类型的应用。最早集成到芯片的是Cortex-M,它已成为基于Arm微控制器(MCU)生态系
[单片机]
传拟收购Arm
知情人士称,除了全球最大的芯片代工制造商台积电,以及全球最大的电子代工厂商富士康,软银还接触了苹果公司、高通和NV等。 富士康 (2317)公布7月营收4,033.26亿元,重回4千亿元水准,月增11.87%,年增1.34%,创历年同期新高,亦为今(2020)年以来新高,显示营运已逐步摆脱新冠肺炎疫情冲击;累计今年前7月合并营收为2兆4,614.43亿元,年减5.9%,降幅逐渐缩小。 富士康董事长刘扬伟曾表示,第三季初步看来比预期好。而鸿海将于下周三(12日)召开法说会,届时可望进一步释出对下半年产业看法及营运展望。业界则预估,第三季为传统旺季,随着苹果等客户将陆续发布新机,富士康营运可望一路升温至年底。 富士康指出,就7月四大类
[机器人]
arm9(TQ2440)移植小结---环境搭建
从拿到板子开始移植至今已有一个月了,现在回头小结一下,以备后用吧。 第一阶段:搭建环境(vmware + redhat linux 9) 1.安装虚拟机没有什么问题。下面是在虚拟机上安装linux的过程: 虚拟机的设置按照默认也差不多了,内存给了256M,硬盘给了8G,从后面的使用来看, 硬盘还是越大越好,这个东东随时间的增长越来越大。 linux安装完成后就开始安装虚拟机工具(vmware Tools),这个东西安装的很不顺利, 具体方法前面一篇转载的已经说得很完整了,但是至今有个问题没有解决----安装并没有完全成功。 从效果来看,一个是分
[单片机]
九、ARM 汇编与 C 的混合编程
9.1 ARM 汇编与 C 的混合编程 9.1.1 内嵌汇编 __asm __asm( 指令 ) 例如关闭/打开总中断开关 CPSR __asm //使用 C 中变量名代替寄存器 { MOV var,x ADD y,var,x/y } 内联汇编语言中的寄存器名被编译器视为 C 或 C++语言中的变量,所以内联汇编中出现的寄存器名不一定和同名的物理寄存器相对应。 这些寄存器名在使用前必须声明, 否则编译器将提示警告信息 9.1.2 汇编访问 C 中的全局变量 【1】用 IMPORT 声明全局变量 【2】利用 LDR 得到其地址 AREA globals, CODE, READONLY EXPORT asma
[单片机]
基于ARM处理器的IAP功能实现配变监测终端程序远程更新的
1 LPC2378芯片介绍 LPC2378是一款基于ARM7TDMI-S的32位处理器。它具有512 KB的片内Flash程序存储器、32 KB的静态RAM(SRAM),以及在系统编程(In-System Programming,ISP)和在应用编程(In-Application Program-ming,IAP)功能。由于程序对内存需求比较大,所以外扩了一片64 KB的SRAM。 通常,程序的下载可通过3种方式实现: ①采用嵌入式实时操作系统。该方法加大了系统对存储容量的要求,增加了硬件和软件成本。 ②采用增加外控制烧录系统的方法。该方法同样增加了系统的复杂度和成本,且降低了系统本身的可靠性。 ③采用IAP技术。该方法充分利用芯片
[单片机]