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

📄 eic.h

📁 这是一个ucos下看门狗的驱动程序
💻 H
字号:
/****************************************Copyright (c)**************************************************
**                                      
**                                          
**                                杭州央海软件科技有限公司
**
**                                 http://www.armgcc.com
**
**--------------文件信息--------------------------------------------------------------------------------
** 文 件 名: apb.h
** 创 建 人: 罗辉联
** 创建日期: 2006年5月10日
** 描    述: 该文件包含了所有APB功能函数原型与所需要的常量
**
**--------------历史版本--------------------------------------------------------------------------------
** 创 建 人: 罗辉联
** 版    本: 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
;** 功能描述: 中断控制器缺省(复位时)配置
;** 
;** 参    数: 无
;**  
;** 返 回 值: 无
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void EIC_Reset(void);
/*********************************************************************************************************
;** 函数名称: IRQ_ModifyCurrentPriority
;** 功能描述: 修改当前中断优先级,注意:该函数智能在IRQ中断服务例程中调用
;** 
;** 参    数: new_priority_level:新的优先级值
;**  
;** 返 回 值: 无
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
void IRQ_ModifyCurrentPriority(UWORD8 new_priority);

/*********************************************************************************************************
;** 函数名称: EIC_IRQConfig
;** 功能描述: 禁止、允许IRQ中断
;** 
;** 参    数: new_status:可配置为ENABLE 或 DISABLE
;**  
;** 返 回 值: 无
;**         
;** 作   者: 罗辉联
;** 日   期: 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
;**  
;** 返 回 值: 无
;**         
;** 作   者: 罗辉联
;** 日   期: 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通道编号
;**  
;** 返 回 值: 无
;**         
;** 作   者: 罗辉联
;** 日   期: 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通道编号
;**  
;** 返 回 值: 无
;**         
;** 作   者: 罗辉联
;** 日   期: 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      : 优先级        
;**  
;** 返 回 值: 无
;**         
;** 作   者: 罗辉联
;** 日   期: 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
;** 
;** 参    数: 无
;**  
;** 返 回 值: 优先级数值
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline UWORD8 IRQ_CurrentPriorityObtain(void)
{
  return EIC_CIPR & 0xF;
}
/*********************************************************************************************************
;** 函数名称: IRQ_CurrentChannelObtain
;** 功能描述: 获得当前服务IRQ中断的通道编号
;** 
;** 参    数: 无
;**  
;** 返 回 值: 获得的通道编号
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline IRQ_CHANNELS_T IRQ_CurrentChannelObtain(void)
{
  return (IRQ_CHANNELS_T)(EIC_CICR & 0x1F);
}
/*********************************************************************************************************
;** 函数名称: FIQ_CurrentChannelObtain
;** 功能描述: 获得当前服务FIQ中断的通道编号
;** 
;** 参    数: 无
;**  
;** 返 回 值: 获得的通道编号
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline FIQ_CHANNELS_T FIQ_CurrentChannelObtain(void)
{
   return (FIQ_CHANNELS_T)((EIC_FIR >> 2) & 0x0003);
}
/*********************************************************************************************************
;** 函数名称: IRQ_ClearPendingBit
;** 功能描述: 清除相关通道的通用中断的状态
;** 
;** 参    数: channel_number: 0~31   
;**           
;** 返 回 值: 无
;**         
;** 作   者: 罗辉联
;** 日   期: 2006年5月10日
;**-------------------------------------------------------------------------------------------------------
;** 修 改 人: 
;** 日   期: 
;**------------------------------------------------------------------------------------------------------
;********************************************************************************************************/
inline void IRQ_ClearPendingBit(IRQ_CHANNELS_T irq_channel)
{
	EIC_IPR0 |= (1<<irq_channel); //注意只有写1才有效
}
/*********************************************************************************************************
;** 函数名称: FIQ_ClearPendingBit
;** 功能描述: 清除FIQ中断的Pending位
;** 
;** 参    数: fiq_channel
;**  
;** 返 回 值: 无
;**         
;** 作   者: 罗辉联
;** 日   期: 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 + -