EVTC
事件控制器(EVTC)简介
EVTC是事件控制器模块,用于事件源状态挂起、使能事件源,屏蔽事件源,及主动提起事件源。事件触发后,可用于退出CPU-GATED低功耗模式。EVTC主要特征:
- 最多支持32个事件源;
- 支持事件源的主动提起和屏蔽;
- 支持事件源状态挂起;
访问事件控制器
,库中提供了以下接口:
函数 | 描述 |
---|---|
evtc_enable() | 事件源使能 |
evtc_disable() | 事件源失能 |
evtc_set_pending() | 事件源状态挂起 |
evtc_set_unpend() | 取消事件源挂起状态 |
evtc_get_status() | 获取事件源挂起状态 |
evtc_trig_event() | 事件源提起 |
evtc_shield_masks() | 事件源屏蔽 |
evtc_unshield_masks() | 事件源禁屏蔽 |
事件源使能
事件源使能,调用该接口,对应的事件源被允许在事件源状态挂起寄存器中挂起,从而触发CPU-GATED模式,函数原型如下所示:
void evtc_enable(EVTC_TYPE *EVTC, EVTC_TYPE_t evtc_type);
事件源失能
事件源失能,调用该接口,对应的事件源将被禁止触发,函数原型如下所示:
void evtc_disable(EVTC_TYPE *EVTC, EVTC_TYPE_t evtc_type);
事件源状态挂起
事件源状态挂起,调用该接口,当有事件源触发时,对应的事件将被挂起,并退出CPU-GATED模式,函数原型如下所示:
void evtc_set_pending(EVTC_TYPE *EVTC, EVTC_TYPE_t evtc_type);
取消事件源挂起状态
取消事件源挂起状态,调用该接口,当有事件源触发时,对应的事件不会被挂起,函数原型如下所示:
void evtc_set_unpend(EVTC_TYPE *EVTC, EVTC_TYPE_t evtc_type);
获取事件源挂起状态
获取事件源挂起状态,调用该接口可获取事件源挂起状态,函数原型如下所示:
uint8_t evtc_get_status(EVTC_TYPE *EVTC, EVTC_TYPE_t evtc_type);
事件源提起
事件源提起,调用该接口,对应事件源被主动提起,函数原型如下所示:
void evtc_trig_event(EVTC_TYPE *EVTC, EVTC_TYPE_t evtc_type);
事件源屏蔽
事件源屏蔽,调用该接口,对应事件源被屏蔽,函数原型如下所示:
void evtc_shield_masks(EVTC_TYPE *EVTC, EVTC_TYPE_t evtc_type);
事件源禁屏蔽
事件源禁屏蔽,调用该接口,对应事件源不会被屏蔽,函数原型如下所示:
void evtc_unshield_masks(EVTC_TYPE *EVTC, EVTC_TYPE_t evtc_type);
EVTC使用示例
以下提供使用UART作为事件源触发事件实例。
#include <stdio.h>
#include "evtc.h"
#include "pmu.h"
static void delay_ms(uint32_t nms)
{
for(int i=0;i<nms;i++)
{
for(int j=0;j<4500*3;j++)
{
asm("nop");
}
}
}
int main(int argc, char **argv)
{
printf("Systerm power on.\r\n");
delay_ms(1000); //in case cpu lucked
printf("cpu enter idle mode");
evtc_enable(UC_EVTC, UART0_EVTC);
pmu_enter_idle(UC_PMU);
printf("cpu gated");
while(1);
return 0;
}