📄 extint.c
字号:
/****************************************Copyright (c)**************************************************/
/**
;** 西南科技大学计算机科学学院
;**
;** http://www.cs.suswt.edu.cn
;**
;** 日期: 2007/10/17
;** 描述: 西南科技大学计算机学院CS-II型实验板外部中断驱动工作程序
;** 作者:
;**
;**--------------exint.c文件
;**------------------------------------------------------------------------------------------------------*/
/**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define _EXINT_C_
#ifdef _EXINT_C_
/************************************************
* Header File *
***********************************************/
#include"config.h"
#include"sounder.h"
#include"led.h"
/************************************************
* Globale variable *
***********************************************/
/**--------------------------------------------------------------------------**/
// 外部中断0
/*
名称 描述 访问复位值* 地址
外部中断
EXTINT 外部中断标志寄存器 R/W 0 0xE01FC140 包含EINT0、EINT1、EINT2和EINT3的中断标志。
EXTWAKE 外部中断唤醒寄存器 R/W 0 0xE01FC144 包含3个用于控制外部中断中断是否将处理器从掉电模式唤醒的使能位。
EXTMODE 外部中断方式寄存器 R/W 0 0xE01FC148 控制由每个引脚的边沿或电平触发中断
EXTPOLAR 外部中断极性寄存器 R/W 0 0xE01FC14C 控制由每个引脚的哪种电平或边沿来触发中断
*/
/*******************************************************************************
Function Name: void __irq IRQEint0(void) *
Description : 外部中断0的中断服务函数,需要利用外部中断0进行中断的程序都可以 *
放在这个函数中 *
ads1.2 规定,在定义中断服务函数时,必须加入关键字__irq保证函数返*
回时会切换处理器模式 *
需要注意的是:注意在退出中断服务程序时,要清零相应外设的中断标志*
以及VICVectAddr,为响应下一次中断做好准备 *
*******************************************************************************/
uint32 tmp_cnt=100000;
uint32 dis_cnt = 0;
void __irq IRQEint0(void)
{
SOUNDEROn();
while(tmp_cnt!=0)
{
tmp_cnt--;
}
LEDPrint(dis_cnt++);
SOUNDEROff();
tmp_cnt=100000;
/* 上面添加需要定时器中断的代码*/
EXTINT = 0x01; //清除中断
VICVectAddr = 0; //清除地址
}
/*******************************************************************************
Function Name: void EINT0Init(void) *
Description : 外部中断0初始化设置,主要设置引脚连接模块,电平触发方式,中断 *
优先级,中断服务程序入口地址等 *
*******************************************************************************/
void EINT0Init(void)
{
PINSEL1 = (PINSEL1&0xfffffffc)|0x01; //P0.16 EINT0
EXTMODE |= 0x03; /* something wrong */ //EINT0使用边沿触发
EXTPOLAR &= 0X01; //EINT0高电平或上升沿有效
VICIntSelect &=0xffff7fff; //设置EINT0为IRQ中断
VICVectCntl1 = 0x20|14; //为中断源分配向量IRQ的优先级 ,VICVectCntl n,n值越小优先级越高,0<=n<=15
//中断源序号为14 代表外部中断0中断
VICVectAddr1 = (uint32)IRQEint0; //向量地址寄存器 为该中断优先级设置服务程序入口地址
VICIntEnable = 0x00004000; //中断使能 允许相应中断源产生中断
}
#endif
/*****************************************************************************
* End of Entire File *
****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -