📄 eint.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 + -