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

📄 eint.c

📁 philips arm7 lpc2103的常用功能的库函数第二部分
💻 C
字号:
/***********************************************Copyright (c)*********************************************
**                                Guangzou ZLG-MCU Development Co.,LTD.
**                                     
**                                       http://www.zlgmcu.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:			    Eint.c
** Last modified Date:      2007-10-15
** Last Version:		    1.0
** Descriptions:		    Eint函数实现,采用设备描述符来操作
**
**--------------------------------------------------------------------------------------------------------
** Created by:			    wengshujie
** Created date:		    2007-10-15
** Version:				    1.0
** Descriptions:		    无
**
**--------------------------------------------------------------------------------------------------------
** Modified by:			    
** Modified Date:		    
** Version:				    
** Descriptions:		    
**
*********************************************************************************************************/
#include "Config.h"
#include "EintPrivate.h"
#include "Eint.h"

/*********************************************************************************************************
   定义操作EINT器件的结构体
*********************************************************************************************************/
static __EINT_INFO  __GEintInfoDate;

/*********************************************************************************************************
** Function name:			__eintInit
** Descriptions:            外部中断初始化			
** Input parameters:		uiId:       EINT0,EINT1,EINT2,EINT4
**							puiParaData:数组首地址
**										ExtMode:        0表示使用电平激活,1表示使用边沿激活
**										ExtPolar:       0表示低电平或下降沿有效
**                                                      1表示高电平或上升没有效(取决于ExtMode)
**										ExtWake:        0表示不使中断唤醒
**                                                      1表示使能中断唤醒
** Output parameters:       NONE
** Returned value:          操作成功:   OPERATE_SUCCESS
**                          操作失败:   OPERATE_FAIL
*********************************************************************************************************/
static void __eintInit (uint32 uiId, uint32 *puiParaData)
{
    volatile uint32 *puiAddrBase;
	volatile uint32  uiOffBase;
	
	__GEintInfoDate.puiAddrBase = (uint32*)(SCB_BASE_ADDR + 0x140);     /*  初始化GPIO结构体参数        */
	__GEintInfoDate.uiOffBase   = 0;
	
	puiAddrBase = __GEintInfoDate.puiAddrBase;                          /*  获取结构体参数              */
	uiOffBase   = __GEintInfoDate.uiOffBase;
                                                                        /*  参数过滤                    */

    if (puiParaData[ExtMode] > 1) {
        puiParaData[ExtMode] = 0;
    }
    if (puiParaData[ExtPolar] > 1) {
        puiParaData[ExtPolar] = 0;
    }
 	if (puiParaData[ExtWake] > 1) {
 	    puiParaData[ExtWake] = 0;
 	}
 	puiAddrBase[__B_EXT_MODE << uiOffBase] &= (~(0x01 << uiId));        /*  不影响其它位的设置          */ 
 	                                                                    /*  设置外部中断方式            */
 	puiAddrBase[__B_EXT_MODE << uiOffBase] |= (puiParaData[ExtMode] << uiId); 
 	
    puiAddrBase[__B_EXT_POLAR << uiOffBase] &= (~(0x01 << uiId));       /*  不影响其它位的设置          */ 
                                                                        /*  设置外部中断极性            */
    puiAddrBase[__B_EXT_POLAR << uiOffBase] |= (puiParaData[ExtPolar] << uiId);           
    
    puiAddrBase[__B_EXT_WAKE << uiOffBase] &= (~(0x01 << uiId));        /*  不影响其它位的设置          */
                                                                        /*  设置是否使能外部中断唤醒功能*/
    puiAddrBase[__B_EXT_WAKE << uiOffBase] |= (puiParaData[ExtWake] << uiId);
                                                    
    puiAddrBase[__B_EXT_INT << uiOffBase] = (0x01 << uiId);             /*  清除指定的外部中断          */
}

/*********************************************************************************************************
** Function name:			eintInit
** Descriptions:            外部中断初始化			
** Input parameters:		uiId:       EINT0,EINT1,EINT2,EINT4
**							pcArg:      配置参数字符串指针
**										ExtMode:        0表示使用电平激活,1表示使用边沿激活
**										ExtPolar:       0表示低电平或下降沿有效
**                                                      1表示高电平或上升没有效(取决于ExtMode)
**										ExtWake:        0表示不使中断唤醒
**                                                      1表示使能中断唤醒														
**							pRsv:       预留参数
** Output parameters:       NONE
** Returned value:          操作成功:   OPERATE_SUCCESS
**                          操作失败:   OPERATE_FAIL
** Example:                 char cEint0Arg[] = "ExtMode=0 ExtPolar=0 ExtWake=0";
**                          eintInit(EINT0, cEint0Arg, NULL); 
**********************************************************************************************************/
#define MAX_EINT_STR_NUM   3                                            /*  字符串中包含3个参数          */

extern int32 eintInit (uint32 uiId, char *pcArg, void *pRsv)
{
    uint32 uiParaData[MAX_EINT_STR_NUM] = {0};                          /*  定义一个数组存放字符串的参数*/
    
    if ((uiId < __EINT_MAX_NUM) && (strlen(pcArg) < 80)) {
        ImpCmd(Tab_EINT, pcArg, uiParaData);                            /*  从字符串中提取参数          */
        __eintInit(uiId, uiParaData);
        return OPERATE_SUCCESS;
    }
    else {
        return OPERATE_FAIL;
    }
}

/*********************************************************************************************************
** Function name:           __eintClrIsr
** Descriptions:            清外部中断
** input parameters:        uiId:       EINT0,EINT1,EINT2,EINT4
** Output parameters:       NONE
** Returned value:          无
*********************************************************************************************************/
static void __eintClrIsr(uint32 uiID)
{
    volatile uint32 *puiAddrBase;
	volatile uint32  uiOffBase;
	
	__GEintInfoDate.puiAddrBase = (uint32*)(SCB_BASE_ADDR+0x140);       /*  初始化EINT结构体参数         */
	__GEintInfoDate.uiOffBase   = 0;
	
	puiAddrBase = __GEintInfoDate.puiAddrBase;                          /*  获取结构体参数               */
	uiOffBase   = __GEintInfoDate.uiOffBase;
	
    while ((puiAddrBase[__B_EXT_INT << uiOffBase] & (0x01 << uiID)) == 0);
    
    puiAddrBase[__B_EXT_INT << uiOffBase] = (0x01 << uiID);
    
    VICVectAddr = 0;
}

/*********************************************************************************************************
** Function name:           eint0Isr
** Descriptions:            EINT0中断入口函数
** input parameters:        NONE
** Output parameters:       NONE
** Returned value:          无
*********************************************************************************************************/
extern void eint0Isr (void)
{
    eint0Hook();
    __eintClrIsr(EINT0);
}

/*********************************************************************************************************
** Function name:           eint1Isr
** Descriptions:            EINT1中断入口函数
** input parameters:        NONE
** Output parameters:       NONE
** Returned value:          无
*********************************************************************************************************/
extern void eint1Isr (void)
{
    eint1Hook();
    __eintClrIsr(EINT1);
}

/*********************************************************************************************************
** Function name:           eint2Isr
** Descriptions:            EINT2中断入口函数
** input parameters:        NONE
** Output parameters:       NONE
** Returned value:          无
*********************************************************************************************************/
extern void eint2Isr (void)
{
    eint2Hook();
    __eintClrIsr(EINT2);
}

/*********************************************************************************************************
** Function name:           eint3Isr
** Descriptions:            EINT3中断入口函数
** input parameters:        NONE
** Output parameters:       NONE
** Returned value:          无
*********************************************************************************************************/
extern void eint3Isr (void)
{
    eint3Hook();
    __eintClrIsr(EINT3);
}

/*********************************************************************************************************
   END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -