?? st79_itc.c
字號:
/**
******************************************************************************
* @file st79_itc.c
* @brief This file contains all the functions for the ITC peripheral.
* @author STMicroelectronics - MCD & APG Car Body Application Labs
* @version V0.01
* @date 04-JUL-2007
******************************************************************************
*
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>© COPYRIGHT 2007 STMicroelectronics</center></h2>
* @image html logo.bmp
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "st79_itc.h"
/* LINKER SECTIONS DEFINITION FOR THIS FILE ONLY */
#pragma section (ITC_CODE)
#pragma section const {ITC_CONST}
#pragma section @near [ITC_URAM]
#pragma section @near {ITC_IRAM}
#pragma section @tiny [ITC_UZRAM]
#pragma section @tiny {ITC_IZRAM}
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/** @addtogroup ITC_Private_Functions
* @{
*/
/**
* @brief Utility function used to read CC register.
* @par Parameters:
* None
* @retval u8 Content of CC register.
* @par Required preconditions:
* None
* @par Called functions:
* None
* @par Example:
* @code
* u8 val;
* val = Get_CPU_CC();
* @endcode
*/
u8 Get_CPU_CC(void)
{
_asm("push cc");
_asm("pop a");
return;
}
/**
* @}
*/
/* Public functions ----------------------------------------------------------*/
/** @addtogroup ITC_Public_Functions
* @{
*/
/**
* @brief Deinitializes the ITC registers to their default reset value.
* @par Parameters:
* None
* @retval void None
* @par Required preconditions:
* None
* @par Called functions:
* None
* @par Example:
* @code
* ITC_DeInit();
* @endcode
*/
void ITC_DeInit(void)
{
ITC->ISPR0 = ITC_SPRX_RESET_VALUE;
ITC->ISPR1 = ITC_SPRX_RESET_VALUE;
ITC->ISPR2 = ITC_SPRX_RESET_VALUE;
ITC->ISPR3 = ITC_SPRX_RESET_VALUE;
ITC->ISPR4 = ITC_SPRX_RESET_VALUE;
ITC->ISPR5 = ITC_SPRX_RESET_VALUE;
ITC->ISPR6 = ITC_SPRX_RESET_VALUE;
ITC->ISPR7 = ITC_SPRX_RESET_VALUE;
}
/**
* @brief Get the software interrupt priority bits (I1, I0) value from CPU CC register.
* @par Parameters:
* None
* @retval u8 The software interrupt priority bits value.
* @par Required preconditions:
* None
* @par Called functions:
* @ref Get_CPU_CC
* @par Example:
* @code
* u8 val;
* val = ITC_GetSoftIntStatus();
* @endcode
*/
u8 ITC_GetSoftIntStatus(void)
{
return (u8)(Get_CPU_CC() & CPU_CC_I1I0);
}
/**
* @brief Get the software priority of the specified interrupt source.
* @param[in] IrqNum The IRQ number to access.
* @retval ITC_PriorityLevel_TypeDef The software priority of the interrupt source.
* @par Required preconditions:
* None
* @par Called functions:
* None
* @par Example:
* @code
* ITC_PriorityLevel_TypeDef val;
* val = ITC_GetSoftwarePriority(I2C_IRQ_N);
* if (val == ITC_PriorityLevel1) { ... }
* @endcode
*/
ITC_PriorityLevel_TypeDef ITC_GetSoftwarePriority(ITC_IrqNum_TypeDef IrqNum)
{
u8 Value = 0;
u8 Mask;
/* Check function parameters */
assert(IS_ITC_IRQ_NUM_OK((u8)IrqNum));
/* Define the mask corresponding to the bits position in the SPR register */
Mask = (u8)(0x03U << (((u8)IrqNum % 4U) * 2U));
switch (IrqNum)
{
case TLI_IRQ_N: /* TLI software priority can be read but has no meaning */
case AWU_IRQ_N:
case CLK_IRQ_N:
case PORTA_IRQ_N:
Value = ITC->ISPR0 & Mask; /* Read software priority */
break;
case PORTB_IRQ_N:
case PORTC_IRQ_N:
case PORTD_IRQ_N:
case PORTE_IRQ_N:
Value = ITC->ISPR1 & Mask; /* Read software priority */
break;
case CAN_RX_IRQ_N:
case CAN_TX_IRQ_N:
case SPI_IRQ_N:
case TIM1_OVF_IRQ_N:
Value = ITC->ISPR2 & Mask; /* Read software priority */
break;
case TIM1_CAPCOM_IRQ_N:
case TIM2_OVF_IRQ_N:
case TIM2_CAPCOM_IRQ_N:
case TIM3_OVF_IRQ_N:
Value = ITC->ISPR3 & Mask; /* Read software priority */
break;
case TIM3_CAPCOM_IRQ_N:
case USART_TX_IRQ_N:
case USART_RX_IRQ_N:
case I2C_IRQ_N:
Value = ITC->ISPR4 & Mask; /* Read software priority */
break;
case LINUART_TX_IRQ_N:
case LINUART_RX_IRQ_N:
case ADC_IRQ_N:
case TIM4_OVF_IRQ_N:
Value = ITC->ISPR5 & Mask; /* Read software priority */
break;
case EEPROM_EEC_IRQ_N:
Value = ITC->ISPR6 & Mask; /* Read software priority */
break;
default:
break;
}
Value >>= ((u8)IrqNum % 4u) * 2u;
return((ITC_PriorityLevel_TypeDef)Value);
}
/**
* @brief Set the software priority of the specified interrupt source.
* @param[in] IrqNum The interrupt source to access.
* @param[in] PriorityValue The software priority value to set.
* @retval ITC_PriorityLevel_TypeDef The software priority of the interrupt source.
* @par Required preconditions:
* - The modification of the software priority is only possible when the interrupts are disabled.
* - The normal behavior is to disable the interrupts before calling this function, and re-enable it after.
* - The priority level 0 cannot be set (see product specification for more details).
* @par Called functions:
* None
* @par Example:
* @code
* ITC_SetSoftwarePriority(SPI_IRQ_N, ITC_PriorityLevel1);
* @endcode
*/
void ITC_SetSoftwarePriority(ITC_IrqNum_TypeDef IrqNum, ITC_PriorityLevel_TypeDef PriorityValue)
{
u8 Mask;
u8 NewPriority;
/* Check function parameters */
assert(IS_ITC_IRQ_NUM_OK((u8)IrqNum));
assert(IS_ITC_PRIORITY_VALUE_OK(PriorityValue));
/* Check if interrupts are disabled */
assert(IS_ITC_INTERRUPTS_DISABLED);
/* Define the mask corresponding to the bits position in the SPR register */
/* The mask is reversed in order to clear the 2 bits after more easily */
Mask = (u8)(~(u8)(0x03U << (((u8)IrqNum % 4U) * 2U)));
/* Define the new priority to write */
NewPriority = (u8)((u8)(PriorityValue) << (((u8)IrqNum % 4U) * 2U));
switch (IrqNum)
{
case TLI_IRQ_N: /* TLI software priority can be written but has no meaning */
case AWU_IRQ_N:
case CLK_IRQ_N:
case PORTA_IRQ_N:
ITC->ISPR0 &= Mask;
ITC->ISPR0 |= NewPriority;
break;
case PORTB_IRQ_N:
case PORTC_IRQ_N:
case PORTD_IRQ_N:
case PORTE_IRQ_N:
ITC->ISPR1 &= Mask;
ITC->ISPR1 |= NewPriority;
break;
case CAN_RX_IRQ_N:
case CAN_TX_IRQ_N:
case SPI_IRQ_N:
case TIM1_OVF_IRQ_N:
ITC->ISPR2 &= Mask;
ITC->ISPR2 |= NewPriority;
break;
case TIM1_CAPCOM_IRQ_N:
case TIM2_OVF_IRQ_N:
case TIM2_CAPCOM_IRQ_N:
case TIM3_OVF_IRQ_N:
ITC->ISPR3 &= Mask;
ITC->ISPR3 |= NewPriority;
break;
case TIM3_CAPCOM_IRQ_N:
case USART_TX_IRQ_N:
case USART_RX_IRQ_N:
case I2C_IRQ_N:
ITC->ISPR4 &= Mask;
ITC->ISPR4 |= NewPriority;
break;
case LINUART_TX_IRQ_N:
case LINUART_RX_IRQ_N:
case ADC_IRQ_N:
case TIM4_OVF_IRQ_N:
ITC->ISPR5 &= Mask;
ITC->ISPR5 |= NewPriority;
break;
case EEPROM_EEC_IRQ_N:
ITC->ISPR6 &= Mask;
ITC->ISPR6 |= NewPriority;
break;
default:
break;
}
}
/**
* @}
*/
/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -