TEMPDRV Temperature Driver
Description
TEMPDRV Temperature Driver provides an interface and various functionalities to the EMU internal temperature sensor. Subsequent sections provide more insight into TEMPDRV driver.
Introduction
TEMPDRV provides a user-friendly interface to the EMU internal temperature sensor, which is present on the EFR32 and some EFM32 devices. TEMPDRV supports application-specific callbacks at given temperature thresholds. EMU internal temperature sensor runs in energy modes EM0-EM4 and can wake up the core whenever temperature changes. Also, EMU temperature sensor runs continuously and measurements are taken every 250 ms.
- Note
- TEMPDRV uses the EMU peripheral and not the ADC peripheral. ADC contains another internal temperature sensor, which is not touched by the TEMPDRV.
TEMPDRV provides an important errata fix for the EFR32 first generation devices when operating at high temperature environments (above 50°C). The "EMU_E201 - High Temperature Operation" errata is described in the EFR32 errata. To implement the errata fix in a user application, include the TEMPDRV and call
TEMPDRV_Init()
at the start of the program. This will activate the errata fix code, which modifies registers based on changes in the EMU temperature.
TEMPDRV Usage
Modules |
|
Error Codes | |
TEMPDRV error codes.
|
|
Functions |
|
void | TEMPDRV_IRQHandler (void) |
TEMPDRV IRQ Handler.
|
|
Ecode_t | TEMPDRV_Init (void) |
Initialize the TEMP driver.
|
|
Ecode_t | TEMPDRV_DeInit (void) |
De-initialize the TEMP driver.
|
|
Ecode_t | TEMPDRV_Enable (bool enable) |
Enable or disable the TEMP driver.
|
|
uint8_t | TEMPDRV_GetActiveCallbacks (TEMPDRV_LimitType_t limit) |
Get the number of active callbacks for a limit.
|
|
int8_t | TEMPDRV_GetTemp (void) |
Get the current temperature.
|
|
Ecode_t | TEMPDRV_RegisterCallback (int8_t temp, TEMPDRV_LimitType_t limit, TEMPDRV_Callback_t callback) |
Register a callback in the TEMP driver.
|
|
Ecode_t | TEMPDRV_UnregisterCallback ( TEMPDRV_Callback_t callback) |
Unregister a callback in the TEMP driver.
|
|
void | EMU_IRQHandler (void) |
EMU Interrupt Handler.
|
|
Typedefs |
|
typedef void(* | TEMPDRV_Callback_t ) (int8_t temp, TEMPDRV_LimitType_t limit) |
TEMPDRV temperature limit callback function.
|
|
Enumerations |
|
enum |
TEMPDRV_LimitType
{
TEMPDRV_LIMIT_LOW = 0, TEMPDRV_LIMIT_HIGH = 1 } |
Temperature limit.
|
|
Function Documentation
◆ TEMPDRV_IRQHandler()
void TEMPDRV_IRQHandler | ( | void |
|
) |
TEMPDRV IRQ Handler.
This IRQ Handler should be called from within the EMU_IRQHandler to enable TEMPDRV callbacks. This is included by default with EMU_CUSTOM_IRQ_HANDLER defined as false.
◆ TEMPDRV_Init()
Ecode_t TEMPDRV_Init | ( | void |
|
) |
Initialize the TEMP driver.
This will clear all the registered callbacks and enable the EMU IRQ in the NVIC. Calling this function will also enable the EMU_E201 errata fix for first generation Pearl, Jade and EFR32 devices.
- Returns
- ECODE_EMDRV_TEMPDRV_OK on success.
◆ TEMPDRV_DeInit()
Ecode_t TEMPDRV_DeInit | ( | void |
|
) |
De-initialize the TEMP driver.
This will clear all the registered callbacks and disable the EMU IRQ in the NVIC.
- Returns
- ECODE_EMDRV_TEMPDRV_OK on success.
◆ TEMPDRV_Enable()
Ecode_t TEMPDRV_Enable | ( | bool |
enable
|
) |
Enable or disable the TEMP driver.
- Parameters
-
[in] enable
true to enable the TEMP driver, false to disable the TEMP driver.
- Returns
- ECODE_EMDRV_TEMPDRV_OK on success.
◆ TEMPDRV_GetActiveCallbacks()
uint8_t TEMPDRV_GetActiveCallbacks | ( | TEMPDRV_LimitType_t |
limit
|
) |
Get the number of active callbacks for a limit.
- Parameters
-
[in] limit
Limit type, refer to TEMPDRV_LimitType .
- Returns
- Number of active callbacks
◆ TEMPDRV_GetTemp()
int8_t TEMPDRV_GetTemp | ( | void |
|
) |
Get the current temperature.
- Returns
- Current temperature in degrees Celsius.
◆ TEMPDRV_RegisterCallback()
Ecode_t TEMPDRV_RegisterCallback | ( | int8_t |
temp,
|
TEMPDRV_LimitType_t |
limit,
|
||
TEMPDRV_Callback_t |
callback
|
||
) |
Register a callback in the TEMP driver.
This function is used for registering an application callback when the temperature changes. Note that when calling this function an application must specify the direction of the temperature change, use TEMPDRV_LIMIT_LOW to receive a callback when the temperature drops below the specified temp and use TEMPDRV_LIMIT_HIGH to receive a callback when the temperature increases above the specified temp.
- Note
- The user registered callback will be cleared once it's called. This means that the callback functions are not persistent, and have to be managed by the application. This feature can be used to implement a user controlled hysteresis. So for instance to register a callback at 50°C with a 5°C hysteresis you can first register a callback at 50°C or above using this function, and when the callback fires you can use this function again to register a callback when the temperature decreases to 45°C or below. Each time a callback fires you only need to call the TEMPDRV_RegisterCallback() function, there is no need to call TEMPDRV_UnregisterCallback() .
It's important to know the current temperature before calling this function. Attempting to register a callback that would fire immediately is not supported and will result in a return value of ECODE_EMDRV_TEMPDRV_BAD_LIMIT . Examples of an illegal scenario would be to register a callback for a temperature that is higher than the current temperature and with a limit set to TEMPDRV_LIMIT_LOW .
- Parameters
-
[in] temp
Temperature to trigger on given in number of °C. [in] limit
Limit type, refer to TEMPDRV_LimitType . Using TEMPDRV_LIMIT_LOW will register a callback when the EMU temperature reaches temp
°C or lower, and using TEMPDRV_LIMIT_HIGH will register a callback when the EMU temperature reachestemp
°C or higher.[in] callback
User defined function to call when temperature threshold is reached or passed.
- Returns
-
- ECODE_EMDRV_TEMPDRV_OK on success.
- ECODE_EMDRV_TEMPDRV_PARAM_ERROR if the callback is NULL.
- ECODE_EMDRV_TEMPDRV_NO_INIT if the user has forgot to call TEMPDRV_Init() before attempting to register a callback.
-
ECODE_EMDRV_TEMPDRV_BAD_LIMIT
is returned if
temp
is below the current temperature andlimit
is TEMPDRV_LIMIT_LOW . It is also returned iftemp
is above the current temperature andlimit
is TEMPDRV_LIMIT_HIGH .
-
ECODE_EMDRV_TEMPDRV_DUP_TEMP
is returned if a duplicate callback is detected. A duplicate callback is if you attempt to register a new callback with the same
temp
and the samelimit
as some already registered callback.
◆ TEMPDRV_UnregisterCallback()
Ecode_t TEMPDRV_UnregisterCallback | ( | TEMPDRV_Callback_t |
callback
|
) |
Unregister a callback in the TEMP driver.
- Parameters
-
[in] callback
Callback to unregister.
- Returns
-
- ECODE_EMDRV_TEMPDRV_OK on success.
- ECODE_EMDRV_TEMPDRV_PARAM_ERROR if the callback is NULL.
- ECODE_EMDRV_TEMPDRV_NO_CALLBACK if the callback was not found.
◆ EMU_IRQHandler()
void EMU_IRQHandler | ( | void |
|
) |
EMU Interrupt Handler.
The EMU_IRQHandler provided by TEMPDRV will call TEMPDRV_IRQHandler . Configure EMU_CUSTOM_IRQ_HANDLER = true if the application wants to implement its own EMU_IRQHandler. This is typically needed if one of the non-temperature related EMU interrupt flags are in use.
Typedef Documentation
◆ TEMPDRV_Callback_t
typedef void(* TEMPDRV_Callback_t) (int8_t temp, TEMPDRV_LimitType_t limit) |
TEMPDRV temperature limit callback function.
Called from the interrupt context. The callback function is called when the current temperature is equal to or exceeds one of the temperature limits that have been registered with the driver.
- Parameters
-
[in] temp
The current temperature at the time when the EMU temperature triggers an interrupt. Note that this is not necessarily the same temperature as was specified when registering a callback. [in] limit
The upper/lower limit reached
Enumeration Type Documentation
◆ TEMPDRV_LimitType
enum TEMPDRV_LimitType |