ELIOT1 HAL
Загрузка...
Поиск...
Не найдено
Драйвер модуля PPU

Драйвер модуля управления питанием доменов устройств Подробнее...

Файлы

файл  hal_ppu.h
 Интерфейс драйвера модуля PPU.
 

Структуры данных

struct  ppu_config
 Структура для инициализации Подробнее...
 

Определения типов

typedef void(* ReqOffForCPU) (void)
 Тип функции запроса для выключения смежного ядра
 

Перечисления

enum  ppu_status
 Статусы драйвера PPU. Подробнее...
 
enum  ppu_domain_index
 Индексы блоков PPU. Подробнее...
 
enum  ppu_sense_index
 Индексы бит блоков PPU, от которых зависят другие домены Подробнее...
 
enum  ppu_power_mode
 Состояние домена питания Подробнее...
 

Функции

void PPU_StateOffRequestHandler (void)
 Функция отключения питания текущего ядра
 

Регистры масок прерывания

enum  ppu_event_name
 Имена масок прерываний Подробнее...
 
enum  ppu_add_event_name
 Имена масок дополнительных прерываний Подробнее...
 

Идентификационные регистры

enum  ppu_opportunities_idr0
 Идентификационный регистр PPU_IDR0. Подробнее...
 
enum  ppu_opportunities_idr1
 Идентификационный регистр PPU_IDR1. Подробнее...
 

Функции установки состояний

enum ppu_status PPU_SetState (PPU_Type *base, enum ppu_power_mode mode)
 Функция запроса установки статического режима работы
 
enum ppu_status PPU_SetStateDynamic (PPU_Type *base, enum ppu_power_mode mode)
 Функция запроса установки динамического режима работы
 
enum ppu_status PPU_SetPDCMPPUSense (enum ppu_domain_index pd_dst, enum ppu_sense_index pd_src, uint32_t sense)
 Функция установки зависимости доменов питания
 
enum ppu_status PPU_SetIRQStatus (PPU_Type *base, enum ppu_event_name irq, enum ppu_add_event_name add_irq)
 Функция установки состояний прерываний
 
enum ppu_status PPU_SetIRQMask (PPU_Type *base, enum ppu_event_name irq, enum ppu_add_event_name add_irq)
 Функция установки масок прерываний
 
enum ppu_status PPU_ClrIRQStatus (PPU_Type *base, enum ppu_event_name irq, enum ppu_add_event_name add_irq)
 Функция сброса состояний прерываний
 
enum ppu_status PPU_ClrIRQMask (PPU_Type *base, enum ppu_event_name irq, enum ppu_add_event_name add_irq)
 Функция сброса масок прерываний
 

Функции получения состояния

enum ppu_power_mode PPU_GetPowerState (PPU_Type *base)
 Функция получения состояния домена
 
uint32_t PPU_GetPDxSenseFromPDy (enum ppu_domain_index pd_dst, enum ppu_sense_index pd_src)
 Функция получения зависимости доменов питания
 
enum ppu_status PPU_GetLastAPIStatus (void)
 Получение статуса выполнения функции, тип результата которой отличен от enum ppu_status.
 
enum ppu_status PPU_GetIRQStatus (PPU_Type *base, enum ppu_event_name *irq, enum ppu_add_event_name *add_irq)
 Получение статуса прерываний
 
enum ppu_status PPU_GetIRQMask (PPU_Type *base, enum ppu_event_name *irq, enum ppu_add_event_name *add_irq)
 Получение масок прерываний
 

Функции инициализации

enum ppu_status PPU_Init (PPU_Type *base, struct ppu_config *cfg)
 Функция инициализации блока PPU.
 

Подробное описание

Драйвер модуля управления питанием доменов устройств

Драйвер модуля PPU позволяет управлять питанием доменов чипа.

Типы

◆ ReqOffForCPU

typedef void(* ReqOffForCPU) (void)

Тип функции запроса для выключения смежного ядра

Механизм отключения домена питания одного ядра из другого ядра определяется пользователем. Этот механизм вызывается драйвером при запросе отключения домена питания одним одного ядра из другого ядра. Пример механизма приведён в boards/eliot1_bub/driver_examples/ppu/core1_startup/

Перечисления

◆ ppu_add_event_name

Имена масок дополнительных прерываний

Элементы перечислений
PPU_StaPolicyOp 

Статус события завершения перехода статической операционной политики

PPU_STA_PolicyPwr 

Статус события завершения перехода политики статического питания

PPU_DynDeny 

Маска события отказа динамического перехода

PPU_DynAccept 

Маска события принятия динамического перехода

PPU_UnsptPolicy 

Маска события неподдерживаемой политики

PPU_AddEventNameAll 

Все доступные маски дополнительных событий

◆ ppu_domain_index

Индексы блоков PPU.

Элементы перечислений
PPU_DomainCPU0 

Домен питания подсистемы CPU0

PPU_DomainCPU1 

Домен питания подсистемы CPU1

PPU_DomainDEBUG 

Домен питания подсистемы отладки

PPU_DomainCRYPTO 

Домен питания крипто-ускорителя CryptoCell

PPU_DomainGMS 

Домен питания крипто-ускорителя GMS

PPU_DomainGNSS 

Домен питания навигационного ядра GNSS

PPU_DomainSRAM0 

Домен питания банков памяти SRAM0

PPU_DomainSRAM1 

Домен питания банков памяти SRAM1

PPU_DomainSRAM2 

Домен питания банков памяти SRAM2

PPU_DomainSRAM3 

Домен питания банков памяти SRAM3

PPU_DomainSYS 

Домен питания системный

PPU_DomainMax 

Максимальниое значение индекса домена

◆ ppu_event_name

Имена масок прерываний

Элементы перечислений
PPU_Locked 

Маска события блокировки

PPU_EmuDeny 

Маска события отказа от эмуляции перехода

PPU_EmuAccept 

Маска события принятия перехода эмуляции

PPU_StaDeny 

Маска события запрета статического перехода

PPU_StaAccept 

Маска события принятия статического перехода

PPU_StaPolicyTrn 

Маска события полного завершения статического перехода к политике

PPU_EventNameAll 

Все доступные маски событий

◆ ppu_opportunities_idr0

Идентификационный регистр PPU_IDR0.

Элементы перечислений
PPU_DYN_WRM_RST_SPT 

Динамическая поддержка WARM_RST

PPU_DYN_ON_SPT 

Динамическая поддержка ON

PPU_DYN_FUNC_RET_SPT 

Динамическая поддержка FUNC_RET

PPU_DYN_FULL_RET_SPT 

Динамическая поддержка FULL_RET

PPU_DYN_MEM_OFF_SPT 

Динамическая поддержка MEM_OFF

PPU_DYN_LGC_RET_SPT 

Динамическая поддержка LOGIC_RET

PPU_DYN_MEM_RET_EMU_SPT 

Динамическая поддержка MEM_RET_EMU

PPU_DYN_MEM_RET_SPT 

Динамическая поддержка MEM_RET

PPU_DYN_OFF_EMU_SPT 

Динамическая поддержка OFF_EMU

PPU_DYN_OFF_SPT 

Динамическая поддержка OFF

PPU_STA_DBG_RECOV_SPT 

Поддержка DBG_RECOV

PPU_STA_WRM_RST_SPT 

Поддержка WARM_RST

PPU_STA_ON_SPT 

Поддержка ON

PPU_STA_FUNC_RET_SPT 

Поддержка FUNC_RET

PPU_STA_FULL_RET_SPT 

Поддержка FULL_RET

PPU_STA_MEM_OFF_SPT 

Поддержка MEM_OFF

PPU_STA_LGC_RET_SPT 

Поддержка LOGIC_RET

PPU_STA_MEM_RET_EMU_SPT 

Поддержка MEM_RET_EMU

PPU_STA_MEM_RET_SPT 

Поддержка MEM_RET

PPU_STA_OFF_EMU_SPT 

Поддержка OFF_EMU

PPU_STA_OFF_SPT 

Поддержка OFF

◆ ppu_opportunities_idr1

Идентификационный регистр PPU_IDR1.

Элементы перечислений
PPU_OFF_MEM_RET_TRANS 

Прямой переход от OFF к MEM_RET

PPU_OP_ACTIVE 

Модель использования режима работы для динамических переходов

PPU_STA_POLICY_OP_IRQ_SPT 

Статус события завершения перехода операционной политики

PPU_STA_POLICY_PWR_IRQ_SPT 

Статус события завершения перехода к политике электропитания

PPU_FUNC_RET_RAM_REG 

Указывает, присутствует ли регистр PPU_FUNRR или зарезервирован

PPU_FULL_RET_RAM_REG 

Указывает, присутствует или зарезервирован регистр PPU_FULRR

PPU_MEM_RET_RAM_REG 

Указывает, присутствует ли регистр PPU_MEMRR или зарезервирован

PPU_LOCK_SPT 

Блокировка и событие прерывания блокировки поддерживаются

PPU_SW_DEV_DEL_SPT 

Поддержка конфигурации управления задержкой программного устройства

PPU_PWR_MODE_ENTRY_DEL_SPT 

Поддержка задержки входа в режим питания

◆ ppu_power_mode

Состояние домена питания

Заметки
Приоритет состояния домена питания возрастает с возрастанием значения
Элементы перечислений
PPU_PowerModeOn 

Логика включена, оперативная память включена, компонент работает

PPU_PowerModeOff 

Логика выключена и оперативная память выключена

PPU_PowerModeMemRet 

Логика выключена, ОЗУ сохранено

PPU_PowerModeWarmRst 

Cхема в состоянии сброса с включенной логикой и оперативной памятью

PPU_PowerModeDbgRecov 

Cхема в состоянии сброса с включенной логикой и оперативной памятью. Этот режим используется для включения сброса компонента, как правило, когда он заблокирован или не работает, при этом сохраняется часть или все состояние компонента во время сброса для последующего анализа отладки

PPU_PowerModeFuncRet 

Логика включена, оперативная память сохранена, компонент работает

PPU_PowerModeMemOff 

Логика включена, ОЗУ выключено, компонент работает

PPU_PowerModeFullRet 

Логика и оперативная память в сохранении

PPU_PowerModeLogicRet 

Сохранение логики при отключенной оперативной памяти

PPU_PowerModeMemRetEmu 

Логика включена, оперативная память включена. Этот режим используется для имитации функционального состояния MEM_RET без отключения питания

PPU_PowerModeOffEmu 

Логика включена, оперативная память включена. Этот режим используется для имитации функционального состояния OFF без отключения питания

PPU_PowerModeMax 

Максимальное допустимое значение

◆ ppu_sense_index

Индексы бит блоков PPU, от которых зависят другие домены

Элементы перечислений
PPU_SenseCPU0 

Домен питания подсистемы CPU0

PPU_SenseCPU1 

Домен питания подсистемы CPU1

PPU_SenseCRYPTO 

Домен питания крипто-ускорителя CryptoCell

PPU_SenseGMS 

Домен питания крипто-ускорителя GMS

PPU_SenseGNSS 

Домен питания навигационного ядра GNSS

PPU_SenseSRAM0 

Домен питания банков памяти SRAM0

PPU_SenseSRAM1 

Домен питания банков памяти SRAM1

PPU_SenseSRAM2 

Домен питания банков памяти SRAM2

PPU_SenseSRAM3 

Домен питания банков памяти SRAM3

PPU_SenseSYS 

Домен питания системный

◆ ppu_status

enum ppu_status

Статусы драйвера PPU.

Элементы перечислений
PPU_Status_Ok 

Нет ошибок

PPU_Status_InvalidArgument 

Недопустимый аргумент

PPU_Status_FeatureNotSupport 

Не поддерживается

PPU_Status_DriverError 

Ошибка драйвера

PPU_Status_ConfigError 

Ошибка конфигурации

Функции

◆ PPU_ClrIRQMask()

enum ppu_status PPU_ClrIRQMask ( PPU_Type * base,
enum ppu_event_name irq,
enum ppu_add_event_name add_irq )

Функция сброса масок прерываний

Аргументы
baseБазовый адрес блока PPU
irqМаски основных прерываний
add_irqМАски дополнительных прерываний
Возвращаемые значения
PPU_Status_Ok
PPU_Status_InvalidArgument

◆ PPU_ClrIRQStatus()

enum ppu_status PPU_ClrIRQStatus ( PPU_Type * base,
enum ppu_event_name irq,
enum ppu_add_event_name add_irq )

Функция сброса состояний прерываний

Аргументы
baseБазовый адрес блока PPU
irqОсновные прерывания
add_irqДополнительные прерывания
Возвращаемые значения
PPU_Status_Ok
PPU_Status_InvalidArgument

◆ PPU_GetIRQMask()

enum ppu_status PPU_GetIRQMask ( PPU_Type * base,
enum ppu_event_name * irq,
enum ppu_add_event_name * add_irq )

Получение масок прерываний

Аргументы
baseБазовый адрес блока PPU
irqМаски прерываний
add_irqМаски дополнительных прерываний
Возвращает
Статус

◆ PPU_GetIRQStatus()

enum ppu_status PPU_GetIRQStatus ( PPU_Type * base,
enum ppu_event_name * irq,
enum ppu_add_event_name * add_irq )

Получение статуса прерываний

Аргументы
baseБазовый адрес блока PPU
irqСостояния прерываний
add_irqСостояния дополнительных прерываний
Возвращает
Статус

◆ PPU_GetLastAPIStatus()

enum ppu_status PPU_GetLastAPIStatus ( void )

Получение статуса выполнения функции, тип результата которой отличен от enum ppu_status.

Возвращает
Статус

◆ PPU_GetPDxSenseFromPDy()

uint32_t PPU_GetPDxSenseFromPDy ( enum ppu_domain_index pd_dst,
enum ppu_sense_index pd_src )

Функция получения зависимости доменов питания

Аргументы
pd_dstДомен который зависит от состояние другого домена
pd_srcДомен от которого зависит состояние другого домена
Возвращает
1 - Есть зависимость
0 - Нет зависимости или выполняемое действие не валидно. Узнать валидность можно вызвав ( PPU_GetLastAPIStatus )

◆ PPU_GetPowerState()

enum ppu_power_mode PPU_GetPowerState ( PPU_Type * base)

Функция получения состояния домена

Аргументы
baseБазовый адрес блока PPU
Возвращает
Состояние домена
Заметки
Если задан некорректный адрес, возвращается PPU_PowerModeOff,

◆ PPU_Init()

enum ppu_status PPU_Init ( PPU_Type * base,
struct ppu_config * cfg )

Функция инициализации блока PPU.

Аргументы
baseБазовый адрес блока PPU
cfgКонфигурация
Возвращаемые значения
PPU_Status_Ok
PPU_Status_InvalidArgument

◆ PPU_SetIRQMask()

enum ppu_status PPU_SetIRQMask ( PPU_Type * base,
enum ppu_event_name irq,
enum ppu_add_event_name add_irq )

Функция установки масок прерываний

Аргументы
baseБазовый адрес блока PPU
irqМаски основных прерываний
add_irqМАски дополнительных прерываний
Возвращаемые значения
PPU_Status_Ok
PPU_Status_InvalidArgument

◆ PPU_SetIRQStatus()

enum ppu_status PPU_SetIRQStatus ( PPU_Type * base,
enum ppu_event_name irq,
enum ppu_add_event_name add_irq )

Функция установки состояний прерываний

Аргументы
baseБазовый адрес блока PPU
irqОсновные прерывания
add_irqДополнительные прерывания
Возвращаемые значения
PPU_Status_Ok
PPU_Status_InvalidArgument

◆ PPU_SetPDCMPPUSense()

enum ppu_status PPU_SetPDCMPPUSense ( enum ppu_domain_index pd_dst,
enum ppu_sense_index pd_src,
uint32_t sense )

Функция установки зависимости доменов питания

Аргументы
pd_dstДомен который зависит от состояние другого домена
pd_srcДомен от которого зависит состояние другого домена
senseЗависимость: 1 - есть, 0 - нет
Возвращаемые значения
PPU_Status_Ok
PPU_Status_FeatureNotSupport

◆ PPU_SetState()

enum ppu_status PPU_SetState ( PPU_Type * base,
enum ppu_power_mode mode )

Функция запроса установки статического режима работы

Аргументы
baseБазовый адрес блока PPU
modeУстанавливаемое состояние
Заметки
Статический переход доменов CPUx в режим OFF недопустим и приведёт к возникновению BusFault.
Возвращаемые значения
PPU_Status_Ok
PPU_Status_InvalidArgument
PPU_Status_FeatureNotSupport

◆ PPU_SetStateDynamic()

enum ppu_status PPU_SetStateDynamic ( PPU_Type * base,
enum ppu_power_mode mode )

Функция запроса установки динамического режима работы

Аргументы
baseБазовый адрес блока PPU
modeУстанавливаемое состояние
Заметки
Переход доменов CPUx в режим OFF произойдет только после вызова инструкции WFI, в режим ON допускается переводить, когда ядро будет настроено для работы(у ядра будет исполняемая программа)
Возвращаемые значения
PPU_Status_Ok
PPU_Status_InvalidArgument
PPU_Status_FeatureNotSupport

◆ PPU_StateOffRequestHandler()

void PPU_StateOffRequestHandler ( void )

Функция отключения питания текущего ядра

Заметки
Переводит ядро, на котором исполняется функция в динамический режим Off: 1) Устанавливает признак глубокого сна; 2) Разрешает работу WIC/EWC, но не настраивает NVIC; 3) Разрешает отключение FPU, если он есть в ядре; 4) Запрашивает динамически Off; 5) Исполняет __WFI(); После этих действий ядро должно уснуть, а домен отключиться.
Эта функция должна быть использована для отключения одного ядра из другого ядра процессора. Например, если CPU0 пытается отключить CPU1, то эта функция должна вызываться на ядре CPU1 в механизме, который обрабатывает запрос остановки от CPU0 к CPU1 ( см. ppu_config ).