📄 eic.h
字号:
/****************************************Copyright (c)**************************************************
**
** STR710 development team
**
**
** http://www.appchip.com
**
**--------------文件信息--------------------------------------------------------------------------------
** 文 件 名: apb.h
** 创 建 人: lhl
** 创建日期: 2006年5月10日
** 描 述: 该文件包含了所有APB功能函数原型与所需要的常量
**
**--------------历史版本--------------------------------------------------------------------------------
** 创 建 人: lhl
** 版 本: V1.0
** 日 期: 2006年5月10日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#ifndef __EIC_H
#define __EIC_H
#include "cpu_cfg.h"
#ifdef __cplusplus
extern "C" {
#endif
#if EN_ARM_EIC > 0 //决定是否编译该文件
/************************************** 宏定义,常量定义 ******************************************/
#define ECI_ENABLEONEIRQ(it) (EIC_IER0 |= 1<<it) // 允许指定的中断
#define ECI_DISABLEONEIRQ(it)(EIC_IER0 &= ~(1<<it)) // 禁止指定的中断
#define GET_CURRENT_IRQ_NUMBER (EIC_CICR & 0x0000001F)
#define GET_CURRENT_FIQ_NUMBER ((EIC_FIR >> 2) & 0x0003)
#define CLEAR_CURRENT_IRQ_PENDING(number) (EIC_IPR0 |= 1<<number)
#define EIC_SIRn_REG(it) (*((volatile UWORD32 *)(EIC_SIR_BASE + 4*it)))
/************************************** 枚举类型定义 *******************************************/
typedef enum
{
T0TIMI_IRQ = 0,
FLASH_IRQ = 1,
RCCU_IRQ = 2,
RTC_IRQ = 3,
WDG_IRQ = 4,
XTI_IRQ = 5,
USBHP_IRQ = 6,
I2C0ITERR_IRQ = 7,
I2C1ITERR_IRQ = 8,
UART0_IRQ = 9,
UART1_IRQ = 10,
UART2_IRQ = 11,
UART3_IRQ = 12,
SPI0_IRQ = 13,
SPI1_IRQ = 14,
I2C0_IRQ = 15,
I2C1_IRQ = 16,
CAN_IRQ = 17,
ADC_IRQ = 18,
T1TIMI_IRQ = 19,
T2TIMI_IRQ = 20,
T3TIMI_IRQ = 21,
HDLC_IRQ = 25,
USBLP_IRQ = 26,
T0TOI_IRQ = 29,
T0OC1_IRQ = 30,
T0OC2_IRQ = 31
} IRQ_CHANNELS_T; //IRQ通道数据类型
typedef enum
{
T0TIMI_FIQ = 0x00000001,
WDG_FIQ = 0x00000002,
WDGT0TIMI_FIQ = 0x00000003
} FIQ_CHANNELS_T; //FIQ通道数据类型
/************************************** 结构体类型定义 ******************************************/
/********************************** 全局外部函数原型声明 *****************************************/
/*********************************************************************************************************
;** 函数名称: EIC_Reset
;** 功能描述: 中断控制器缺省(复位时)配置
;**
;** 参 数: 无
;**
;** 返 回 值: 无
;**
;** 作 者: lhl
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void EIC_Reset(void);
/*********************************************************************************************************
;** 函数名称: IRQ_ModifyCurrentPriority
;** 功能描述: 修改当前中断优先级,注意:该函数智能在IRQ中断服务例程中调用
;**
;** 参 数: new_priority_level:新的优先级值
;**
;** 返 回 值: 无
;**
;** 作 者: lhl
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void IRQ_ModifyCurrentPriority(UWORD8 new_priority);
/*********************************************************************************************************
;** 函数名称: EIC_IRQConfig
;** 功能描述: 禁止、允许IRQ中断
;**
;** 参 数: new_status:可配置为ENABLE 或 DISABLE
;**
;** 返 回 值: 无
;**
;** 作 者: lhl
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline void IRQ_Config(CONFIG_STATUS_T new_status)
{
if (new_status==ENABLE)
EIC_ICR |= 0x0001;
else
EIC_ICR &= ~0x0001;
}
/*********************************************************************************************************
;** 函数名称: FIQ_Config
;** 功能描述: 禁止、允许FIQ中断
;**
;** 参 数: new_status:可配置为ENABLE 或 DISABLE
;**
;** 返 回 值: 无
;**
;** 作 者: lhl
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline void FIQ_Config(CONFIG_STATUS_T new_status)
{
if (new_status==ENABLE)
EIC_ICR |= 0x0002;
else
EIC_ICR &= ~0x0002;
}
/*********************************************************************************************************
;** 函数名称: IRQ_ONEITConfig
;** 功能描述: 禁止、允许IRQ 通道
;**
;** 参 数: new_status:可配置为ENABLE 或 DISABLE
;** irq_channel: IRQ通道编号
;**
;** 返 回 值: 无
;**
;** 作 者: lhl
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline void IRQ_ONEITConfig(IRQ_CHANNELS_T irq_channel,CONFIG_STATUS_T new_status)
{
if (new_status==ENABLE)
EIC_IER0 |= 0x0001 << irq_channel;
else
EIC_IER0 &= ~(0x0001 << irq_channel);
}
/*********************************************************************************************************
;** 函数名称: FIQ_ONEITConfig
;** 功能描述: 禁止、允许FIQ通道
;**
;** 参 数: new_status:可配置为ENABLE 或 DISABLE
;** fiq_channel: FIQ通道编号
;**
;** 返 回 值: 无
;**
;** 作 者: lhl
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline void FIQ_ONEITConfig(FIQ_CHANNELS_T fiq_channel,CONFIG_STATUS_T new_status)
{
if (new_status==ENABLE)
EIC_FIR |= fiq_channel;
else
EIC_FIR &= ~fiq_channel;
}
/*********************************************************************************************************
;** 函数名称: IRQ_PriorityConfig
;** 功能描述: 设置IRQ中断通道优先级
;**
;** 参 数: irq_channel: IRQ通道编号
;** level : 优先级
;**
;** 返 回 值: 无
;**
;** 作 者: lhl
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline void IRQ_PriorityConfig(IRQ_CHANNELS_T irq_channel, UWORD8 level)
{
EIC_SIRn_REG(irq_channel) = (EIC_SIRn_REG(irq_channel) & 0xFFFF0000) | (UWORD16)level & 0x000F;
}
/*********************************************************************************************************
;** 函数名称: IRQ_CurrentPriorityObtain
;** 功能描述: 获得当前服务中断的优先级s
;**
;** 参 数: 无
;**
;** 返 回 值: 优先级数值
;**
;** 作 者: lhl
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline UWORD8 IRQ_CurrentPriorityObtain(void)
{
return EIC_CIPR & 0xF;
}
/*********************************************************************************************************
;** 函数名称: IRQ_CurrentChannelObtain
;** 功能描述: 获得当前服务IRQ中断的通道编号
;**
;** 参 数: 无
;**
;** 返 回 值: 获得的通道编号
;**
;** 作 者: lhl
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline IRQ_CHANNELS_T IRQ_CurrentChannelObtain(void)
{
return (IRQ_CHANNELS_T)(EIC_CICR & 0x1F);
}
/*********************************************************************************************************
;** 函数名称: FIQ_CurrentChannelObtain
;** 功能描述: 获得当前服务FIQ中断的通道编号
;**
;** 参 数: 无
;**
;** 返 回 值: 获得的通道编号
;**
;** 作 者: lhl
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline FIQ_CHANNELS_T FIQ_CurrentChannelObtain(void)
{
return (FIQ_CHANNELS_T)((EIC_FIR >> 2) & 0x0003);
}
/*********************************************************************************************************
;** 函数名称: IRQ_ClearPendingBit
;** 功能描述: 清除相关通道的通用中断的状态
;**
;** 参 数: channel_number: 0~31
;**
;** 返 回 值: 无
;**
;** 作 者: lhl
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline void IRQ_ClearPendingBit(IRQ_CHANNELS_T irq_channel)
{
EIC_IPR0 |= (1<<irq_channel); //注意只有写1才有效
}
/*********************************************************************************************************
;** 函数名称: FIQ_ClearPendingBit
;** 功能描述: 清除FIQ中断的Pending位
;**
;** 参 数: fiq_channel
;**
;** 返 回 值: 无
;**
;** 作 者: lhl
;** 日 期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人:
;** 日 期:
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline void FIQ_ClearPendingBit(FIQ_CHANNELS_T fiq_channel)
{
EIC_FIR = (EIC_FIR & 0x0003) | (fiq_channel << 2);
}
#endif /* EN_ARM_EIC > 0 */
#ifdef __cplusplus
}
#endif
#endif /* __EIC_H */
/***************************************** end of file *******************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -