历史上的今天
返回首页

历史上的今天

今天是:2025年03月09日(星期日)

正在发生

2020年03月09日 | intrupt 6410裸机中断

2020-03-09 来源:eefocus

我之前研究了6410的io口中断,想对着datasheet写出中断程序,但是发现,我虽然对着

datasheet可以知道他每个register的作用,但是它们之间的关联并不是很清楚,于是查了


不少的资料。发现要编一个简单的按键控制io口的中断,其实在6410中很容易就实现了,


大致可以这样:


1.初始化io口的register:包括:gpioXcon,EINT0CON0,EINT0MASK,EINT0PEND


2,初始化中断register: vicxINTENABLE , VIC0VECTADDR


这个链接介绍裸机中断也不错:点击打开链接


下面是我编写的中断控制 蜂鸣器的程序:


建议一定要亲自动手写一下,写不出来再看示例,那样效果绝对不同



/* 设置 gpio  k1 gpn0 eint0  k4 gpn3 eint3  k6 gpn5  eint5 

vic0  group 0 

    对应的设置 eintxcon eintxpend eintxmask eintxfltcon

icxintselect vicxaddr 

开中断

pwm  gpf14   1 on

*/

#include "intc.h"

#include "gpio.h"

#include "def.h"

#include "system.h"

 

int flag = -1;

 

 

/* InitInc() 

informantion : int num 0(int_eint0 0,3), int num 1(int_eint 5)

1. enable vic0irqstatus  

2.vic0select  chose irq or fiq

3,vicxenabel 使能

4 vicxintenclear disable 

5,vicxvectaddr isr address register

6.vicvectpriority 每个中断源对应的中断,选16个,排定优先级

7,vic0address 程序执行后,清除 

*/

 

void __irq K0()

{

u32 TEMP;

flag = -flag;

Outp32(rVIC0ADDR,0);

TEMP = GPIO->rEINT0PEND;

TEMP |= 0X1F;

GPIO->rEINT0PEND = TEMP;

}

 

void __irq K3()

{

u32 TEMP;

  flag = 1;

  Outp32(rVIC0ADDR,0);

  TEMP = GPIO->rEINT0PEND;

TEMP |= 0X1F;

GPIO->rEINT0PEND = TEMP;

}

 

/*void __irq K5()

{

u32 TEMP;

flag = -flag;

Outp32(rVIC0ADDR,0);

TEMP = GPIO->rEINT0PEND;

TEMP |= 0X1F;

GPIO->rEINT0PEND = TEMP;

}

*/

 

void InitInc()

{

// Outp32(rVIC0INTSELECT,0X0);使能中断

Outp32(rVIC0INTENABLE,0X1);

// 把中断地址写入vicvectaddr

Outp32(rVIC0VECTADDR+4*0,(u32)K0);

//Outp32(rVIC0VECTADDR+4*0,(u32)K3);

Outp32(rVIC0VECTADDR+4*1,(u32)K5);

}

 

 

 

 

void Initgpio()

{  u32 TEMP;

// set the interrupt 

TEMP  = GPIO->rGPIONCON  ;

TEMP &= 0XFFF;

TEMP  |= 0X882;

GPIO->rGPIONCON = TEMP;

TEMP  = GPIO->rGPIONPUD  ;

TEMP &= 0XFFF;

TEMP  |= 0X882;

GPIO->rGPIONPUD = TEMP;

TEMP = GPIO->rGPIOFCON;

TEMP &= ~(0X3<<28) ;

TEMP |=(0X1<<28);

GPIO->rGPIOFCON = TEMP;

TEMP = GPIO->rGPIOFDAT ;

TEMP &= ~(0x1 <<14);

GPIO->rGPIOFDAT = TEMP;

//gpio 触发设置

TEMP = GPIO->rEINT0CON0 ;

TEMP &=~(0XFFF);

TEMP |=0X640;

GPIO->rEINT0CON0 = TEMP;

// gpio 滤波方式 开启 默认delay

TEMP = GPIO->rEINT0FLTCON0;

TEMP |=0X808080;

GPIO->rEINT0FLTCON0 = TEMP;

// ENABLE GPIO INT

TEMP = GPIO->rEINT0MASK;

TEMP &= ~((0X1)|(0X1<<3)|(0X1<<5));

GPIO->rEINT0MASK = TEMP;

// GPIO EINT0PEND 写 1 清 0 

TEMP = GPIO->rEINT0PEND;

TEMP |= 0X1F;

GPIO->rEINT0PEND = TEMP;

}

 

void BuzzOn()

{ u32 TEMP;

TEMP = GPIO->rGPIOFDAT;

TEMP |= (0X1<<14);

GPIO->rGPIOFDAT = TEMP;

}

 

void BuzzOff()

{

u32 TEMP;

TEMP = GPIO->rGPIOFDAT;

TEMP &= ~(0X1<<14);

GPIO->rGPIOFDAT = TEMP;

}

 

 

int main()

{

//下面两句话一定要有系统使能vic irq

SYSTEM_EnableVIC();

SYSTEM_EnableIRQ();

 

Initgpio();

InitInc();

while(1)

{

if(flag ==1) BuzzOn();

if(flag ==-1) BuzzOff();

}

 

}

intc.h


/**************************************************************************************

* Project Name : S3C6410 Validation

*

* Copyright 2006 by Samsung Electronics, Inc.

* All rights reserved.

*

* Project Description :

* This software is only for validating functions of the S3C6410.

* Anybody can use this software without our permission.

*  

*--------------------------------------------------------------------------------------

* File Name : intc.h

*  

* File Description : This file declares prototypes of interrupt controller API funcions.

*

* Author : Haksoo,Kim

* Dept. : AP Development Team

* Created Date : 2006/11/08

* Version : 0.1 

* History

* - Created(Haksoo,Kim 2006/11/08)

* - Added Software Interrupt API function (wonjoon.jang 2007/01/18)

*     - Added Interrupt Source for 6410  (2008/02/28)

*  

**************************************************************************************/

 

#ifndef __INTC_H__

#define __INTC_H__

 

#ifdef __cplusplus

extern "C" {

#endif

 

#include "def.h"

 

 

// VIC0

#define rVIC0IRQSTATUS (VIC0_BASE + 0x00)

#define rVIC0FIQSTATUS (VIC0_BASE + 0x04)

#define rVIC0RAWINTR (VIC0_BASE + 0x08)

#define rVIC0INTSELECT (VIC0_BASE + 0x0c)

#define rVIC0INTENABLE (VIC0_BASE + 0x10)

#define rVIC0INTENCLEAR (VIC0_BASE + 0x14)

#define rVIC0SOFTINT (VIC0_BASE + 0x18)

#define rVIC0SOFTINTCLEAR (VIC0_BASE + 0x1c)

#define rVIC0PROTECTION (VIC0_BASE + 0x20)

#define rVIC0SWPRIORITYMASK (VIC0_BASE + 0x24)

#define rVIC0PRIORITYDAISY (VIC0_BASE + 0x28)

 

#define rVIC0VECTADDR (VIC0_BASE + 0x100)

 

#define rVIC0VECPRIORITY (VIC0_BASE + 0x200)

 

#define rVIC0ADDR (VIC0_BASE + 0xf00)

#define rVIC0PERID0 (VIC0_BASE + 0xfe0)

#define rVIC0PERID1 (VIC0_BASE + 0xfe4)

#define rVIC0PERID2 (VIC0_BASE + 0xfe8)

#define rVIC0PERID3 (VIC0_BASE + 0xfec)

#define rVIC0PCELLID0 (VIC0_BASE + 0xff0)

#define rVIC0PCELLID1 (VIC0_BASE + 0xff4)

#define rVIC0PCELLID2 (VIC0_BASE + 0xff8)

 

 

 

#define rVIC0PCELLID3 (VIC0_BASE + 0xffc)

#endif

 

 

 

 

 


gpio.h


/**************************************************************************************

* Project Name : S3C6410 Validation

*

* Copyright 2006 by Samsung Electronics, Inc.

* All rights reserved.

*

* Project Description :

* This software is only for validating functions of the S3C6410.

* Anybody can use this software without our permission.

*  

*--------------------------------------------------------------------------------------

* File Name : gpio.h

*  

* File Description : This file declares prototypes of GPIO API funcions.

*

* Author : Heemyung.Noh

* Dept. : AP Development Team

* Created Date : 2006/12/26

* Version : 0.1 

* History

* - Created(Heemyung.Noh 2006/12/26)

*     - Added EINT (Wonjoon.jang 2007/01/03)

*  

**************************************************************************************/

 

#ifndef __GPIO_H__

#define __GPIO_H__

 

#ifdef __cplusplus

extern "C" {

#endif

 

#include "def.h"

#include "sfr6410.h"

 

 

#define Low_Level 0x0

#define High_Level 0x1

#define Falling_Edge 0x2

#define Rising_Edge 0x4

#define Both_Edge 0x6

 

#define GPIO ( ( volatile oGPIO_REGS * ) (GPIO_BASE))

 

#define    Inp32(ADDR)        *((volatile u32 *)ADDR)

#define    Outp32(ADDR,data)        *((volatile u32 *)ADDR)=data

 

typedef struct tag_GPIO_REGS

{

u32 rGPIOACON; //0x7F008000

u32 rGPIOADAT;

u32 rGPIOAPUD;

u32 rGPIOACONSLP;

u32 rGPIOAPUDSLP;

u32 reserved1[3];

u32 rGPIOBCON; //0x7F008020

u32 rGPIOBDAT;

u32 rGPIOBPUD;

u32 rGPIOBCONSLP;

u32 rGPIOBPUDSLP;

u32 reserved2[3];

u32 rGPIOCCON; //0x7F008040

u32 rGPIOCDAT;

u32 rGPIOCPUD;

u32 rGPIOCCONSLP;

u32 rGPIOCPUDSLP;

u32 reserved3[3];

u32 rGPIODCON; //0x7F008060

u32 rGPIODDAT;

u32 rGPIODPUD;

u32 rGPIODCONSLP;

u32 rGPIODPUDSLP;

u32 reserved4[3];

u32 rGPIOECON; //0x7F008080

u32 rGPIOEDAT;

u32 rGPIOEPUD;

u32 rGPIOECONSLP;

u32 rGPIOEPUDSLP;

u32 reserved5[3];

u32 rGPIOFCON; //0x7F0080A0

u32 rGPIOFDAT;

u32 rGPIOFPUD;

u32 rGPIOFCONSLP;

u32 rGPIOFPUDSLP;

u32 reserved6[3];

u32 rGPIOGCON; //0x7F0080C0

u32 rGPIOGDAT;

u32 rGPIOGPUD;

u32 rGPIOGCONSLP;

u32 rGPIOGPUDSLP;

u32 reserved7[3];

u32 rGPIOHCON0; //0x7F0080E0

u32 rGPIOHCON1;

u32 rGPIOHDAT;

u32 rGPIOHPUD;

u32 rGPIOHCONSLP;

u32 rGPIOHPUDSLP;

u32 reserved8[2];

 

u32 rGPIOICON; //0x7F008100

u32 rGPIOIDAT;

u32 rGPIOIPUD;

u32 rGPIOICONSLP;

u32 rGPIOIPUDSLP;

u32 reserved9[3];

 

u32 rGPIOJCON; //0x7F008120

u32 rGPIOJDAT;

u32 rGPIOJPUD;

u32 rGPIOJCONSLP;

u32 rGPIOJPUDSLP;

u32 reserved10[3];

u32 rGPIOOCON; //0x7F008140

u32 rGPIOODAT;

u32 rGPIOOPUD;

u32 rGPIOOCONSLP;

u32 rGPIOOPUDSLP;

u32 reserved11[3];

 

u32 rGPIOPCON; //0x7F008160

u32 rGPIOPDAT;

u32 rGPIOPPUD;

u32 rGPIOPCONSLP;

u32 rGPIOPPUDSLP;

u32 reserved12[3];

 

u32 rGPIOQCON; //0x7F008180

u32 rGPIOQDAT;

u32 rGPIOQPUD;

u32 rGPIOQCONSLP;

u32 rGPIOQPUDSLP;

u32 reserved13[3];

 

u32 rSPCON; //0x7F0081A0

u32 reserved14[3];

u32 rMEM0CONSTOP; //0x7F0081B0

u32 rMEM1CONSTOP; //0x7F0081B4

u32 reserved15[2];

u32 rMEM0CONSLP0; //0x7F0081C0

u32 rMEM0CONSLP1; //0x7F0081C4

u32 rMEM1CONSLP; //0x7F0081C8

u32 reserved;

u32 rMEM0DRVCON; //0x7F0081D0

u32 rMEM1DRVCON; //0x7F0081D4

u32 reserved16[10];

 

u32 rEINT12CON; //0x7f008200

u32 rEINT34CON; //0x7f008204

u32 rEINT56CON; //0x7f008208

u32 rEINT78CON; //0x7f00820C

u32 rEINT9CON; //0x7f008210

u32 reserved17[3];

 

u32 rEINT12FLTCON; //0x7f008220

u32 rEINT34FLTCON; //0x7f008224

u32 rEINT56FLTCON; //0x7f008228

u32 rEINT78FLTCON; //0x7f00822C

u32 rEINT9FLTCON; //0x7f008230

u32 reserved18[3];

 

u32 rEINT12MASK; //0x7f008240

u32 rEINT34MASK; //0x7f008244

u32 rEINT56MASK; //0x7f008248

u32 rEINT78MASK; //0x7f00824C

u32 rEINT9MASK; //0x7f008250

u32 reserved19[3];

 

u32 rEINT12PEND; //0x7f008260

u32 rEINT34PEND; //0x7f008264

u32 rEINT56PEND; //0x7f008268

u32 rEINT78PEND; //0x7f00826C

u32 rEINT9PEND; //0x7f008270

u32 reserved20[3];

 

u32 rPRIORITY; //0x7f008280

u32 rSERVICE; //0x7f008284

u32 rSERVICEPEND; //0x7f008288

u32 reserved21;

 

u32 reserved22[348];

u32 rGPIOKCON0; //0x7f008800

u32 rGPIOKCON1; //0x7f008804

u32 rGPIOKDAT; //0x7f008808

u32 rGPIOKPUD; //0x7f00880c

 

u32 rGPIOLCON0; //0x7f008810

u32 rGPIOLCON1; //0x7f008814

u32 rGPIOLDAT; //0x7f008818

u32 rGPIOLPUD; //0x7f00881c

 

u32 rGPIOMCON; //0x7f008820

u32 rGPIOMDAT; //0x7f008824

u32 rGPIOMPUD; //0x7f008828

u32 reserved23;

 

u32 rGPIONCON; //0x7f008830

u32 rGPIONDAT; //0x7f008834

u32 rGPIONPUD; //0x7f008838

u32 reserved24;

 

u32 reserved25[16];

 

u32 rSPCONSLP; //0x7f008880

 

u32 reserved26[31];

 

u32 rEINT0CON0; //0x7f008900

u32 rEINT0CON1; //0x7f008904

u32 reserved27[2];

 

u32 rEINT0FLTCON0; //0x7f008910

推荐阅读

史海拾趣

Delock公司的发展小趣事

Delock公司自创立之初,就致力于电子连接技术的研发。公司创始人李先生敏锐地洞察到市场对高性能、稳定可靠的电子连接设备的需求,于是带领团队投入大量资源进行技术研发。经过数年的努力,Delock公司成功开发出一种具有革命性意义的电子连接器,不仅传输速度快,而且耐用性高,迅速在市场上获得了认可。这一创新不仅为Delock公司带来了可观的利润,也为公司在电子行业树立了技术领先的形象。

Accelink Technologies Co Ltd公司的发展小趣事

随着公司规模的扩大和产品线的丰富,Delock公司开始积极拓展国际市场。公司先是在欧美等发达国家设立了办事处和分销中心,随后又逐步进入亚洲、非洲等新兴市场。为了更好地满足全球用户的需求,Delock公司还针对不同地区的市场特点进行产品定制和营销策略的调整。这一系列的全球化战略让Delock公司的产品在全球范围内获得了广泛的认可和应用。

EM Devices Corporation公司的发展小趣事

EM Devices Corporation始终将产品质量放在首位。公司建立了一套严格的质量管理体系,对生产过程中的每一个环节都进行严格的监控和检测。同时,公司还不断引入先进的生产设备和工艺,提高产品的生产效率和质量。此外,公司还鼓励员工提出改进意见和建议,以便及时发现并解决问题。这种持续改进的精神使得EM Devices Corporation的产品在市场上始终保持着良好的口碑。

Fedco_Batteries公司的发展小趣事

在快速发展的同时,Fedco_Batteries始终关注社会责任。公司积极参与公益事业,捐款捐物支持灾区重建、教育扶贫等项目。同时,公司还注重环保和可持续发展,致力于研发环保型电池产品,减少对环境的影响。这种关注社会责任的企业精神,让Fedco_Batteries在社会上树立了良好的形象。

Euvis Inc公司的发展小趣事

在技术创新的基础上,Euvis Inc公司积极拓展市场,通过与国际知名电子产品制造商的合作,将其产品应用于各类高端电子产品中。同时,公司注重品牌建设,通过一系列营销活动提升品牌知名度和美誉度。随着市场份额的不断扩大,Euvis Inc公司逐渐在电子行业中树立起了高端、可靠的品牌形象。

DB Unlimited公司的发展小趣事

DB Unlimited公司最初只是一个生产基础音频组件的小型企业。随着技术的不断发展和市场的变化,公司意识到单纯的组件生产已经无法满足客户的需求。于是,DB Unlimited开始转型,致力于提供完整的音频解决方案。通过不断研发和创新,公司成功开发出了一系列高性能的音频产品,并凭借其卓越的品质和性能,赢得了客户的广泛认可。

问答坊 | AI 解惑

急!! 更便宜的51单片机介绍我们

目前使用STC的90C51在帮客户开发 http://stcmcu.com/stc-mcu-select-1.htm 直接找深圳拿货$ 2.9 这颗IC 比一般传统89C51多了4个IO 复位脚还能当特殊扩展口用 , 开发起来也方便另外有些特殊案子需要较大内部 EEPROM 纪录系统字据客户代码也杂 -- 绝 ...…

查看全部问答>

按键处理与按键防抖动例子

本帖最后由 paulhyde 于 2014-9-15 09:37 编辑 /***************************************************** 本程序的目标是这样的: 1:不使用INTn中断功能,按键接在普通IO上 2:由定时器T/C2每隔一段时间检测按键一次, 并具有防抖动功能 3:每点击按 ...…

查看全部问答>

电工测量与电测仪表--很基础很实用的好书

电工测量与电测仪表--很基础很实用的好书 序言 前言 第一章 电测技术基础 第一节 测量的定义和分类 第二节 测量误差 第三节 电测仪表的分类 第三节 电测仪表的主要技术指标 第二章 电气测量指示仪表 第一节 电气测量指示仪表的概念和分 ...…

查看全部问答>

电容耦合效应会产生什么影响?如何减小这一影响

电容耦合效应会产生什么影响?如何减小这一影响…

查看全部问答>

为什么说PowerPC用的是RISC指令集?

资料说, PowerPC用的是RISC指令集. 我有点疑惑: 硬件上跑的是二进制, 我汇编是RISC还是CISC有关系吗? 只要编译器能正确地编译成PowerPC可以执行的机器码不就可以了吗?…

查看全部问答>

关于LCD显示问题的求助

我的平台是PXA270+Wince5.0 现在LCD的显示比较奇怪,刚进入系统的时候,主画面的显示还算正常,但是一切换画面,屏幕就会局部或者部分发白。 比方说,打开IE,屏幕就会整个发白,字体看不太清楚。 打开控制面板,屏幕会变成一条一条的,什么字都 ...…

查看全部问答>

我的应急灯终于发出了极其微弱的光

今天我终于焊接完成了我的应急灯.它也终于发出了极其微弱的光.非但起不到应急照明的目的.你不仔细看都不知道它是否在发光.从4个月前,开始申请美信的样片,我反复申请了2次.等了2个月才拿到这样的劣质样片.至此我算是了解了美信公司的服务质量和产品 ...…

查看全部问答>

关于FPGA设计资源整和积累问题

各位FPGA论坛的大虾:        为了方便大虾和后来者使用,学习和共享. 我呼吁大家把已经经过验证的FPGA 模块 整理成册, 分享到论坛给使用!             &n ...…

查看全部问答>

模拟串口!

各位大哥有谁有430模拟串口的C程序啊?能给我参考一下啊!先谢谢了…

查看全部问答>

针对DDR2-800和DDR3的PCB信号完整性设计

针对DDR2-800和DDR3的PCB信号完整性设计…

查看全部问答>