em_system.c

Go to the documentation of this file.
00001 /***************************************************************************/
00034 #include "em_system.h"
00035 #include "em_assert.h"
00036 
00037 /***************************************************************************/
00042 /***************************************************************************/
00048 /*******************************************************************************
00049  **************************   GLOBAL FUNCTIONS   *******************************
00050  ******************************************************************************/
00051 
00052 /***************************************************************************/
00059 void SYSTEM_ChipRevisionGet(SYSTEM_ChipRevision_TypeDef *rev)
00060 {
00061   uint8_t tmp;
00062 
00063   EFM_ASSERT(rev);  
00064   
00065   /* CHIP FAMILY bit [5:2] */
00066   tmp  = (((ROMTABLE->PID1 & _ROMTABLE_PID1_FAMILYMSB_MASK) >> _ROMTABLE_PID1_FAMILYMSB_SHIFT) << 2);           
00067   /* CHIP FAMILY bit [1:0] */
00068   tmp |=  ((ROMTABLE->PID0 & _ROMTABLE_PID0_FAMILYLSB_MASK) >> _ROMTABLE_PID0_FAMILYLSB_SHIFT);                 
00069   rev->family = tmp;
00070 
00071   /* CHIP MAJOR bit [3:0] */
00072   rev->major = (ROMTABLE->PID0 & _ROMTABLE_PID0_REVMAJOR_MASK) >> _ROMTABLE_PID0_REVMAJOR_SHIFT;                
00073 
00074   /* CHIP MINOR bit [7:4] */
00075   tmp  = (((ROMTABLE->PID2 & _ROMTABLE_PID2_REVMINORMSB_MASK) >> _ROMTABLE_PID2_REVMINORMSB_SHIFT) << 4);  
00076   /* CHIP MINOR bit [3:0] */
00077   tmp |=  ((ROMTABLE->PID3 & _ROMTABLE_PID3_REVMINORLSB_MASK) >> _ROMTABLE_PID3_REVMINORLSB_SHIFT);             
00078   rev->minor = tmp;
00079 }
00080 
00081 /***************************************************************************/
00091 uint32_t SYSTEM_GetCalibrationValue(volatile uint32_t *regAddress)
00092 {
00093   int               regCount;
00094   CALIBRATE_TypeDef *p;
00095 
00096   regCount = 1;
00097   p        = CALIBRATE;
00098 
00099   for (;; )
00100   {
00101     if ((regCount > CALIBRATE_MAX_REGISTERS) ||
00102         (p->VALUE == 0xFFFFFFFF))
00103     {
00104       EFM_ASSERT(false);
00105       return 0;                 /* End of device calibration table reached. */
00106     }
00107 
00108     if (p->ADDRESS == (uint32_t)regAddress)
00109     {
00110       return p->VALUE;          /* Calibration value found ! */
00111     }
00112 
00113     p++;
00114     regCount++;
00115   }
00116 }
00117