-/*******************************************************************************\r
- * (c) Copyright 2009 Actel Corporation. All rights reserved.\r
- * \r
- * SVN $Revision: 2840 $\r
- * SVN $Date: 2010-07-20 17:00:32 +0100 (Tue, 20 Jul 2010) $\r
- */\r
-#include "mss_ace.h"\r
-#include "mss_ace_configurator.h"\r
-#include "../../CMSIS/a2fxxxm3.h"\r
-#include "../../CMSIS/mss_assert.h"\r
-#include "../../drivers_config/mss_ace/ace_handles.h"\r
-#include "../../drivers_config/mss_ace/ace_config.h"\r
-#include <string.h>\r
-\r
-#ifdef __cplusplus\r
-extern "C" {\r
-#endif \r
-\r
-#define MAX_FULL_FLAG_NAME_LENGTH (MAX_CHANNEL_NAME_LENGTH + MAX_FLAG_NAME_LENGTH + 1)\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- * Number of flag types supported.\r
- * the supported flag types are:\r
- * - BASIC_THRESHOLD_OVER\r
- * - BASIC_THRESHOLD_UNDER\r
- * - STATE_FILTERED_OVER\r
- * - STATE_FILTERED_UNDER\r
- * - DUAL_HYSTERESIS_OVER\r
- * - DUAL_HYSTERESIS_UNDER\r
- * - IPMI_HYSTERESIS_OVER\r
- * - IPMI_HYSTERESIS_UNDER\r
- */\r
-#define NB_OF_FLAG_TYPES 8\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#define THRESHOLD_FLAG0 0u\r
-#define THRESHOLD_FLAG1 1u\r
-#define THRESHOLD_FLAG2 2u\r
-#define THRESHOLD_FLAG3 3u\r
-#define THRESHOLD_FLAG4 4u\r
-#define THRESHOLD_FLAG5 5u\r
-#define THRESHOLD_FLAG6 6u\r
-#define THRESHOLD_FLAG7 7u\r
-#define THRESHOLD_FLAG8 8u\r
-#define THRESHOLD_FLAG9 9u\r
-#define THRESHOLD_FLAG10 10u\r
-#define THRESHOLD_FLAG11 11u\r
-#define THRESHOLD_FLAG12 12u\r
-#define THRESHOLD_FLAG13 13u\r
-#define THRESHOLD_FLAG14 14u\r
-#define THRESHOLD_FLAG15 15u\r
-#define THRESHOLD_FLAG16 16u\r
-#define THRESHOLD_FLAG17 17u\r
-#define THRESHOLD_FLAG18 18u\r
-#define THRESHOLD_FLAG19 19u\r
-#define THRESHOLD_FLAG20 20u\r
-#define THRESHOLD_FLAG21 21u\r
-#define THRESHOLD_FLAG22 22u\r
-#define THRESHOLD_FLAG23 23u\r
-#define THRESHOLD_FLAG24 24u\r
-#define THRESHOLD_FLAG25 25u\r
-#define THRESHOLD_FLAG26 26u\r
-#define THRESHOLD_FLAG27 27u\r
-#define THRESHOLD_FLAG28 28u\r
-#define THRESHOLD_FLAG29 29u\r
-#define THRESHOLD_FLAG30 30u\r
-#define THRESHOLD_FLAG31 31u\r
-#define NB_OF_THRESHOLD_IRQ 32u\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-void ace_init_flags( void );\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- * Flag interrupots routines function prototypes\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag0_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag0_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag1_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag1_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag2_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag2_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag3_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag3_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag4_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag4_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag5_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag5_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag6_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag6_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag7_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag7_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag8_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag8_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag9_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag9_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag10_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag10_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag11_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag11_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag12_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag12_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag13_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag13_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag14_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag14_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag15_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag15_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag16_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag16_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag17_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag17_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag18_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag18_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag19_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag19_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag20_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag20_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag21_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag21_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag22_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag22_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag23_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag23_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag24_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag24_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag25_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag25_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag26_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag26_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag27_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag27_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag28_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag28_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag29_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag29_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag30_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag30_IRQHandler( void );\r
-#endif\r
-\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag31_IRQHandler( void );\r
-#else\r
-void ACE_PPE_Flag31_IRQHandler( void );\r
-#endif\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
-extern ppe_flag_desc_t g_ppe_flags_desc_table[ACE_NB_OF_PPE_FLAGS];\r
-#endif\r
-\r
-extern ace_channel_desc_t g_ace_channel_desc_table[ACE_NB_OF_INPUT_CHANNELS];\r
-\r
-extern ace_adc_config_t g_ace_adc_config[ACE_NB_OF_ADC];\r
-\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
-/*-------------------------------------------------------------------------*//**\r
- Lookup table indexed on flag_id_t of the index of the flag's descriptor index\r
- in the flag descriptors table g_ppe_flags_desc_table[]\r
- */\r
-static ace_flag_handle_t g_ppe_flag_handles_lut[NB_OF_PPE_FLAGS];\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-static flag_isr_t g_ppe_flags_isr_lut[NB_OF_PPE_FLAGS];\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-static global_flag_isr_t g_ppe_global_flags_isr;\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-static channel_flag_isr_t g_ppe_channel_flags_isr_lut[ACE_NB_OF_INPUT_CHANNELS];\r
-#endif\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- Intialise the ACE driver's internal data structures used by flag control\r
- functions.\r
- */\r
-void ace_init_flags( void )\r
-{\r
- /* Ensure the generated ACE configuration files are consistent. */\r
- ASSERT(NB_OF_ACE_FLAG_HANDLES == ACE_NB_OF_PPE_FLAGS);\r
- \r
-#if (ACE_NB_OF_PPE_FLAGS > 0) \r
- {\r
- uint8_t flag_idx;\r
- uint8_t channel_idx;\r
- \r
- for ( flag_idx = 0u; flag_idx < (uint8_t)NB_OF_PPE_FLAGS; ++flag_idx )\r
- {\r
- g_ppe_flags_isr_lut[flag_idx] = 0;\r
- g_ppe_flag_handles_lut[flag_idx] = INVALID_FLAG_HANDLE;\r
- }\r
- \r
- for ( flag_idx = 0u; flag_idx < (uint8_t)ACE_NB_OF_PPE_FLAGS; ++flag_idx )\r
- {\r
- ASSERT( g_ppe_flags_desc_table[flag_idx].flag_id < NB_OF_PPE_FLAGS );\r
- g_ppe_flag_handles_lut[g_ppe_flags_desc_table[flag_idx].flag_id] = (ace_flag_handle_t)flag_idx;\r
- }\r
- \r
- for ( channel_idx = 0u; channel_idx < (uint8_t)ACE_NB_OF_INPUT_CHANNELS; ++channel_idx )\r
- {\r
- g_ppe_channel_flags_isr_lut[channel_idx] = 0;\r
- }\r
- \r
- g_ppe_global_flags_isr = 0u;\r
- }\r
-#endif\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-uint32_t ACE_is_hysteresis_flag( ace_flag_handle_t flag_handle )\r
-{\r
- uint32_t hysteresis = 0u;\r
- \r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- ASSERT( flag_handle < NB_OF_ACE_FLAG_HANDLES );\r
- \r
- if ( g_ppe_flags_desc_table[flag_handle].flag_type >= DUAL_HYSTERESIS_OVER )\r
- {\r
- hysteresis = 1u;\r
- }\r
-#endif\r
- return hysteresis;\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-uint32_t ACE_is_under_flag\r
-(\r
- ace_flag_handle_t flag_handle\r
-)\r
-{\r
- uint32_t is_under = 0;\r
- \r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- const uint32_t flag_type_lut[NB_OF_FLAG_TYPES] =\r
- {\r
- 0, /* BASIC_THRESHOLD_OVER */\r
- 1, /* BASIC_THRESHOLD_UNDER */\r
- 0, /* STATE_FILTERED_OVER */\r
- 1, /* STATE_FILTERED_UNDER */\r
- 0, /* DUAL_HYSTERESIS_OVER */\r
- 1, /* DUAL_HYSTERESIS_UNDER */\r
- 0, /* IPMI_HYSTERESIS_OVER */\r
- 1, /* IPMI_HYSTERESIS_UNDER */\r
- };\r
- \r
- ASSERT(flag_handle < ACE_NB_OF_PPE_FLAGS);\r
- if (flag_handle < ACE_NB_OF_PPE_FLAGS)\r
- {\r
- uint8_t flag_type;\r
- flag_type = g_ppe_flags_desc_table[flag_handle].flag_type;\r
- ASSERT(flag_type < NB_OF_FLAG_TYPES);\r
- if (flag_type < NB_OF_FLAG_TYPES)\r
- {\r
- is_under = flag_type_lut[flag_type];\r
- }\r
- }\r
-#endif\r
- return is_under;\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- Mask of the threshold value bits within a PPE RAM meory location holding the\r
- threshold value for a flag.\r
- */\r
-#define PPE_RAM_THRESHOLD_MASK 0x0000FFFFuL\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- * TODO: handle IPMI hysteresis flags\r
- */\r
-void ACE_set_flag_threshold\r
-(\r
- ace_flag_handle_t flag_handle,\r
- uint16_t new_threshold\r
-)\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- uint16_t ppe_offset;\r
- \r
- ASSERT( flag_handle < NB_OF_ACE_FLAG_HANDLES );\r
- \r
- if ( flag_handle < NB_OF_ACE_FLAG_HANDLES )\r
- {\r
- \r
- ppe_offset = g_ppe_flags_desc_table[flag_handle].threshold_ppe_offset;\r
- \r
- if ( ACE_is_hysteresis_flag( flag_handle ) == 0u )\r
- {\r
- ACE->PPE_RAM_DATA[ppe_offset] = (ACE->PPE_RAM_DATA[ppe_offset] & (uint32_t)~PPE_RAM_THRESHOLD_MASK) + new_threshold;\r
- }\r
- else\r
- {\r
- uint16_t high_threshold;\r
- uint16_t low_threshold;\r
- ace_channel_handle_t channel_handle;\r
- uint16_t hysteresis;\r
- uint32_t adc_id;\r
- uint16_t adc_resolution;\r
- \r
- high_threshold = (uint16_t)(ACE->PPE_RAM_DATA[ppe_offset] & PPE_RAM_THRESHOLD_MASK);\r
- low_threshold = (uint16_t)(ACE->PPE_RAM_DATA[ppe_offset + 1u] & PPE_RAM_THRESHOLD_MASK);\r
- ASSERT(high_threshold > low_threshold);\r
- hysteresis = (uint16_t)(high_threshold - low_threshold) / 2u;\r
- \r
- channel_handle = g_ppe_flags_desc_table[flag_handle].channel_handle;\r
- adc_id = (uint32_t)(g_ace_channel_desc_table[channel_handle].signal_id) >> 4u;\r
- ASSERT( adc_id < (uint32_t)ACE_NB_OF_ADC );\r
- \r
- if ( adc_id < (uint32_t)ACE_NB_OF_ADC )\r
- {\r
- adc_resolution = g_ace_adc_config[adc_id].adc_resolution - 1u;\r
- \r
- high_threshold = new_threshold + hysteresis;\r
- if ( high_threshold > adc_resolution )\r
- {\r
- high_threshold = adc_resolution;\r
- }\r
- \r
- if ( hysteresis > new_threshold )\r
- {\r
- low_threshold = 1u;\r
- }\r
- else\r
- {\r
- low_threshold = new_threshold - hysteresis;\r
- }\r
- \r
- ACE->PPE_RAM_DATA[ppe_offset] = (ACE->PPE_RAM_DATA[ppe_offset] & ~PPE_RAM_THRESHOLD_MASK) + high_threshold;\r
- ACE->PPE_RAM_DATA[ppe_offset + 1u] = (ACE->PPE_RAM_DATA[ppe_offset + 1u] & (uint32_t)~PPE_RAM_THRESHOLD_MASK) + low_threshold;\r
- }\r
- }\r
- }\r
-#endif\r
-}\r
-\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#define FLAG_OVER_UNDER_MASK 0x01u\r
-#define FLAG_OVER 0x00u\r
-#define FLAF_UNDER 0x01\r
-\r
-void ACE_set_flag_assertion\r
-(\r
- ace_flag_handle_t flag_handle,\r
- uint16_t assertion_value\r
-)\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- uint16_t ppe_offset;\r
- \r
- ASSERT( flag_handle < NB_OF_ACE_FLAG_HANDLES );\r
- \r
- if ( flag_handle < NB_OF_ACE_FLAG_HANDLES )\r
- {\r
- if (ACE_is_hysteresis_flag(flag_handle))\r
- {\r
- uint8_t flag_direction;\r
- flag_direction = g_ppe_flags_desc_table[flag_handle].flag_type & FLAG_OVER_UNDER_MASK;\r
- \r
- if ( FLAG_OVER == flag_direction )\r
- {\r
- ppe_offset = g_ppe_flags_desc_table[flag_handle].threshold_ppe_offset;\r
- }\r
- else\r
- {\r
- ppe_offset = g_ppe_flags_desc_table[flag_handle].threshold_ppe_offset + 1u;\r
- }\r
- }\r
- else\r
- {\r
- ppe_offset = g_ppe_flags_desc_table[flag_handle].threshold_ppe_offset;\r
- }\r
- ACE->PPE_RAM_DATA[ppe_offset] = (ACE->PPE_RAM_DATA[ppe_offset] & ~PPE_RAM_THRESHOLD_MASK) + assertion_value;\r
- }\r
-#endif\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-void ACE_set_flag_deassertion\r
-(\r
- ace_flag_handle_t flag_handle,\r
- uint16_t assertion_value\r
-)\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- uint16_t ppe_offset;\r
- \r
- ASSERT( flag_handle < NB_OF_ACE_FLAG_HANDLES );\r
- ASSERT(ACE_is_hysteresis_flag(flag_handle));\r
- \r
- if ((flag_handle < NB_OF_ACE_FLAG_HANDLES) && (ACE_is_hysteresis_flag(flag_handle)))\r
- {\r
- uint8_t flag_direction;\r
- flag_direction = g_ppe_flags_desc_table[flag_handle].flag_type & FLAG_OVER_UNDER_MASK;\r
- \r
- if ( FLAG_OVER == flag_direction )\r
- {\r
- ppe_offset = g_ppe_flags_desc_table[flag_handle].threshold_ppe_offset + 1u;\r
- }\r
- else\r
- {\r
- ppe_offset = g_ppe_flags_desc_table[flag_handle].threshold_ppe_offset;\r
- }\r
- \r
- ACE->PPE_RAM_DATA[ppe_offset] = (ACE->PPE_RAM_DATA[ppe_offset] & ~PPE_RAM_THRESHOLD_MASK) + assertion_value;\r
- }\r
-#endif\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-void\r
-ACE_set_flag_hysteresis\r
-(\r
- ace_flag_handle_t flag_handle,\r
- uint16_t adc_hysteresis\r
-)\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- uint16_t ppe_offset;\r
- uint32_t high_threshold;\r
- uint32_t low_threshold;\r
- uint32_t nominal_threshold;\r
- uint16_t adc_resolution;\r
- uint32_t adc_id;\r
- \r
- ASSERT( flag_handle < NB_OF_ACE_FLAG_HANDLES );\r
- ASSERT(ACE_is_hysteresis_flag(flag_handle));\r
- \r
- if ( ( flag_handle < NB_OF_ACE_FLAG_HANDLES ) && ( ACE_is_hysteresis_flag( flag_handle ) ) )\r
- {\r
- ace_channel_handle_t channel_handle;\r
- \r
- ppe_offset = g_ppe_flags_desc_table[flag_handle].threshold_ppe_offset;\r
- \r
- high_threshold = ACE->PPE_RAM_DATA[ppe_offset] & PPE_RAM_THRESHOLD_MASK;\r
- low_threshold = ACE->PPE_RAM_DATA[ppe_offset + 1u] & PPE_RAM_THRESHOLD_MASK;\r
- ASSERT(high_threshold > low_threshold);\r
- nominal_threshold = (low_threshold + ((high_threshold - low_threshold) / 2u));\r
- \r
- channel_handle = g_ppe_flags_desc_table[flag_handle].channel_handle;\r
- adc_id = (uint32_t)((uint32_t)g_ace_channel_desc_table[channel_handle].signal_id >> 4u);\r
- ASSERT( adc_id < (uint32_t)ACE_NB_OF_ADC );\r
- \r
- if ( adc_id < (uint32_t)ACE_NB_OF_ADC )\r
- {\r
- adc_resolution = g_ace_adc_config[adc_id].adc_resolution;\r
- \r
- high_threshold = nominal_threshold + adc_hysteresis;\r
- if ( high_threshold > adc_resolution )\r
- {\r
- high_threshold = (uint32_t)adc_resolution - 1u;\r
- }\r
- \r
- if ( adc_hysteresis > nominal_threshold )\r
- {\r
- low_threshold = 1u;\r
- }\r
- else\r
- {\r
- low_threshold = nominal_threshold - adc_hysteresis;\r
- }\r
- \r
- ACE->PPE_RAM_DATA[ppe_offset] = (ACE->PPE_RAM_DATA[ppe_offset] & ~PPE_RAM_THRESHOLD_MASK) + high_threshold;\r
- ACE->PPE_RAM_DATA[ppe_offset + 1u] = (ACE->PPE_RAM_DATA[ppe_offset + 1u] & ~PPE_RAM_THRESHOLD_MASK) + low_threshold;\r
- }\r
- }\r
-#endif\r
-}\r
-\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-void\r
-ACE_set_channel_hysteresis\r
-(\r
- ace_channel_handle_t channel_handle,\r
- uint16_t adc_hysteresis\r
-)\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- ace_flag_handle_t flag_handle;\r
- \r
- ASSERT( channel_handle < NB_OF_ACE_CHANNEL_HANDLES );\r
- \r
- if ( channel_handle < NB_OF_ACE_CHANNEL_HANDLES )\r
- {\r
- uint16_t i;\r
- \r
- for( i = 0u; i < g_ace_channel_desc_table[channel_handle].nb_of_flags; ++i )\r
- {\r
- flag_handle = (ace_flag_handle_t)g_ace_channel_desc_table[channel_handle].p_flags_array[i];\r
- ACE_set_flag_hysteresis( flag_handle, adc_hysteresis );\r
- }\r
- }\r
-#endif\r
-}\r
-\r
-/*==============================================================================\r
- *\r
- */\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- Masking a flag_id with FLAG_BIT_OFFSET_MASK results in the offset of the \r
- flag bit within a PPE__FLAGSn register.\r
- */\r
-#define FLAG_BIT_OFFSET_MASK 0x0000001FuL\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- Shifting right a flag_id by FLAG_PPE_REG_SHIFT results in identifying the\r
- PPE_FLAGSn or PPE_SFFLAGS the flags belongs to.\r
- */\r
-#define FLAG_PPE_REG_SHIFT 5u\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- There is a set of 5 PPE flag registers to control and report status of the PPE\r
- flags resulting in the PPE flags being grouped into 5 separate flag groups at\r
- the register level. Each register provides status or control for 32 flags.\r
- */\r
-#define NB_OF_FLAG_GROUPS 5u\r
-#define NB_OF_FLAGS_PER_GROUP 32u\r
-\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
-/*-------------------------------------------------------------------------*//**\r
- Lookup table of the address PPE_FLAGSn registers for fast reading of PPE\r
- status.\r
- */\r
-static volatile uint32_t * const g_ppe_flags_regs_lut[NB_OF_FLAG_GROUPS] =\r
-{\r
- &ACE->PPE_FLAGS0,\r
- &ACE->PPE_FLAGS1,\r
- &ACE->PPE_FLAGS2,\r
- &ACE->PPE_FLAGS3,\r
- &ACE->PPE_SFFLAGS\r
-};\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- Lookup table of the address of the PPE flags interrupt enable registers.\r
- */\r
-static uint32_t volatile * const flags_irq_enable_regs_lut[NB_OF_FLAG_GROUPS] =\r
-{\r
- &ACE->PPE_FLAGS0_IRQ_EN,\r
- &ACE->PPE_FLAGS1_IRQ_EN,\r
- &ACE->PPE_FLAGS2_IRQ_EN,\r
- &ACE->PPE_FLAGS3_IRQ_EN,\r
- &ACE->PPE_SFFLAGS_IRQ_EN\r
-};\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- Lookup table of the address of the PPE flags interrupt status registers.\r
- */\r
-static uint32_t volatile const * const flags_irq_status_regs_lut[NB_OF_FLAG_GROUPS] =\r
-{\r
- &ACE->PPE_FLAGS0_IRQ,\r
- &ACE->PPE_FLAGS1_IRQ,\r
- &ACE->PPE_FLAGS2_IRQ,\r
- &ACE->PPE_FLAGS3_IRQ,\r
- &ACE->PPE_SFFLAGS_IRQ\r
-};\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- Lookup table of the address of the PPE flags interrupt clearing registers.\r
- */\r
-static uint32_t volatile * const flags_irq_clear_regs_lut[NB_OF_FLAG_GROUPS] =\r
-{\r
- &ACE->PPE_FLAGS0_IRQ_CLR,\r
- &ACE->PPE_FLAGS1_IRQ_CLR,\r
- &ACE->PPE_FLAGS2_IRQ_CLR,\r
- &ACE->PPE_FLAGS3_IRQ_CLR,\r
- &ACE->PPE_SFFLAGS_IRQ_CLR\r
-};\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-static const IRQn_Type threshold_irqn_lut[NB_OF_THRESHOLD_IRQ] =\r
-{\r
- ACE_PPE_Flag0_IRQn,\r
- ACE_PPE_Flag1_IRQn,\r
- ACE_PPE_Flag2_IRQn,\r
- ACE_PPE_Flag3_IRQn,\r
- ACE_PPE_Flag4_IRQn,\r
- ACE_PPE_Flag5_IRQn,\r
- ACE_PPE_Flag6_IRQn,\r
- ACE_PPE_Flag7_IRQn,\r
- ACE_PPE_Flag8_IRQn,\r
- ACE_PPE_Flag9_IRQn,\r
- ACE_PPE_Flag10_IRQn,\r
- ACE_PPE_Flag11_IRQn,\r
- ACE_PPE_Flag12_IRQn,\r
- ACE_PPE_Flag13_IRQn,\r
- ACE_PPE_Flag14_IRQn,\r
- ACE_PPE_Flag15_IRQn,\r
- ACE_PPE_Flag16_IRQn,\r
- ACE_PPE_Flag17_IRQn,\r
- ACE_PPE_Flag18_IRQn,\r
- ACE_PPE_Flag19_IRQn,\r
- ACE_PPE_Flag20_IRQn,\r
- ACE_PPE_Flag21_IRQn,\r
- ACE_PPE_Flag22_IRQn,\r
- ACE_PPE_Flag23_IRQn,\r
- ACE_PPE_Flag24_IRQn,\r
- ACE_PPE_Flag25_IRQn,\r
- ACE_PPE_Flag26_IRQn,\r
- ACE_PPE_Flag27_IRQn,\r
- ACE_PPE_Flag28_IRQn,\r
- ACE_PPE_Flag29_IRQn,\r
- ACE_PPE_Flag30_IRQn,\r
- ACE_PPE_Flag31_IRQn\r
-};\r
-#endif\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- */\r
-ace_flag_handle_t\r
-ACE_get_flag_handle\r
-(\r
- const uint8_t * p_sz_full_flag_name\r
-)\r
-{\r
- ace_flag_handle_t flag_handle = INVALID_FLAG_HANDLE;\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- ace_flag_handle_t flag_idx;\r
- \r
- for ( flag_idx = (ace_flag_handle_t)0; flag_idx < NB_OF_ACE_FLAG_HANDLES; ++flag_idx )\r
- {\r
- if ( g_ppe_flags_desc_table[flag_idx].p_sz_flag_name != 0 )\r
- {\r
- int32_t diff;\r
- diff = strncmp( (const char *)p_sz_full_flag_name, (const char *)g_ppe_flags_desc_table[flag_idx].p_sz_flag_name, (size_t)MAX_FULL_FLAG_NAME_LENGTH );\r
- if ( 0 == diff )\r
- {\r
- /* flag name found. */\r
- flag_handle = (ace_flag_handle_t)flag_idx;\r
- break;\r
- }\r
- }\r
- }\r
-#endif\r
- return flag_handle;\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- */\r
-int32_t\r
-ACE_get_flag_status\r
-(\r
- ace_flag_handle_t flag_handle\r
-)\r
-{\r
- int32_t flag_state = UNKNOWN_FLAG;\r
-#if (ACE_NB_OF_PPE_FLAGS > 0) \r
- ppe_flag_id_t flag_id;\r
- \r
- ASSERT( flag_handle < NB_OF_ACE_FLAG_HANDLES );\r
- \r
- if ( flag_handle < NB_OF_ACE_FLAG_HANDLES )\r
- {\r
- uint32_t flag_bit_offset;\r
- uint32_t ppe_flag_group;\r
- uint32_t flag_id_mask;\r
- uint32_t flag_status;\r
-\r
- flag_id = g_ppe_flags_desc_table[flag_handle].flag_id;\r
- \r
- if ( flag_id < NB_OF_PPE_FLAGS )\r
- {\r
- flag_bit_offset = ((uint32_t)flag_id & FLAG_BIT_OFFSET_MASK);\r
- ppe_flag_group = ((uint32_t)flag_id >> FLAG_PPE_REG_SHIFT);\r
- flag_id_mask = 1uL << flag_bit_offset;\r
- flag_status = *(g_ppe_flags_regs_lut[ppe_flag_group]) & flag_id_mask;\r
- if ( flag_status > 0u )\r
- {\r
- flag_state = FLAG_ASSERTED;\r
- }\r
- else\r
- {\r
- flag_state = FLAG_NOT_ASSERTED;\r
- }\r
- }\r
-\r
- }\r
-#endif\r
- return flag_state;\r
-}\r
-\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- */\r
-const uint8_t *\r
-ACE_get_flag_name\r
-(\r
- ace_flag_handle_t flag_handle\r
-)\r
-{\r
- const uint8_t * psz_flag_name = 0;\r
-#if (ACE_NB_OF_PPE_FLAGS > 0) \r
- ASSERT( flag_handle < NB_OF_ACE_FLAG_HANDLES );\r
- \r
- if ( flag_handle < NB_OF_ACE_FLAG_HANDLES )\r
- {\r
- psz_flag_name = g_ppe_flags_desc_table[flag_handle].p_sz_flag_name;\r
- }\r
-#endif\r
- return psz_flag_name;\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- */\r
-ace_channel_handle_t\r
-ACE_get_flag_channel\r
-(\r
- ace_flag_handle_t flag_handle\r
-)\r
-{\r
- ace_channel_handle_t channel_handle = INVALID_CHANNEL_HANDLE;\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- ASSERT( flag_handle < NB_OF_ACE_FLAG_HANDLES );\r
- \r
- if ( flag_handle < NB_OF_ACE_FLAG_HANDLES )\r
- {\r
- channel_handle = g_ppe_flags_desc_table[flag_handle].channel_handle;\r
- }\r
-#endif\r
- return channel_handle;\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- */\r
-uint32_t\r
-ACE_get_channel_flag_count\r
-(\r
- ace_channel_handle_t channel_handle\r
-)\r
-{\r
- uint32_t flag_count = 0;\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- ASSERT( channel_handle < ACE_NB_OF_INPUT_CHANNELS );\r
- if (channel_handle < ACE_NB_OF_INPUT_CHANNELS)\r
- {\r
- flag_count = g_ace_channel_desc_table[channel_handle].nb_of_flags;\r
- }\r
-#endif\r
- return flag_count;\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- \r
- */\r
-ace_flag_handle_t\r
-ACE_get_channel_first_flag\r
-(\r
- ace_channel_handle_t channel_handle,\r
- uint16_t * iterator\r
-)\r
-{\r
- ace_flag_handle_t flag_handle = INVALID_FLAG_HANDLE;\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- ASSERT( channel_handle < NB_OF_ACE_CHANNEL_HANDLES);\r
- \r
- *iterator = 0u;\r
- \r
- if ( channel_handle < NB_OF_ACE_CHANNEL_HANDLES)\r
- {\r
- if ( g_ace_channel_desc_table[channel_handle].nb_of_flags > 0u )\r
- {\r
- flag_handle = (ace_flag_handle_t)g_ace_channel_desc_table[channel_handle].p_flags_array[*iterator];\r
- }\r
- }\r
-#endif \r
- return flag_handle;\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- \r
- */\r
-ace_flag_handle_t\r
-ACE_get_channel_next_flag\r
-(\r
- ace_channel_handle_t channel_handle,\r
- uint16_t * iterator\r
-)\r
-{\r
- ace_flag_handle_t flag_handle = INVALID_FLAG_HANDLE;\r
-#if (ACE_NB_OF_PPE_FLAGS > 0) \r
- ASSERT( channel_handle < NB_OF_ACE_CHANNEL_HANDLES);\r
-\r
- if ( channel_handle < NB_OF_ACE_CHANNEL_HANDLES)\r
- {\r
- ++(*iterator);\r
- \r
- if ( *iterator >= g_ace_channel_desc_table[channel_handle].nb_of_flags )\r
- {\r
- *iterator = 0u;\r
- }\r
- \r
- if ( g_ace_channel_desc_table[channel_handle].nb_of_flags > 0u )\r
- {\r
- flag_handle = (ace_flag_handle_t)g_ace_channel_desc_table[channel_handle].p_flags_array[*iterator];\r
- }\r
- }\r
-#endif\r
- return flag_handle;\r
-}\r
-\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-void ACE_enable_channel_flags_irq\r
-(\r
- ace_channel_handle_t channel_handle\r
-)\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- uint32_t flag_idx;\r
- ace_flag_handle_t flag_handle;\r
- \r
- ASSERT( channel_handle < NB_OF_ACE_CHANNEL_HANDLES );\r
- \r
- if ( channel_handle < NB_OF_ACE_CHANNEL_HANDLES )\r
- {\r
- for ( flag_idx = 0u; flag_idx < g_ace_channel_desc_table[channel_handle].nb_of_flags; ++flag_idx )\r
- {\r
- flag_handle = (ace_flag_handle_t)g_ace_channel_desc_table[channel_handle].p_flags_array[flag_idx];\r
- ACE_enable_flag_irq( flag_handle );\r
- }\r
- }\r
-#endif\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-void ACE_disable_channel_flags_irq\r
-(\r
- ace_channel_handle_t channel_handle\r
-)\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- uint32_t flag_idx;\r
- ace_flag_handle_t flag_handle;\r
- \r
- ASSERT( channel_handle < NB_OF_ACE_CHANNEL_HANDLES );\r
- \r
- if ( channel_handle < NB_OF_ACE_CHANNEL_HANDLES )\r
- {\r
- for ( flag_idx = 0u; flag_idx < g_ace_channel_desc_table[channel_handle].nb_of_flags; ++flag_idx )\r
- {\r
- flag_handle = (ace_flag_handle_t)g_ace_channel_desc_table[channel_handle].p_flags_array[flag_idx];\r
- ACE_disable_flag_irq( flag_handle );\r
- }\r
- }\r
-#endif\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-void ACE_clear_channel_flags_irq\r
-(\r
- ace_channel_handle_t channel_handle\r
-)\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- uint32_t flag_idx;\r
- ace_flag_handle_t flag_handle;\r
- \r
- ASSERT( channel_handle < NB_OF_ACE_CHANNEL_HANDLES );\r
- \r
- if ( channel_handle < NB_OF_ACE_CHANNEL_HANDLES )\r
- {\r
- for ( flag_idx = 0u; flag_idx < g_ace_channel_desc_table[channel_handle].nb_of_flags; ++flag_idx )\r
- {\r
- flag_handle = (ace_flag_handle_t)g_ace_channel_desc_table[channel_handle].p_flags_array[flag_idx];\r
- ACE_clear_flag_irq( flag_handle );\r
- }\r
- }\r
-#endif\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-void ACE_enable_flag_irq\r
-(\r
- ace_flag_handle_t flag_handle\r
-)\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- ASSERT( flag_handle < NB_OF_ACE_FLAG_HANDLES );\r
- \r
- if ( flag_handle < NB_OF_ACE_FLAG_HANDLES )\r
- {\r
- ppe_flag_id_t flag_id;\r
- uint32_t flag_bit_offset;\r
- uint32_t ppe_flag_group;\r
- uint32_t flag_id_mask;\r
- \r
- flag_id = g_ppe_flags_desc_table[flag_handle].flag_id;\r
- \r
- ASSERT( flag_id < NB_OF_PPE_FLAGS );\r
- \r
- flag_bit_offset = ((uint32_t)flag_id & FLAG_BIT_OFFSET_MASK);\r
- ppe_flag_group = ((uint32_t)flag_id >> FLAG_PPE_REG_SHIFT);\r
- flag_id_mask = 1uL << flag_bit_offset;\r
- \r
- ASSERT( ppe_flag_group < NB_OF_FLAG_GROUPS );\r
- \r
- if ( ppe_flag_group < NB_OF_FLAG_GROUPS )\r
- {\r
- *(flags_irq_enable_regs_lut[ppe_flag_group]) |= flag_id_mask;\r
- }\r
- \r
- NVIC_EnableIRQ( threshold_irqn_lut[flag_bit_offset] );\r
- }\r
-#endif\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-void ACE_disable_flag_irq\r
-(\r
- ace_flag_handle_t flag_handle\r
-)\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- ASSERT( flag_handle < NB_OF_ACE_FLAG_HANDLES );\r
- \r
- if ( flag_handle < NB_OF_ACE_FLAG_HANDLES )\r
- {\r
- ppe_flag_id_t flag_id;\r
- uint32_t flag_bit_offset;\r
- uint32_t ppe_flag_group;\r
- uint32_t flag_id_mask;\r
- \r
- flag_id = g_ppe_flags_desc_table[flag_handle].flag_id;\r
- \r
- ASSERT( flag_id < NB_OF_PPE_FLAGS );\r
- \r
- flag_bit_offset = ((uint32_t)flag_id & FLAG_BIT_OFFSET_MASK);\r
- ppe_flag_group = ((uint32_t)flag_id >> FLAG_PPE_REG_SHIFT);\r
- flag_id_mask = 1uL << flag_bit_offset;\r
- \r
- ASSERT( ppe_flag_group < NB_OF_FLAG_GROUPS );\r
- \r
- if ( ppe_flag_group < NB_OF_FLAG_GROUPS )\r
- {\r
- *(flags_irq_enable_regs_lut[ppe_flag_group]) &= (uint32_t)~flag_id_mask;\r
- }\r
- }\r
-#endif\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-void ACE_clear_flag_irq\r
-(\r
- ace_flag_handle_t flag_handle\r
-)\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- ASSERT( flag_handle < NB_OF_ACE_FLAG_HANDLES );\r
- \r
- if ( flag_handle < NB_OF_ACE_FLAG_HANDLES )\r
- {\r
- ppe_flag_id_t flag_id;\r
- uint32_t flag_bit_offset;\r
- uint32_t ppe_flag_group;\r
- uint32_t flag_id_mask;\r
- \r
- flag_id = g_ppe_flags_desc_table[flag_handle].flag_id;\r
- \r
- ASSERT( flag_id < NB_OF_PPE_FLAGS );\r
- \r
- flag_bit_offset = ((uint32_t)flag_id & FLAG_BIT_OFFSET_MASK);\r
- ppe_flag_group = ((uint32_t)flag_id >> FLAG_PPE_REG_SHIFT);\r
- flag_id_mask = 1uL << flag_bit_offset;\r
- \r
- ASSERT( ppe_flag_group < NB_OF_FLAG_GROUPS );\r
- \r
- if ( ppe_flag_group < NB_OF_FLAG_GROUPS )\r
- {\r
- *(flags_irq_clear_regs_lut[ppe_flag_group]) |= flag_id_mask;\r
- }\r
- }\r
-#endif\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-void ACE_register_flag_isr\r
-(\r
- ace_flag_handle_t flag_handle,\r
- flag_isr_t flag_isr\r
-)\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- ppe_flag_id_t flag_id;\r
- \r
- ASSERT( flag_handle < NB_OF_ACE_FLAG_HANDLES );\r
- \r
- if ( flag_handle < NB_OF_ACE_FLAG_HANDLES )\r
- {\r
- flag_id = g_ppe_flags_desc_table[flag_handle].flag_id;\r
- \r
- ASSERT( flag_id < NB_OF_PPE_FLAGS );\r
- \r
- if ( flag_id < NB_OF_PPE_FLAGS )\r
- {\r
- g_ppe_flags_isr_lut[flag_id] = flag_isr;\r
- }\r
- }\r
-#endif\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-void ACE_register_channel_flags_isr\r
-(\r
- ace_channel_handle_t channel_handle,\r
- channel_flag_isr_t channel_flag_isr\r
-)\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- ASSERT( channel_handle < NB_OF_ACE_CHANNEL_HANDLES );\r
- \r
- if ( channel_handle < NB_OF_ACE_CHANNEL_HANDLES )\r
- {\r
- g_ppe_channel_flags_isr_lut[channel_handle] = channel_flag_isr;\r
- }\r
-#endif\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-void ACE_register_global_flags_isr\r
-(\r
- global_flag_isr_t global_flag_isr\r
-)\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- g_ppe_global_flags_isr = global_flag_isr;\r
-#endif\r
-}\r
-\r
-\r
-/*==============================================================================\r
- *\r
- */\r
- \r
-/*-------------------------------------------------------------------------*//**\r
- * Actual PPE flag interrupt service routines:\r
- */\r
-\r
-static void process_flag_irq( uint8_t threshold_flag_id )\r
-{\r
-#if (ACE_NB_OF_PPE_FLAGS > 0)\r
- uint8_t flag_group;\r
- uint32_t threshold_flag_mask;\r
- ppe_flag_id_t flag_id;\r
- uint32_t irq_enable_reg;\r
- uint32_t irq_status_reg;\r
- uint32_t irq_active;\r
- \r
- threshold_flag_mask = 1uL << threshold_flag_id;\r
- \r
- \r
- for ( flag_group = 0u; flag_group < NB_OF_FLAG_GROUPS; ++flag_group )\r
- {\r
- irq_enable_reg = *flags_irq_enable_regs_lut[flag_group];\r
- irq_status_reg = *flags_irq_status_regs_lut[flag_group];\r
- irq_active = threshold_flag_mask & irq_enable_reg & irq_status_reg;\r
- \r
- if ( irq_active )\r
- {\r
- ace_flag_handle_t flag_handle;\r
- ace_channel_handle_t channel_handle;\r
- \r
- flag_id = (ppe_flag_id_t)((flag_group * NB_OF_FLAGS_PER_GROUP) + threshold_flag_id);\r
- flag_handle = g_ppe_flag_handles_lut[flag_id];\r
- \r
- /* Call individual flag handler */\r
- if ( g_ppe_flags_isr_lut[flag_id] != 0 ) \r
- {\r
- g_ppe_flags_isr_lut[flag_id]( flag_handle );\r
- }\r
- \r
- /* Call the channel flag handler. */\r
- channel_handle = g_ppe_flags_desc_table[flag_handle].channel_handle;\r
- if ( channel_handle < NB_OF_ACE_CHANNEL_HANDLES )\r
- {\r
- if ( g_ppe_channel_flags_isr_lut[channel_handle] != 0 )\r
- {\r
- g_ppe_channel_flags_isr_lut[channel_handle]( flag_handle );\r
- }\r
- }\r
- \r
- /* Call the global flag handler. */\r
- if ( g_ppe_global_flags_isr != 0 )\r
- {\r
- g_ppe_global_flags_isr( flag_handle, channel_handle );\r
- }\r
- \r
- /* Clear the flag interrupt */\r
- *flags_irq_clear_regs_lut[flag_group] |= threshold_flag_mask;\r
- }\r
- }\r
-#endif\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag0_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag0_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG0 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag0_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag1_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag1_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG1 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag1_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag2_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag2_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG2 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag2_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag3_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag3_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG3 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag3_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag4_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag4_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG4 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag4_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag5_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag5_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG5 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag5_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag6_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag6_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG6 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag6_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag7_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag7_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG7 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag7_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag8_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag8_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG8 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag8_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag9_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag9_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG9 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag9_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag10_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag10_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG10 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag10_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag11_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag11_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG11 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag11_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag12_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag12_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG12 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag12_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag13_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag13_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG13 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag13_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag14_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag14_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG14 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag14_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag15_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag15_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG15 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag15_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag16_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag16_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG16 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag16_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag17_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag17_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG17 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag17_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag18_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag18_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG18 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag18_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag19_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag19_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG19 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag19_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag20_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag20_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG20 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag20_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag21_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag21_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG21 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag21_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag22_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag22_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG22 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag22_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag23_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag23_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG23 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag23_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag24_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag24_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG24 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag24_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag25_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag25_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG25 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag25_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag26_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag26_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG26 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag26_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag27_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag27_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG27 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag27_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag28_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag28_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG28 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag28_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag29_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag29_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG29 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag29_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag30_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag30_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG30 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag30_IRQn );\r
-}\r
-\r
-/*-------------------------------------------------------------------------*//**\r
- *\r
- */\r
-#if defined(__GNUC__)\r
-__attribute__((__interrupt__)) void ACE_PPE_Flag31_IRQHandler( void )\r
-#else\r
-void ACE_PPE_Flag31_IRQHandler( void )\r
-#endif\r
-{\r
- process_flag_irq( THRESHOLD_FLAG31 );\r
- NVIC_ClearPendingIRQ( ACE_PPE_Flag31_IRQn );\r
-}\r
-\r
-#ifdef __cplusplus\r
-}\r
-#endif\r
-\r