⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 extint.c

📁 电力行业必备。有错的地方
💻 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 + -