s3c6410 的外部中断实现

发布者:RadiantJourney最新更新时间:2016-08-13 来源: eefocus关键字:s3c6410  外部中断 手机看文章 扫描二维码
随时随地手机看文章
6410各个中断寄存器的关系 图
s3c6410 的外部中断实现 - 北极星 - 北极星

 
EINT0CON0  External Interrupt 0(Group0) Configuration Register 0 
设置 外部中断的触发方式(高电平等)
EINT0PEND  External Interrupt 0(Group0) Pending Register  屏蔽前的中断(谁中断,相应位置1)
EINT0MASK  External Interrupt 0(Group0) Mask Register   屏蔽(屏蔽谁,相应位置1)
以上两个是管脚级别(GPIO)的pending和mask寄存器;
下边是中断控制器的pending和mask寄存器
VIC0INTENABLE  Interrupt Enable Register (VIC0)   //相当于mask寄存器
VIC0IRQSTATUS  IRQ Status Register (VIC0)  相当与pending寄存器

程序代码
main.c 
//led
#define GPKCON  (*(volatile unsigned int *)0x7f008800)
#define GPKDAT  (*(volatile unsigned int *)0x7f008808)

//button
#define GPNCON (*(volatile unsigned int *)0x7F008830)
#define GPNDAT  (*(volatile unsigned int *)0x7F008834)

//beep
#define GPFCON  (*(volatile unsigned int *)0x7F0080A0)
#define GPFDAT  (*(volatile unsigned int *)0x7F0080A4)
//
#define EINT0CON0  (*(volatile unsigned int *)0x7F008900)
#define EINT0MASK  (*(volatile unsigned int *)0x7F008920)

#define EINT0PEND  (*(volatile unsigned int *)0x7F008924)

//////interrupt contruller
#define VIC0IRQSTATUS  (*(volatile unsigned int *)0x71200000)
#define VIC0INTENABLE  (*(volatile unsigned int *)0x71200010)


#define VIC0RAWINTR  (*(volatile unsigned int *)0x71200008)
int led_init(void)
{
 //GPK4//
 GPKCON |= 1<<16;
 GPKCON &= ~(1<<17 | 1<<18 | 1<<19);
 //GPK5//
 GPKCON |= 1<<20;
 GPKCON &= ~(1<<21 | 1<<22 | 1<<23);
 //GPK6//
 GPKCON |= 1<<24;
 GPKCON &= ~(1<<25 | 1<<26 | 1<<27 );
 //GPK7//
 GPKCON |= 1<<28;
 GPKCON &= ~(1<<29 | 1<<30 | (unsigned)1<<31);
 return 0;
}
void led_value(int value)
{
 GPKDAT = ~value << 4;
}
void led_on(void)
{
 GPKDAT =0;
}
void led_off(void)
{
 GPKDAT = 0xf0;
}
void delay(void)
{
 int i = 0;
 for(i = 0; i <500000; i++);
}
void led_blink(void)
{
 led_on();
 delay();
 led_off();
 delay();
}
void beep_init(void)
{
 GPFCON |= 1<<28;
 GPFCON &= ~(1<<29);
}
void beep_on(void)
{
 GPFDAT |= 1<<14;
}
void beep_off(void)
{
 GPFDAT &= ~(1<<14);
}
void beep(void)
{
 beep_on();
 delay();
 beep_off();
 delay();
}
void do_irq()
{
 //at start, clear pending bit
 EINT0PEND = 1<<0;
 beep();
 /*
 void (*pf)(void);
 pf = vicoaddress;
 (*pf)();
 */
}
void irq_handler(void);

void test(void)
{
 GPFDAT |= 1<<14;
}
int mymain(void)
{
 int *p;
 int counter = 0;
 led_init();
 
 beep_init();
 //beep();
 //GPFDAT |= 1<<14;
 
 //GPNCON &= ~(1<<0 | 1<<1);
 //111111GPN0[1:0] interrupt
 GPNCON |= 1<<1;
 GPNCON &= ~(1<<0);
 
 //2222 EINT0CON1[2:0] 
 EINT0CON0 &= ~(1<<2);
 EINT0CON0 |= 1<<1;
 
 //33333 EINT0MASK[0]
 EINT0MASK &= ~(1<<0);
 //EINT0MASK |= 1<<0;
 //444444 VIC0INTENABLE
 VIC0INTENABLE |= 1<<0;
 //VIC0INTENABLE &= ~(1<<0);
 //555555
 //VIC0RAWINTR &= ~(1<<0);
 // arm core I_BIT :enable IRQ
 __asm
 {
  mov r0, #0x53
  msr CPSR_cxsf, r0  
 }
 p = (int *)0x18;
 *p = 0xe59ff000;
 p = (int *)0x20;
 *p = (int)irq_handler;
 
 /*
 VIC0VECADDR0 = beep1;
 VIC0VECADDR0 = beep2;
 */
 while(1)
 {
  if(VIC0IRQSTATUS  &(1<<0))
  {
   beep();
  }
  led_value(counter & 0x0f);
  counter++;
  delay();
  //if(GPNDAT & (1<<0))
  // led_on();
  //else
  // led_off();
 }
 return 0;
}

start.s文件

 AREA int, CODE, READONLY
 import mymain
 
 ENTRY 
 ;sp_irq mode 
 mov r0, #0xd2
 msr cpsr_cxsf,r0
 ldr sp, =0x50200000
 
 ;sp_svc mode 
 mov r0, #0xd3
 msr cpsr_cxsf, r0
 ldr sp, =0x50100000
 
 b mymain
 import do_irq
 export irq_handler 
irq_handler
 ;push rets to stack
 stmfd sp!,{r0-r12,lr}   //r0-r12 和lr压栈保护;
 
 ;handler
 bl do_irq
 ;pop stack to regs
 ldmfd sp!, {r0-r12,lr}
 subs pc, lr,#4
  
 END
 

关键字:s3c6410  外部中断 引用地址:s3c6410 的外部中断实现

上一篇:s3c6410 定时器中断的实现
下一篇:s3c6410 s3c2440串口发送接收数据的实现(轮询)及相关寄存器

推荐阅读最新更新时间:2024-03-16 15:04

DM642和CPLD外部中断的寄存器式键盘设计
摘要:介绍了一种采用DM642和CPLD相配合的扩展键盘方法。CPLD管理键盘电路中的芯片逻辑,DM642的外部中断监控按键的状态。简单阐述了键盘的分类,给出系统的硬件电路原理图,在CCS软件中调试程序方法。仿真结果表明,设计可行,达到了预期效果。 关键词:键盘;DM642;CPLD;人机交互 引言 键盘是人机交互模块中必备的输入部分,在目前的嵌入式系统人机接口中通常采用专用的键盘处理芯片ZLG7290设计键盘。由于ZLG7290是一种64位LED显示和64个按键的键盘管理器件,会造成部分LED显示和按键空闲浪费并占用硬件资源比较多,使成本增加。随着DM642性价比的提高,它在图像处理系统和数字媒体系统中的应用越来越广泛,
[嵌入式]
DM642和CPLD<font color='red'>外部中断</font>的寄存器式键盘设计
STM32进不了外部中断的一个可能原因
近期在使用一块STM32的板子的时候,用库函数和外部中断来接收霍尔传感器信号,配置了很久,就是进不去外部中断。 IO口的初始化函数如下: void Hall_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTC时钟 RCC_APB2PeriphClockCmd(RCC_A
[单片机]
STC15单片机外部中断仅上升沿触发的方法
STC15系列单片机的外部中断0(INT0)和外部中断1(INT1)的触发有两种方式,上升沿和下降沿均可触发方式和仅下降沿触发方式。在实际应用中,有时候需要上升沿触发。这时有两种方案可以解决。 1.将触发方式设置成仅下降沿触发。当外部电路产生一个上升沿时,通过硬件电路加一个三极管进行反向变成下降沿。 2.这种方法不需要改变硬件电路。将触发方式设置成上升沿和下降沿均可触发方式。外部中断产生一个上升沿时,进入中断服务函数,这时在中断服务函数里做进一步处理,检测当前INT0的电平状态。如果是高电平,则判断为上升沿。如果是低电平,则判断为是下降沿。 注意(很重要!): 进入中断服务函数后,一定要延时几个毫秒再去做电平检测。因为不管是
[单片机]
s3c2440之外部中断
对s3c2440的硬件操作无非就是配置寄存器,中断也不例外: 需要设置的寄存器: GPGCON :引脚配置寄存器,设置为第二功能,中断引脚; EINTPEND:中断挂起寄存器,当有中断发生且没有被屏蔽,相应位会自动置1,在进入中断服务程序后必须用软件将其相应位清0以免发生错误中断; SRCPND:源挂起寄存器由32位组成,其每一位都涉及一个中断源。如果中断源产生了中断则相应的位被置1并且等待中断服务。此寄存器指示出是哪个中断源正在等待请求服务。 注意:此寄存器不顾INTMAST的屏蔽位,由硬件自动将相应中断位置1,在进入中断服务程序后必须通过写1清除相应位,以防发生错误中断。 EINTMASK:外部中断屏蔽
[单片机]
s3c2440之<font color='red'>外部中断</font>
STM32之中断与事件一个使用GPIO作为外部中断的示例
1.GPIO 的正确设置 GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOD clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); /* Configure PD.03, PC.04, as input floating */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStru
[单片机]
FPGA与DSP的高速通信接口设计与实现
  在雷达信号处理、数字图像处理等领域中,信号处理的实时性至关重要。由于FPGA芯片在大数据量的底层算法处理上的优势及DSP芯片在复杂算法处理上的优势,DSP+FPGA的实时信号处理系统的应用越来越广泛。ADI公司的TigerSHARC系列DSP芯片浮点处理性能优越,故基于这类。DSP的DSP+FPGA处理系统正广泛应用于复杂的信号处理领域。同时在这类实时处理系统中,FPGA与DSP芯片之间数据的实时通信至关重要。   TigerSHARC系列DSP芯片与外部进行数据通信主要有两种方式:总线方式和链路口方式。链路口方式更适合于FPGA与DSP之间的实时通信。随着实时信号处理运算量的日益增加,多DSP并行处理的方式被普遍采用,它们
[工业控制]
51单片机外部中断处理源程序
//--------------------------------------------------- #include reg52.h //--------------------------------------------------- //重定义I/0引脚名称 sbit led1=P1^1; sbit led2=P1^2; sbit led3=P1^3; sbit led4=P1^4; sbit P32=P3^2; //--------------------------------------------------- //全局变量及位标志定义 bit FINT0; bit FINT1; bit FT0; bit
[单片机]
uboot 下S3C6410 的LCD 显示
cf_console.c中属于框架,基本不用改动,添加lcd,主要是通过video_hw_init()来实现lcd控制器的初始化。 具体工作: 1、smdk6410的修改 #if 1 //enable LCD display #define CONFIG_CMD_BMP #define CONFIG_VIDEO #define CONFIG_VIDEO_S3C64X0 #define CONFIG_VIDEO_LOGO //display Linux Logo in upper left corner #define VIDEO_FB_16BPP_WORD_SWAP //for BMP logo #def
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved