blob: 21109b4c8b23c8fc332803ac3d35ef84d0fd2779 [file] [log] [blame]
/*****************************************************************************
* © 2015 Microchip Technology Inc. and its subsidiaries.
* You may use this software and any derivatives exclusively with
* Microchip products.
* THIS SOFTWARE IS SUPPLIED BY MICROCHIP "AS IS".
* NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS SOFTWARE,
* INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY,
* AND FITNESS FOR A PARTICULAR PURPOSE, OR ITS INTERACTION WITH MICROCHIP
* PRODUCTS, COMBINATION WITH ANY OTHER PRODUCTS, OR USE IN ANY APPLICATION.
* IN NO EVENT WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
* INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY KIND
* WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF MICROCHIP HAS
* BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE FORESEEABLE.
* TO THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP'S TOTAL LIABILITY ON ALL
* CLAIMS IN ANY WAY RELATED TO THIS SOFTWARE WILL NOT EXCEED THE AMOUNT OF
* FEES, IF ANY, THAT YOU HAVE PAID DIRECTLY TO MICROCHIP FOR THIS SOFTWARE.
* MICROCHIP PROVIDES THIS SOFTWARE CONDITIONALLY UPON YOUR ACCEPTANCE
* OF THESE TERMS.
******************************************************************************
Version Control Information (Perforce)
******************************************************************************
$Revision: #1 $
$DateTime: 2016/09/22 08:03:49 $
$Author: pramans $
Last Change: Initial Draft
******************************************************************************/
/** @file interrupt_nvic_perphl.c
* \brief Interrupt NVIC Peripheral Source File
* \author jvasanth
*
* This file implements the NVIC peripheral functions
******************************************************************************/
/** @defgroup Interrupt
* @{
*/
#include "common_lib.h"
#include "interrupt.h"
/* ------------------------------------------------------------------------------- */
/* NVIC Functions */
/* ------------------------------------------------------------------------------- */
/** Enable/Disable the NVIC IRQ in the NVIC interrupt controller
* @param nvic_num : NVIC number (see enum IRQn_Type)
* @param en_flag : 1 = Enable the NVIC IRQ, 0 = Disable the NVIC IRQ
*/
void p_interrupt_nvic_enable(IRQn_Type nvic_num, uint8_t en_flag)
{
if (en_flag) {
NVIC_EnableIRQ(nvic_num);
} else {
NVIC_DisableIRQ(nvic_num);
}
__DSB();
}
/** ecia_nvic_clr_en - Clear all NVIC external enables */
void p_interrupt_nvic_extEnables_clr(void)
{
uint32_t i, m;
m = (uint32_t)(MAX_IRQn) >> 5;
if ( (uint32_t)(MAX_IRQn) & 0x1Ful ) { m++; }
for ( i = 0ul; i < m ; i++ )
{
NVIC->ICER[i] = 0xfffffffful;
}
}
/** Clear all NVIC external enables and pending bits */
void p_interrupt_nvic_enpend_clr(void)
{
uint32_t i, m;
// Clear NVIC enables & pending status
m = (uint32_t)(MAX_IRQn) >> 5;
if ( (uint32_t)(MAX_IRQn) & 0x1Ful ) { m++; }
for ( i = 0ul; i < m ; i++ )
{
NVIC->ICER[i] = 0xfffffffful;
NVIC->ICPR[i] = 0xfffffffful;
}
}
/** Set NVIC external priorities to POR value */
void p_interrupt_nvic_priorities_default_set(void)
{
uint32_t i;
// Set POR default NVIC priority (highest)
for ( i = 0ul; i < (uint32_t)MAX_IRQn; i++ ) {
NVIC->IP[i] = 0u;
}
}
/** Set NVIC external priorities to specified priority (0 - 7)
* @param zero-based 3-bit priority value: 0=highest, 7=lowest.
* @note NVIC highest priority is the value 0, lowest is all 1's.
* Each external interrupt has an 8-bit register and the priority
* is left justified in the registers. MECxxx implements 8 priority
* levels or bits [7:5] in the register. Lowest priority = 0xE0
*/
void p_interrupt_nvic_priorities_set(uint8_t new_pri)
{
uint16_t i;
for ( i = 0ul; i < MAX_IRQn; i++ ) {
NVIC_SetPriority((IRQn_Type)i, new_pri);
}
}
/* end interrupt_nvic_perphl.c */
/** @}
*/