📄 extint.c
字号:
/*
* 文件名: EXTINT.C
* 功能: 外部中断程序接口
* 作者: Light Rain
* 时间: 2006-10-30
*
* 描述:
*
*/
#include "config.h"
#include "Global.h"
#include "EXTINT.H"
extern void EINT0_Handler(void); //在IRQ.s中定义
extern void EINT1_Handler(void); //在IRQ.s中定义
extern void EINT2_Handler(void); //在IRQ.s中定义
extern void EINT3_Handler(void); //在IRQ.s中定义
/******************************************************************
* 外部中断初始化
*
* mode - 外部中断触发条件:
* EXT_MODE_LEVEL_LOW 低电平触发
* EXT_MODE_LEVEL_HIGH 高电平触发
* EXT_MODE_EDGE_DOWN 下降沿触发
* EXT_MODE_EDGE_UP 上升沿触发
*
* bWakeup - 唤醒使能
* TURE 允许相应的外部中断将处理器从掉电模式唤醒
* FALSE 不允许..................................
*
******************************************************************/
BOOLEAN EINTInit( INT8U port, INT8U mode, BOOLEAN bWakeup )
{
INT8U i;
switch( port )
{
case 0:
PINSEL1 = (PINSEL1 & 0xFFFFFFFC ) | 0x01 ; // 显示板按键中断(P0.16)
VICIntSelect &= (~(1<<14));
VICVectAddr12 = (INT32U)EINT0_Handler ;
VICVectCntl12 = 0x20 | 14 ;
break;
case 1:
PINSEL0 = (PINSEL0 & 0xCFFFFFFF ) | 0x20000000 ;// 扩展串行口中断(P0.14)
VICIntSelect &= (~(1<<15));
VICVectAddr13 = (INT32U)EINT1_Handler;
VICVectCntl13 = 0x20 | 15 ;
break;
case 2:
PINSEL0 = (PINSEL0 & 0x3FFFFFFF) | 0x80000000 ; // 掉电中断(P0.15)
VICIntSelect &= (~(1<<16));
VICVectAddr14 = (INT32U)EINT2_Handler ;
VICVectCntl14 = 0x20 | 16 ;
break;
case 3:
//PINSEL1 = PINSEL1 | 0x300; // GPRS短信中断(P0.20)
PINSEL1 = (PINSEL1 & 0xCFFFFFFF) | 0x20000000 ; // 红外接收中断(P0.30)
VICIntSelect &= (~(1<<17));
VICVectAddr15 = (INT32U)EINT3_Handler ;
VICVectCntl15 = 0x20 | 17 ;
break;
default:
return FALSE;
}
i = 1<<port ;
switch( mode )
{
case EXT_MODE_LEVEL_LOW:
EXTMODE &= (~i)&0x0F ;
EXTPOLAR &= (~i)&0x0F ;
break;
case EXT_MODE_LEVEL_HIGH:
EXTMODE &= (~i)&0x0F ;
EXTPOLAR |= (i&0x0F) ;
break;
case EXT_MODE_EDGE_DOWN:
EXTMODE |= (i&0x0F) ;
EXTPOLAR &= (~i)&0x0F ;
break;
case EXT_MODE_EDGE_UP:
EXTMODE |= (i&0x0F) ;
EXTPOLAR |= (i&0x0F) ;
break;
default:
return FALSE;
}
// 清除外部中断
EXTINT |= 1<<port ;
VICIntEnable = 1<<(port+14) ;
return TRUE;
}
// EINT0 中断处理函数
void EINT_Exception_0( void )
{
OS_ENTER_CRITICAL();
EINT0Interrupt(); // 显示板按键中断
//while( (EXTINT & 0x01) != 0 )
{
EXTINT |= 0x01 ;
}
VICVectAddr = 0 ;
OS_EXIT_CRITICAL();
}
// EINT1 中断处理函数
void EINT_Exception_1( void )
{
OS_ENTER_CRITICAL();
// 扩展串行口中断服务处理
//SC28L91_Exception();
SC16IS752_Exception();
//EINT1Interrupt();
// 清除中断
EXTINT |= 0x02 ;
VICVectAddr = 0 ;
OS_EXIT_CRITICAL();
}
// EINT2 中断处理函数
void EINT_Exception_2( void )
{
OS_ENTER_CRITICAL();
EINT2Interrupt();
EXTINT |= 0x04 ;
VICVectAddr = 0 ;
OS_EXIT_CRITICAL();
}
// EINT3 中断处理函数
void EINT_Exception_3( void )
{
OS_ENTER_CRITICAL();
// 将中断引脚设成GPIO,以此读取口线状态
PINSEL1 &= 0xCFFFFFFF; // GPRS短信中断(P0.30)
EINT3Interrupt();
// 还原中断设置
PINSEL1 = (PINSEL1 & 0xCFFFFFFF ) | 0x20000000 ;// GPRS短信中断(P0.30)
// 清除中断
//while( (EXTINT & 0x08) != 0 )
{
EXTINT |= 0x08 ;
}
VICVectAddr = 0 ;
OS_EXIT_CRITICAL();
}
/*********************************************************************************************************
** 以下为一些与系统相关的库函数的实现
** 具体作用请ads的参考编译器与库函数手册
** 用户可以根据自己的要求修改
********************************************************************************************************/
/*********************************************************************************************************
** The implementations for some library functions
** For more details, please refer to the ADS compiler handbook and The library
** function manual
** User could change it as needed
********************************************************************************************************/
#include "rt_sys.h"
#include "stdio.h"
#pragma import(__use_no_semihosting_swi)
#pragma import(__use_two_region_memory)
int __rt_div0(int a)
{
a = a;
return 0;
}
int fputc(int ch,FILE *f)
{
ch = ch;
f = f;
return 0;
}
int fgetc(FILE *f)
{
f = f;
return 0;
}
int _sys_close(FILEHANDLE fh)
{
fh = fh;
return 0;
}
int _sys_write(FILEHANDLE fh, const unsigned char * buf,
unsigned len, int mode)
{
fh = fh;
buf = buf;
len =len;
mode = mode;
return 0;
}
int _sys_read(FILEHANDLE fh, unsigned char * buf,
unsigned len, int mode)
{
fh = fh;
buf = buf;
len =len;
mode = mode;
return 0;
}
void _ttywrch(int ch)
{
ch = ch;
}
int _sys_istty(FILEHANDLE fh)
{
fh = fh;
return 0;
}
int _sys_seek(FILEHANDLE fh, long pos)
{
fh = fh;
return 0;
}
int _sys_ensure(FILEHANDLE fh)
{
fh = fh;
return 0;
}
long _sys_flen(FILEHANDLE fh)
{
fh = fh;
return 0;
}
int _sys_tmpnam(char * name, int sig, unsigned maxlen)
{
name = name;
sig = sig;
maxlen = maxlen;
return 0;
}
void _sys_exit(int returncode)
{
returncode = returncode;
}
char *_sys_command_string(char * cmd, int len)
{
cmd = cmd;
len = len;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -