mirror of
https://github.com/pvvx/RTL00_WEB.git
synced 2025-07-31 20:31:05 +00:00
update
This commit is contained in:
parent
34d3652711
commit
39f77eb92b
1844 changed files with 899433 additions and 7 deletions
22
USDK/example_sources/pm_deepsleep/readme.txt
Normal file
22
USDK/example_sources/pm_deepsleep/readme.txt
Normal file
|
@ -0,0 +1,22 @@
|
|||
Example Description
|
||||
|
||||
This example describes how to use deep sleep api.
|
||||
|
||||
Requirement Components:
|
||||
a LED
|
||||
a push button
|
||||
|
||||
Pin name PC_4 and PC_5 map to GPIOC_4 and GPIOC_5:
|
||||
- PC_4 as input with internal pull-high, connect a push button to this pin and ground.
|
||||
- PC_5 as output, connect a LED to this pin and ground.
|
||||
|
||||
In this example, LED is turned on after device initialize.
|
||||
User push the button to turn off LED and trigger device enter deep sleep mode for 10s.
|
||||
If user press any key before sleep timeout, the system will resume.
|
||||
LED is turned on again after device initialize.
|
||||
|
||||
It can be easily measure power consumption in normal mode and deep sleep mode before/after push the putton.
|
||||
|
||||
NOTE: You will see device resume immediately at first time.
|
||||
It's because the log uart is a wakeup source and it buffered a wakeup event when DAP is used.
|
||||
The symptom won't appear if you use power source on R43 and only power on module.
|
110
USDK/example_sources/pm_deepsleep/src/main.c
Normal file
110
USDK/example_sources/pm_deepsleep/src/main.c
Normal file
|
@ -0,0 +1,110 @@
|
|||
/*
|
||||
* Routines to access hardware
|
||||
*
|
||||
* Copyright (c) 2015 Realtek Semiconductor Corp.
|
||||
*
|
||||
* This module is a confidential and proprietary property of RealTek and
|
||||
* possession or use of this module requires written permission of RealTek.
|
||||
*/
|
||||
|
||||
#include "device.h"
|
||||
#include "gpio_api.h" // mbed
|
||||
#include "gpio_irq_api.h" // mbed
|
||||
#include "sleep_ex_api.h"
|
||||
#include "sys_api.h"
|
||||
#include "diag.h"
|
||||
#include "main.h"
|
||||
|
||||
#define GPIO_LED_PIN PC_5
|
||||
#define GPIO_IRQ_PIN PC_4
|
||||
|
||||
// deep sleep can only be waked up by GPIOB_1 and GTimer
|
||||
#define GPIO_WAKE_PIN PB_1
|
||||
|
||||
// NOTICE: The pull condition may differnet on your board
|
||||
PinName pull_down_list[] = {
|
||||
PA_0, PA_1, PA_2, PA_3, PA_4, PA_5, PA_6, PA_7,
|
||||
PB_0, PB_3, PB_4, PB_5, PB_6, PB_7,
|
||||
PC_0, PC_1, PC_2, PC_3, PC_4, PC_5, PC_6, PC_7, PC_8, PC_9,
|
||||
PD_0, PD_1, PD_2, PD_3, PD_4, PD_5, PD_6, PD_7, PD_8, PD_9,
|
||||
PE_0, PE_1, PE_2, PE_3, PE_4, PE_5, PE_6, PE_7, PE_8, PE_9, PE_A,
|
||||
PF_1, PF_2, PF_3, PF_4, PF_5
|
||||
};
|
||||
|
||||
// NOTICE: The pull condition may differnet on your board
|
||||
PinName pull_up_list[] = {
|
||||
PB_2,
|
||||
PF_0,
|
||||
PG_0, PG_1, PG_2, PG_3, PG_4, PG_5, PG_6, PG_7,
|
||||
PH_0, PH_1, PH_2, PH_3, PH_4, PH_5, PH_6, PH_7,
|
||||
PI_0, PI_1, PI_2, PI_3, PI_4, PI_5, PI_6, PI_7,
|
||||
PJ_0, PJ_1, PJ_2, PJ_3, PJ_4, PJ_5, PJ_6,
|
||||
PK_0, PK_1, PK_2, PK_3, PK_4, PK_5, PK_6
|
||||
};
|
||||
|
||||
void gpio_pull_control()
|
||||
{
|
||||
int i;
|
||||
gpio_t gpio_obj;
|
||||
|
||||
for (i=0; i < sizeof(pull_down_list) / sizeof(pull_down_list[0]); i++) {
|
||||
gpio_init(&gpio_obj, pull_down_list[i]);
|
||||
gpio_dir(&gpio_obj, PIN_INPUT);
|
||||
gpio_mode(&gpio_obj, PullDown);
|
||||
}
|
||||
|
||||
for (i=0; i < sizeof(pull_up_list) / sizeof(pull_up_list[0]); i++) {
|
||||
gpio_init(&gpio_obj, pull_up_list[i]);
|
||||
gpio_dir(&gpio_obj, PIN_INPUT);
|
||||
gpio_mode(&gpio_obj, PullUp);
|
||||
}
|
||||
}
|
||||
|
||||
void gpio_demo_irq_handler (uint32_t id, gpio_irq_event event)
|
||||
{
|
||||
gpio_t *gpio_led;
|
||||
gpio_led = (gpio_t *)id;
|
||||
|
||||
printf("Enter deep sleep...Wait 10s or give rising edge at PB_1 to wakeup system.\r\n\r\n");
|
||||
|
||||
// turn off led
|
||||
gpio_write(gpio_led, 0);
|
||||
|
||||
// turn off log uart
|
||||
sys_log_uart_off();
|
||||
|
||||
// initialize wakeup pin at PB_1
|
||||
gpio_t gpio_wake;
|
||||
gpio_init(&gpio_wake, GPIO_WAKE_PIN);
|
||||
gpio_dir(&gpio_wake, PIN_INPUT);
|
||||
gpio_mode(&gpio_wake, PullDown);
|
||||
|
||||
// Please note that the pull control is different in different board
|
||||
// This example is a sample code for RTL Ameba Dev Board
|
||||
gpio_pull_control();
|
||||
|
||||
// enter deep sleep
|
||||
deepsleep_ex(DSLEEP_WAKEUP_BY_GPIO | DSLEEP_WAKEUP_BY_TIMER, 10000);
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
gpio_t gpio_led;
|
||||
gpio_irq_t gpio_btn;
|
||||
|
||||
// Init LED control pin
|
||||
gpio_init(&gpio_led, GPIO_LED_PIN);
|
||||
gpio_dir(&gpio_led, PIN_OUTPUT); // Direction: Output
|
||||
gpio_mode(&gpio_led, PullNone); // No pull
|
||||
|
||||
// Initial Push Button pin as interrupt source
|
||||
gpio_irq_init(&gpio_btn, GPIO_IRQ_PIN, gpio_demo_irq_handler, (uint32_t)(&gpio_led));
|
||||
gpio_irq_set(&gpio_btn, IRQ_FALL, 1); // Falling Edge Trigger
|
||||
gpio_irq_enable(&gpio_btn);
|
||||
|
||||
// led on means system is in run mode
|
||||
gpio_write(&gpio_led, 1);
|
||||
printf("\r\nPush button at PC_4 to enter deep sleep\r\n");
|
||||
|
||||
while(1);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue