123 lines
4.2 KiB
C
123 lines
4.2 KiB
C
/****************************************************************************
|
|
|
|
Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED.
|
|
|
|
This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT
|
|
be copied by any method or incorporated into another program without
|
|
the express written consent of Aerospace C.Power. This Information or any portion
|
|
thereof remains the property of Aerospace C.Power. The Information contained herein
|
|
is believed to be accurate and Aerospace C.Power assumes no responsibility or
|
|
liability for its use in any way and conveys no license or title under
|
|
any patent or copyright and makes no representation or warranty that this
|
|
Information is free from patent or copyright infringement.
|
|
|
|
****************************************************************************/
|
|
|
|
#ifndef _APP_GPIO_H_
|
|
#define _APP_GPIO_H_
|
|
|
|
#include "app_flash.h"
|
|
#include "app_types.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
/* Max items count of all GPIO */
|
|
#define APP_IO_PIN_MAX_NUM 12
|
|
#define APP_GPIO_STATE_MAX_VALUE 1
|
|
#define APP_PWM_DUTY_CYCLE_MAX_VALUE 100
|
|
#define APP_PWM_FREQ_MIN_VALUE 4 //uint: kHz
|
|
#define APP_PWM_FREQ_MAX_VALUE 62 //uint: kHz
|
|
#define APP_PWM_MODE_MAX_VALUE 2
|
|
#define APP_PWM_ADJUST_TIME_MAX_VALUE 100
|
|
|
|
#define ADJUST_TOTAL_TIME 3000
|
|
#define ADJUST_PWM_STEPS 1
|
|
#define ADJUST_PWM_PERIOD 10 /* ms */
|
|
#define STATE_SAVE_FLASH 1
|
|
#define STATE_NO_SAVE 0
|
|
#define PWM_FREQ_DEF_VAL 5 /* default freq,unit:khz */
|
|
|
|
typedef enum {
|
|
APP_PIN_UNKNOWN = 0, /* UNKNOWN */
|
|
APP_PIN_GPIO = 1, /* GPIO out mode */
|
|
APP_PIN_PWM = 2, /* PWM mode */
|
|
APP_PIN_GPIO_IN = 3, /* GPIO in mode */
|
|
} app_pin_type_e;
|
|
|
|
typedef enum {
|
|
APP_PWM_CTL_REALTIME = 0, /* real-time control */
|
|
APP_PWM_CTL_LINAR = 1, /* linear gradient */
|
|
APP_PWM_CTL_LOGAR = 2, /* logar gradient */
|
|
} app_pwm_ctl_mode_e;
|
|
|
|
/* GPIO number */
|
|
typedef enum {
|
|
HI_GPIO_IDX_0 = 0, /* GPIO0 */
|
|
HI_GPIO_IDX_1 = 1, /* GPIO1 */
|
|
HI_GPIO_IDX_4 = 4, /* GPIO4 */
|
|
HI_GPIO_IDX_7 = 7, /* GPIO7 */
|
|
HI_GPIO_IDX_8 = 8, /* GPIO8 */
|
|
HI_GPIO_IDX_9 = 9, /* GPIO9 */
|
|
HI_GPIO_IDX_10 = 10, /* GPIO10 */
|
|
HI_GPIO_IDX_22 = 22, /* GPIO22 */
|
|
HI_GPIO_IDX_23 = 23, /* GPIO23 */
|
|
HI_GPIO_IDX_26 = 26, /* GPIO26 */
|
|
HI_GPIO_IDX_28 = 28, /* GPIO28 */
|
|
HI_GPIO_IDX_31 = 31, /* GPIO31 */
|
|
HI_GPIO_IDX_32 = 32, /* GPIO32 */
|
|
HI_GPIO_IDX_33 = 33, /* GPIO33 */
|
|
HI_GPIO_IDX_34 = 34, /* GPIO34 */
|
|
HI_GPIO_IDX_35 = 35, /* GPIO35 */
|
|
HI_GPIO_IDX_36 = 36, /* GPIO36 */
|
|
HI_GPIO_IDX_37 = 37, /* GPIO37 */
|
|
HI_GPIO_IDX_38 = 38, /* GPIO38 */
|
|
HI_GPIO_IDX_39 = 39, /* GPIO39 */
|
|
HI_GPIO_IDX_40 = 40, /* GPIO40 */
|
|
HI_GPIO_IDX_41 = 41, /* GPIO41 */
|
|
HI_GPIO_IDX_42 = 42, /* GPIO42 */
|
|
HI_GPIO_IDX_MAX, /* Max value, can not be used */
|
|
} app_gpio_idx_e;
|
|
|
|
#pragma pack(push) // save the pack status
|
|
#pragma pack(1) // 1 byte align
|
|
|
|
typedef struct {
|
|
uint16_t duration;
|
|
uint16_t times;
|
|
uint16_t current_val;
|
|
uint16_t end_val;
|
|
uint8_t timer_init;
|
|
} pwm_adjust_state;
|
|
|
|
#pragma pack(pop) /* restore the pack status */
|
|
|
|
void app_restore_hwio(void);
|
|
uint8_t app_get_hw_io_array_size(void);
|
|
uint8_t app_get_io_num(uint8_t pin[], uint8_t size);
|
|
bool_t app_check_io_state_param(app_io_state *io_state);
|
|
void app_pwm_config(uint8_t ch, uint8_t gpio_p, uint32_t pwm_freq,
|
|
uint32_t pwm_duty);
|
|
|
|
/**
|
|
* @brief app_pwm_get_usable_channel() - Get unused PWM channel.
|
|
*
|
|
* @return IOT_PWM_CHANNEL_0 ~ n -- usable channel.
|
|
* @return IOT_PWM_CHANNEL_INVAL -- no usable channel .
|
|
*/
|
|
uint8_t app_pwm_get_usable_channel(void);
|
|
uint16_t app_get_io_map(app_io_state *io_state);
|
|
uint16_t app_get_gpio_state(app_io_state *io_state);
|
|
uint16_t app_set_gpio_state(app_io_state *io_state, uint8_t save_flash);
|
|
void app_io_init(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _APP_GPIO_H_ */
|
|
|
|
|