SmartSnippets DA1459x SDK
Files | Data Structures | Macros | Enumerations | Functions

Power domains Controller. More...

Files

file  hw_pdc.h
 Definition of API for the Power Domains Controller Low Level Driver.
 

Data Structures

struct  hw_pdc_entry_t
 PDC entry. More...
 
struct  hw_pdc_lut_keep_t
 PDC entries that will be kept after deep sleep. More...
 

Macros

#define HW_PDC_LUT_ENTRY_FIELD_MASK(field)   (PDC_PDC_CTRL0_REG_##field##_Msk)
 Get the mask of a field of a PDC LUT entry. More...
 
#define HW_PDC_LUT_ENTRY_FIELD_POS(field)   (PDC_PDC_CTRL0_REG_##field##_Pos)
 Get the bit position of a field of a PDC LUT entry. More...
 
#define HW_PDC_LUT_ENTRY_FIELD_VAL(field, val)   (((val) << HW_PDC_LUT_ENTRY_FIELD_POS(field)) & HW_PDC_LUT_ENTRY_FIELD_MASK(field))
 Prepare (i.e. shift and mask) a value to be used for a PDC LUT entry field. More...
 

Enumerations

enum  HW_PDC_TRIG_SELECT { HW_PDC_TRIG_SELECT_P0_GPIO = 0, HW_PDC_TRIG_SELECT_P1_GPIO = 1, HW_PDC_TRIG_SELECT_PERIPHERAL = 2, HW_PDC_TRIG_SELECT_MASTER = 3 }
 Selects which wakeup source bank is selected as a trigger in a PDC LUT entry. More...
 
enum  HW_PDC_PERIPH_TRIG_ID {
  HW_PDC_PERIPH_TRIG_ID_TIMER = 0x0, HW_PDC_PERIPH_TRIG_ID_TIMER2 = 0x1, HW_PDC_PERIPH_TRIG_ID_TIMER3_QDEC = 0x2, HW_PDC_PERIPH_TRIG_ID_TIMER4 = 0x3,
  HW_PDC_PERIPH_TRIG_ID_RTC_ALARM = 0x4, HW_PDC_PERIPH_TRIG_ID_RTC_TIMER = 0x5, HW_PDC_PERIPH_TRIG_ID_MAC_TIMER = 0x6, HW_PDC_PERIPH_TRIG_ID_XTAL32MRDY = 0x8,
  HW_PDC_PERIPH_TRIG_ID_RFDIAG = 0x9, HW_PDC_PERIPH_TRIG_ID_COMBO = 0xA, HW_PDC_PERIPH_TRIG_ID_FCU_IRQ = 0xC, HW_PDC_PERIPH_TRIG_ID_FAST_WKUP = 0xD,
  HW_PDC_PERIPH_TRIG_ID_MASTERONLY = 0xF
}
 Peripheral PDC trigger IDs. More...
 
enum  HW_PDC_MASTER { HW_PDC_MASTER_INVALID = 0, HW_PDC_MASTER_CM33 = 1, HW_PDC_MASTER_CMAC = 2 }
 PDC master IDs. More...
 
enum  HW_PDC_LUT_ENTRY_EN { HW_PDC_LUT_ENTRY_EN_COM = PDC_PDC_CTRL0_REG_EN_COM_Msk, HW_PDC_LUT_ENTRY_EN_PER = PDC_PDC_CTRL0_REG_EN_PER_Msk, HW_PDC_LUT_ENTRY_EN_TMR = PDC_PDC_CTRL0_REG_EN_TMR_Msk, HW_PDC_LUT_ENTRY_EN_XTAL = PDC_PDC_CTRL0_REG_EN_XTAL_Msk }
 PDC LUT entry enable bits. More...
 
enum  HW_PDC_ERROR
 PDC LLD error codes.
 
enum  HW_PDC_BLOCKED_TRIG { HW_PDC_RESET_BLOCKED_TRIGGERS = 0, HW_PDC_PD_SYS_BLOCKED = REG_MSK(PDC, PDC_CONFIG_REG, PD_SYS_WKUP_CONFIG), HW_PDC_PD_RAD_BLOCKED = REG_MSK(PDC, PDC_CONFIG_REG, PD_RAD_WKUP_CONFIG), HW_PDC_ALL_BLOCKED_EXCEPT_FCU = REG_MSK(PDC, PDC_CONFIG_REG, TRIG_SELECT_CONFIG) }
 blocked PDC triggers More...
 

Functions

__STATIC_INLINE uint32_t hw_pdc_read_entry (uint32_t idx)
 Read value from specific PDC LUT index. More...
 
__RETAINED_CODE uint32_t hw_pdc_add_entry (uint32_t lut_entry)
 Add a PDC LUT entry dynamically. More...
 
uint32_t hw_pdc_remove_entry (uint32_t idx)
 Remove a dynamically added PDC LUT entry. More...
 
__STATIC_INLINE uint32_t hw_pdc_get_pending (void)
 Get all PDC LUT entries pending for any master.
 
__STATIC_INLINE uint32_t hw_pdc_get_pending_cm33 (void)
 Get all PDC LUT entries pending for CM33.
 
__STATIC_INLINE uint32_t hw_pdc_get_pending_cmac (void)
 Get all PDC LUT entries pending for CMAC.
 
__STATIC_INLINE void hw_pdc_acknowledge (uint32_t idx)
 Acknowledge a PDC LUT entry. More...
 
void hw_pdc_write_entry (uint32_t idx, uint32_t value)
 Write a value in specific PDC LUT index. More...
 
__STATIC_INLINE HW_PDC_ERROR hw_pdc_set_pending (uint32_t idx)
 Set a PDC LUT entry as pending. More...
 
__STATIC_FORCEINLINE bool hw_pdc_is_pending (uint32_t idx)
 Check if a PDC LUT entry is pending. More...
 
void hw_pdc_ack_all_pending_cm33 (void)
 Acknowledge all PDC LUT entries pending for CM33.
 
void hw_pdc_lut_reset (void)
 Reset PDC Lookup table. More...
 
void hw_pdc_lut_keep (hw_pdc_lut_keep_t *keep)
 Keep only the selected PDC Lookup table entries. More...
 
uint32_t hw_pdc_find_entry (uint32_t trig_select, uint32_t trig_id, uint32_t wakeup_master, uint32_t flags, uint32_t start)
 Get the first PDC LUT entry index matching specific criteria. More...
 
__STATIC_FORCEINLINE void hw_pdc_set_blocked_triggers (HW_PDC_BLOCKED_TRIG blocked)
 Set PDC configuration register. More...
 
__STATIC_FORCEINLINE HW_PDC_BLOCKED_TRIG hw_pdc_get_blocked_triggers ()
 get PDC configuration register More...
 

Detailed Description

Power domains Controller.

Macro Definition Documentation

◆ HW_PDC_LUT_ENTRY_FIELD_MASK

#define HW_PDC_LUT_ENTRY_FIELD_MASK (   field)    (PDC_PDC_CTRL0_REG_##field##_Msk)

Get the mask of a field of a PDC LUT entry.

Parameters
[in]fieldis the PDC LUT entry field to access

◆ HW_PDC_LUT_ENTRY_FIELD_POS

#define HW_PDC_LUT_ENTRY_FIELD_POS (   field)    (PDC_PDC_CTRL0_REG_##field##_Pos)

Get the bit position of a field of a PDC LUT entry.

Parameters
[in]fieldis the PDC LUT entry field to access

◆ HW_PDC_LUT_ENTRY_FIELD_VAL

#define HW_PDC_LUT_ENTRY_FIELD_VAL (   field,
  val 
)    (((val) << HW_PDC_LUT_ENTRY_FIELD_POS(field)) & HW_PDC_LUT_ENTRY_FIELD_MASK(field))

Prepare (i.e. shift and mask) a value to be used for a PDC LUT entry field.

Parameters
[in]fieldis the PDC LUT entry field to access
[in]valis the value to prepare

Enumeration Type Documentation

◆ HW_PDC_BLOCKED_TRIG

blocked PDC triggers

Enumerator
HW_PDC_RESET_BLOCKED_TRIGGERS 

None PDC trigger is blocked

HW_PDC_PD_SYS_BLOCKED 

PD_SYS is woken up only when the FCU is ready or powered off

HW_PDC_PD_RAD_BLOCKED 

PD_RAD is woken up only when the FCU is ready or powered off

HW_PDC_ALL_BLOCKED_EXCEPT_FCU 

All triggers apart from FCU (0xC) are blocked until the FCU is ready or powered off

◆ HW_PDC_LUT_ENTRY_EN

PDC LUT entry enable bits.

Enumerator
HW_PDC_LUT_ENTRY_EN_COM 

If set, enables PD_COM for GPIO access

HW_PDC_LUT_ENTRY_EN_PER 

If set, enables PD_PER

HW_PDC_LUT_ENTRY_EN_TMR 

If set, enables PD_TMR

HW_PDC_LUT_ENTRY_EN_XTAL 

If set, the XTAL32M will be started

◆ HW_PDC_MASTER

PDC master IDs.

Enumerator
HW_PDC_MASTER_INVALID 

Invalid master. Signifies an invalid PDC LUT entry.

HW_PDC_MASTER_CM33 

ARM Cortex-M33

HW_PDC_MASTER_CMAC 

CMAC

◆ HW_PDC_PERIPH_TRIG_ID

Peripheral PDC trigger IDs.

Enumerator
HW_PDC_PERIPH_TRIG_ID_TIMER 

Timer

HW_PDC_PERIPH_TRIG_ID_TIMER2 

Timer2

HW_PDC_PERIPH_TRIG_ID_TIMER3_QDEC 

Timer3 OR Quadrature Decoder (QDec)

HW_PDC_PERIPH_TRIG_ID_TIMER4 

Timer4

HW_PDC_PERIPH_TRIG_ID_RTC_ALARM 

RTC Alarm/Rollover

HW_PDC_PERIPH_TRIG_ID_RTC_TIMER 

RTC Timer periodic event

HW_PDC_PERIPH_TRIG_ID_MAC_TIMER 

MAC Timer

HW_PDC_PERIPH_TRIG_ID_XTAL32MRDY 

XTAL32MRDY_IRQ

HW_PDC_PERIPH_TRIG_ID_RFDIAG 

RFDIAG_IRQ

HW_PDC_PERIPH_TRIG_ID_COMBO 

CMAC2SYS_IRQ OR JTAG present OR Debounced IO

HW_PDC_PERIPH_TRIG_ID_FCU_IRQ 

FCU_IRQ

HW_PDC_PERIPH_TRIG_ID_FAST_WKUP 

Fast wakeup trigger

HW_PDC_PERIPH_TRIG_ID_MASTERONLY 

Software trigger only

◆ HW_PDC_TRIG_SELECT

Selects which wakeup source bank is selected as a trigger in a PDC LUT entry.

Enumerator
HW_PDC_TRIG_SELECT_P0_GPIO 

Trigger from GPIO Port 0 through WAKEUP block

HW_PDC_TRIG_SELECT_P1_GPIO 

Trigger from GPIO Port 1 through WAKEUP block

HW_PDC_TRIG_SELECT_PERIPHERAL 

Trigger from peripheral IRQ, table below

HW_PDC_TRIG_SELECT_MASTER 

Trigger from master, table below

Function Documentation

◆ hw_pdc_acknowledge()

__STATIC_INLINE void hw_pdc_acknowledge ( uint32_t  idx)

Acknowledge a PDC LUT entry.

Parameters
[in]idxthe index of the LUT entry to acknowledge. Valid range: Range 0 - (HW_PDC_LUT_SIZE-1)

◆ hw_pdc_add_entry()

__RETAINED_CODE uint32_t hw_pdc_add_entry ( uint32_t  lut_entry)

Add a PDC LUT entry dynamically.

Scans all LUT entries until it finds an unused one. A LUT entry shall be considered unused if it equals zero.

Parameters
[in]lut_entryvalue for the LUT entry
Returns
LUT index of the new entry if an unused entry was found HW_PDC_INVALID_LUT_INDEX otherwise.

◆ hw_pdc_find_entry()

uint32_t hw_pdc_find_entry ( uint32_t  trig_select,
uint32_t  trig_id,
uint32_t  wakeup_master,
uint32_t  flags,
uint32_t  start 
)

Get the first PDC LUT entry index matching specific criteria.

This function returns the first matching entry after starting entry with the below criteria. In case we are not interesting in one or more criteria we could use the value HW_PDC_FILTER_DONT_CARE, thus this function will return the index of the entry which matches to the remaining criteria.

Parameters
[in]trig_selectLUT entry triggering type GPIO/peripheral
[in]trig_idLUT entry Pin_ID/Periph_ID
[in]wakeup_masterLUT entry wake up Master_ID
[in]flagsLUT entry action(s)
[in]startStarting PDC entry search point
Returns
LUT index of the entry matching to above criteria, HW_PDC_INVALID_LUT_INDEX otherwise

◆ hw_pdc_get_blocked_triggers()

__STATIC_FORCEINLINE HW_PDC_BLOCKED_TRIG hw_pdc_get_blocked_triggers ( )

get PDC configuration register

Returns
type of blocked PDC configured entries.

◆ hw_pdc_is_pending()

__STATIC_FORCEINLINE bool hw_pdc_is_pending ( uint32_t  idx)

Check if a PDC LUT entry is pending.

Parameters
[in]idxthe index of the PDC LUT entry. Valid range: Range 0 - (HW_PDC_LUT_SIZE-1)

◆ hw_pdc_lut_keep()

void hw_pdc_lut_keep ( hw_pdc_lut_keep_t keep)

Keep only the selected PDC Lookup table entries.

Invalidates all PDC lookup table entries except those set to be kept

Parameters
[in]keeppointer to an array with the LUT entries that will be kept

◆ hw_pdc_lut_reset()

void hw_pdc_lut_reset ( void  )

Reset PDC Lookup table.

Invalidates all PDC lookup table entries

◆ hw_pdc_read_entry()

__STATIC_INLINE uint32_t hw_pdc_read_entry ( uint32_t  idx)

Read value from specific PDC LUT index.

Parameters
[in]idxLUT index to read from. Valid range: Range 0 - (HW_PDC_LUT_SIZE-1)
Returns
value at given PDC LUT index

◆ hw_pdc_remove_entry()

uint32_t hw_pdc_remove_entry ( uint32_t  idx)

Remove a dynamically added PDC LUT entry.

Zero shall be written in the LUT entry at the given index.

Parameters
[in]idxthe index of the LUT entry to remove. Valid range: Range 0 - (HW_PDC_LUT_SIZE-1)
Returns
the old LUT entry value

◆ hw_pdc_set_blocked_triggers()

__STATIC_FORCEINLINE void hw_pdc_set_blocked_triggers ( HW_PDC_BLOCKED_TRIG  blocked)

Set PDC configuration register.

Parameters
[in]blockedtype of PDC configured entries

◆ hw_pdc_set_pending()

__STATIC_INLINE HW_PDC_ERROR hw_pdc_set_pending ( uint32_t  idx)

Set a PDC LUT entry as pending.

Parameters
[in]idxthe index of the PDC LUT entry. Valid range: Range 0 - (HW_PDC_LUT_SIZE-1)
Returns
HW_PDC_ERROR_NONE if no error occurred, else error code.
See also
HW_PDC_ERROR

◆ hw_pdc_write_entry()

void hw_pdc_write_entry ( uint32_t  idx,
uint32_t  value 
)

Write a value in specific PDC LUT index.

Parameters
[in]idxLUT index to write at. Valid range: Range 0 - (HW_PDC_LUT_SIZE-1)
[in]valuevalue to be written