/*******************************************************************************\r
* (c) Copyright 2009 Actel Corporation. All rights reserved.\r
- * \r
+ *\r
* SVN $Revision: 2905 $\r
* SVN $Date: 2010-08-20 14:03:28 +0100 (Fri, 20 Aug 2010) $\r
*/\r
\r
#ifdef __cplusplus\r
extern "C" {\r
-#endif \r
+#endif\r
\r
#define START_ADC_CONVERSION 0x80uL\r
\r
void ACE_init( void )\r
{\r
/* Initialize driver's internal data. */\r
- ace_init_flags();\r
- \r
+ #if (ACE_NB_OF_PPE_FLAGS > 0)\r
+ ace_init_flags();\r
+ #endif\r
+\r
/* Initialize the data structures used by conversion functions. */\r
ace_init_convert();\r
}\r
uint32_t data_valid;\r
\r
ASSERT( adc_id < NB_OF_ANALOG_MODULES );\r
- \r
+\r
if ( adc_id < (uint8_t)NB_OF_ANALOG_MODULES )\r
{\r
do {\r
data_valid = *adc_status_reg_lut[adc_id] & ADC_DATAVALID_MASK;\r
} while ( !data_valid );\r
- \r
+\r
result = (uint16_t)(*adc_status_reg_lut[adc_id] & ADC_RESULT_MASK);\r
}\r
return result;\r
\r
#define SDD_ENABLE_MASK 0x20uL\r
#define SDD_REG_SEL_MASK 0x40uL\r
- \r
+\r
#define DAC0_SYNC_EN_MASK 0x10uL\r
#define DAC1_SYNC_EN_MASK 0x20uL\r
#define DAC2_SYNC_EN_MASK 0x40uL\r
)\r
{\r
ASSERT( sdd_id < NB_OF_SDD );\r
- \r
+\r
if ( sdd_id < NB_OF_SDD )\r
{\r
const uint8_t sdd_2_quad_lut[NB_OF_SDD] = {0u, 2u, 4u};\r
uint8_t obd_mode_idx = 1u;\r
uint8_t chopping_mode_idx = 0u;\r
uint32_t saved_pc2_ctrl;\r
- \r
+\r
quad_id = sdd_2_quad_lut[sdd_id];\r
- \r
+\r
/* Pause the SSE PC2 while accesses to ACB from APB3 are taking place. */\r
saved_pc2_ctrl = ACE->PC2_CTRL;\r
ACE->PC2_CTRL = 0u;\r
- \r
+\r
/* Select between voltage/current and RTZ modes.*/\r
ACE->ACB_DATA[quad_id].b6 = mode;\r
- \r
+\r
/* Load manufacturing generated trim value. */\r
if ( (mode & OBD_MODE_MASK) > 0u )\r
{\r
}\r
ACE->ACB_DATA[quad_id].b4\r
= p_mtd_data->odb_trimming[sdd_id][obd_mode_idx][chopping_mode_idx];\r
- \r
+\r
/* Restore SSE PC2 operations since no ACB accesses should take place\r
* beyond this point. */\r
ACE->PC2_CTRL = saved_pc2_ctrl;\r
- \r
+\r
/* Set SDD resolution. */\r
*dac_ctrl_reg_lut[sdd_id] = (uint32_t)resolution;\r
- \r
+\r
/* Update SDD value through SSE_DACn_BYTES01. */\r
*dac_ctrl_reg_lut[sdd_id] |= SDD_REG_SEL_MASK;\r
- \r
+\r
/* Synchronous or individual SDD update. */\r
if ( INDIVIDUAL_UPDATE == sync_update )\r
{\r
)\r
{\r
ASSERT( sdd_id < NB_OF_SDD );\r
- \r
+\r
if ( sdd_id < NB_OF_SDD )\r
{\r
*dac_ctrl_reg_lut[sdd_id] |= SDD_ENABLE_MASK;\r
)\r
{\r
ASSERT( sdd_id < NB_OF_SDD );\r
- \r
+\r
if ( sdd_id < NB_OF_SDD )\r
{\r
*dac_ctrl_reg_lut[sdd_id] &= ~SDD_ENABLE_MASK;\r
)\r
{\r
ASSERT( sdd_id < NB_OF_SDD );\r
- \r
+\r
if ( sdd_id < NB_OF_SDD )\r
{\r
*dac_byte2_reg_lut[sdd_id] = sdd_value >> 16;\r
)\r
{\r
uint32_t dac_sync_ctrl;\r
- \r
+\r
dac_sync_ctrl = ACE->DAC_SYNC_CTRL;\r
- \r
+\r
if ( SDD_NO_UPDATE != sdd0_value )\r
{\r
ACE->DAC0_BYTE2 = sdd0_value >> 16;\r
ACE->SSE_DAC2_BYTES01 = sdd2_value;\r
dac_sync_ctrl |= DAC2_SYNC_UPDATE;\r
}\r
- \r
+\r
ACE->DAC_SYNC_CTRL = dac_sync_ctrl;\r
}\r
\r
{\r
uint8_t scb_id;\r
uint32_t odd;\r
- \r
+\r
odd = (uint32_t)comp_id & 0x01uL;\r
- \r
+\r
ASSERT( comp_id < NB_OF_COMPARATORS );\r
ASSERT( reference < NB_OF_COMP_REF );\r
ASSERT( odd ); /* Only Temperature block comparators have configurable reference input. */\r
- \r
+\r
if ( (comp_id < NB_OF_COMPARATORS) && (reference < NB_OF_COMP_REF) && (odd) )\r
{\r
uint32_t saved_pc2_ctrl;\r
- \r
+\r
scb_id = comp_id_2_scb_lut[comp_id];\r
- \r
+\r
/* Pause the SSE PC2 while accesses to ACB from APB3 are taking place. */\r
saved_pc2_ctrl = ACE->PC2_CTRL;\r
ACE->PC2_CTRL = 0u;\r
- \r
+\r
if ( ADC_IN_COMP_REF == reference )\r
{\r
ACE->ACB_DATA[scb_id].b10 &= (uint8_t)~B10_COMP_VREF_SW_MASK;\r
ACE->ACB_DATA[scb_id].b10 &= (uint8_t)~B10_COMP_VREF_SW_MASK;\r
ACE->ACB_DATA[scb_id].b11 = (ACE->ACB_DATA[scb_id].b11 & (uint8_t)~B11_DAC_MUXSEL_MASK) + (uint8_t)reference;\r
}\r
- \r
+\r
/* Restore SSE PC2 operations since no ACB accesses should take place\r
* beyond this point. */\r
ACE->PC2_CTRL = saved_pc2_ctrl;\r
)\r
{\r
uint8_t scb_id;\r
- \r
+\r
ASSERT( comp_id < NB_OF_COMPARATORS );\r
ASSERT( hysteresis < NB_OF_HYSTERESIS );\r
- \r
+\r
if ( (comp_id < NB_OF_COMPARATORS) && (hysteresis < NB_OF_HYSTERESIS) )\r
{\r
uint32_t odd;\r
uint32_t saved_pc2_ctrl;\r
- \r
+\r
scb_id = comp_id_2_scb_lut[comp_id];\r
odd = (uint32_t)comp_id & 0x01uL;\r
- \r
+\r
/* Pause the SSE PC2 while accesses to ACB from APB3 are taking place. */\r
saved_pc2_ctrl = ACE->PC2_CTRL;\r
ACE->PC2_CTRL = 0u;\r
- \r
+\r
if ( odd )\r
{\r
/* Temperature monitor block comparator. */\r
/* Current monitor block comparator. */\r
ACE->ACB_DATA[scb_id].b9 = (ACE->ACB_DATA[scb_id].b9 & HYSTERESIS_MASK) | (uint8_t)((uint8_t)hysteresis << HYSTERESIS_SHIFT);\r
}\r
- \r
+\r
/* Restore SSE PC2 operations since no ACB accesses should take place\r
* beyond this point. */\r
ACE->PC2_CTRL = saved_pc2_ctrl;\r
}\r
\r
/*-------------------------------------------------------------------------*//**\r
- \r
+\r
*/\r
void ACE_enable_comp\r
(\r
)\r
{\r
uint8_t scb_id;\r
- \r
+\r
ASSERT( comp_id < NB_OF_COMPARATORS );\r
- \r
+\r
if ( comp_id < NB_OF_COMPARATORS )\r
{\r
uint32_t odd;\r
uint32_t saved_pc2_ctrl;\r
- \r
+\r
scb_id = comp_id_2_scb_lut[comp_id];\r
odd = (uint32_t)comp_id & 0x01uL;\r
- \r
+\r
/* Pause the SSE PC2 while accesses to ACB from APB3 are taking place. */\r
saved_pc2_ctrl = ACE->PC2_CTRL;\r
ACE->PC2_CTRL = 0u;\r
- \r
+\r
if ( odd )\r
{\r
/* Temperature monitor block comparator. */\r
/* Current monitor block comparator. */\r
ACE->ACB_DATA[scb_id].b9 |= COMPARATOR_ENABLE_MASK;\r
}\r
- \r
+\r
/* Restore SSE PC2 operations since no ACB accesses should take place\r
* beyond this point. */\r
ACE->PC2_CTRL = saved_pc2_ctrl;\r
)\r
{\r
uint8_t scb_id;\r
- \r
+\r
ASSERT( comp_id < NB_OF_COMPARATORS );\r
- \r
+\r
if ( comp_id < NB_OF_COMPARATORS )\r
{\r
uint32_t odd;\r
uint32_t saved_pc2_ctrl;\r
- \r
+\r
scb_id = comp_id_2_scb_lut[comp_id];\r
odd = (uint32_t)comp_id & 0x01uL;\r
- \r
+\r
/* Pause the SSE PC2 while accesses to ACB from APB3 are taking place. */\r
saved_pc2_ctrl = ACE->PC2_CTRL;\r
ACE->PC2_CTRL = 0u;\r
- \r
+\r
if ( odd )\r
{\r
/* Temperature monitor block comparator. */\r
/* Current monitor block comparator. */\r
ACE->ACB_DATA[scb_id].b9 &= (uint8_t)~COMPARATOR_ENABLE_MASK;\r
}\r
- \r
+\r
/* Restore SSE PC2 operations since no ACB accesses should take place\r
* beyond this point. */\r
ACE->PC2_CTRL = saved_pc2_ctrl;\r
)\r
{\r
ASSERT( comp_id < NB_OF_COMPARATORS );\r
- \r
+\r
ACE->COMP_IRQ_EN |= (FIRST_RISE_IRQ_MASK << (uint32_t)comp_id);\r
}\r
\r
)\r
{\r
ASSERT( comp_id < NB_OF_COMPARATORS );\r
- \r
+\r
ACE->COMP_IRQ_EN &= ~(FIRST_RISE_IRQ_MASK << (uint32_t)comp_id);\r
}\r
\r
)\r
{\r
ASSERT( comp_id < NB_OF_COMPARATORS );\r
- \r
+\r
ACE->COMP_IRQ_CLR |= (FIRST_RISE_IRQ_MASK << (uint32_t)comp_id);\r
}\r
\r
)\r
{\r
ASSERT( comp_id < NB_OF_COMPARATORS );\r
- \r
+\r
ACE->COMP_IRQ_EN |= (FIRST_FALL_IRQ_MASK << (uint32_t)comp_id);\r
}\r
\r
)\r
{\r
ASSERT( comp_id < NB_OF_COMPARATORS );\r
- \r
+\r
ACE->COMP_IRQ_EN &= ~(FIRST_FALL_IRQ_MASK << (uint32_t)comp_id);\r
}\r
\r
)\r
{\r
ASSERT( comp_id < NB_OF_COMPARATORS );\r
- \r
+\r
ACE->COMP_IRQ_CLR |= (FIRST_FALL_IRQ_MASK << (uint32_t)comp_id);\r
}\r
\r
)\r
{\r
ace_channel_handle_t channel_handle;\r
- \r
+\r
channel_handle = (ace_channel_handle_t)0;\r
- \r
+\r
return channel_handle;\r
}\r
\r
)\r
{\r
++channel_handle;\r
- \r
+\r
if ( channel_handle >= NB_OF_ACE_CHANNEL_HANDLES )\r
{\r
channel_handle = (ace_channel_handle_t)0;\r
}\r
- \r
+\r
return channel_handle;\r
}\r
\r
{\r
uint16_t channel_idx;\r
ace_channel_handle_t channel_handle = INVALID_CHANNEL_HANDLE;\r
- \r
+\r
for ( channel_idx = 0u; channel_idx < (uint16_t)ACE_NB_OF_INPUT_CHANNELS; ++channel_idx )\r
{\r
if ( g_ace_channel_desc_table[channel_idx].p_sz_channel_name != 0 )\r
{\r
uint16_t channel_idx;\r
ace_channel_handle_t channel_handle = INVALID_CHANNEL_HANDLE;\r
- \r
+\r
for ( channel_idx = 0u; channel_idx < (uint16_t)ACE_NB_OF_INPUT_CHANNELS; ++channel_idx )\r
{\r
if ( g_ace_channel_desc_table[channel_idx].signal_id == channel_id )\r
{\r
uint16_t sample;\r
uint16_t ppe_offset;\r
- \r
+\r
ppe_offset = g_ace_channel_desc_table[channel_handle].signal_ppe_offset;\r
sample = (uint16_t)(ACE->PPE_RAM_DATA[ppe_offset] >> 16u);\r
- \r
+\r
return sample;\r
}\r
\r