/***************************************************************************** | |
* © 2014 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. | |
*****************************************************************************/ | |
/** @file mec14xx_jtvic.c | |
*MEC14xx JTVIC | |
*/ | |
/** @defgroup MEC14xx Peripherals JTVIC | |
* @{ | |
*/ | |
#include "appcfg.h" | |
#include "platform.h" | |
#include "MEC14xx/mec14xx.h" | |
#include "MEC14xx/mec14xx_jtvic.h" | |
void jtvic_init(const JTVIC_CFG *ih_table, uint32_t disagg_bitmap, uint32_t cflags) | |
{ | |
uint32_t d; | |
uint8_t i, j, pidx; | |
JTVIC_CTRL->w = (1ul << 0); // Soft-Reset | |
d = 0ul; | |
if ( cflags & (1ul << 0) ) | |
{ | |
d = (1ul << 8); | |
} | |
JTVIC_CTRL->w = d; // HW does not automatically clear Soft-Reset | |
for (i = 0u; i < (MEC14xx_NUM_JTVIC_INTS); i++) { | |
pidx = i << 2; | |
for (j = 0u; j < 4u; j++) { | |
JTVIC_PRI->REG32[pidx+j] = (uint32_t)(ih_table[i].pri[j]); | |
} | |
d = ih_table[i].isr_addr & ~(1ul << 0); | |
if (disagg_bitmap & (1ul << i)) { | |
d |= (1ul << 0); // dis-aggregate this GIRQ | |
} | |
JTVIC_ACTRL->REG32[i] = d; | |
} | |
JTVIC_GROUP_EN_SET->w = 0xFFFFFFFFul; // Enable GIRQ08 - GIRQ18 (all) | |
} | |
/* Clear JTVIC GIRQn source bit | |
* | |
*/ | |
void jtvic_clr_source(uint8_t girq_num, uint8_t bit_num) | |
{ | |
if (girq_num < (MEC14xx_NUM_JTVIC_INTS)) | |
{ | |
bit_num &= 0x1Fu; | |
JTVIC_GIRQ->REGS[girq_num].SOURCE = (1ul << bit_num); | |
} | |
} | |
/* Disable GIRQn source with optional clearing of source. | |
* girq_num = [0, 18], 0=GIRQ08, 1=GIRQ09, ..., 18=GIRQ26 | |
* bit_num = [0, 31] | |
*/ | |
void jtvic_dis_clr_source(uint8_t girq_num, uint8_t bit_num, uint8_t clr_src) | |
{ | |
if (girq_num < (MEC14xx_NUM_JTVIC_INTS)) | |
{ | |
bit_num &= 0x1Fu; | |
JTVIC_GIRQ->REGS[girq_num].EN_CLR = (1ul << bit_num); | |
if ( 0 != clr_src ) | |
{ | |
JTVIC_GIRQ->REGS[girq_num].SOURCE = (1ul << bit_num); | |
} | |
} | |
} | |
/* Enable with optional source clear before enable. | |
* girq_num = [0, 18], 0=GIRQ08, 1=GIRQ09, ..., 18=GIRQ26 | |
* bit_num = [0, 31] | |
*/ | |
void jtvic_en_source(uint8_t girq_num, uint8_t bit_num, uint8_t clr_src) | |
{ | |
if (girq_num < (MEC14xx_NUM_JTVIC_INTS)) | |
{ | |
bit_num &= 0x1Fu; | |
if ( 0 != clr_src ) | |
{ | |
JTVIC_GIRQ->REGS[girq_num].SOURCE = (1ul << bit_num); | |
} | |
JTVIC_GIRQ->REGS[girq_num].EN_SET = (1ul << bit_num); | |
} | |
} | |
/* end mec14xx_jtvic.c */ | |
/** @} | |
*/ | |