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_ */
 | |
| 
 | |
| 
 |