rt-thread/bsp/allwinner/libraries/sunxi-hal/include/hal/sunxi_hal_ledc.h

77 lines
1.7 KiB
C

#ifndef __HAL_LEDC_H
#define __HAL_LEDC_H
#include "sunxi_hal_common.h"
#include "ledc/platform_ledc.h"
#include "ledc/common_ledc.h"
#ifdef __cplusplus
extern "C" {
#endif
#define SUNXI_LEDC_FIFO_DEPTH 32
enum ledc_output_mode_val {
LEDC_OUTPUT_GRB = 0 << 6,
LEDC_OUTPUT_GBR = 1 << 6,
LEDC_OUTPUT_RGB = 2 << 6,
LEDC_OUTPUT_RBG = 3 << 6,
LEDC_OUTPUT_BGR = 4 << 6,
LEDC_OUTPUT_BRG = 5 << 6
};
enum {
DEBUG_INIT = 1U << 0,
DEBUG_SUSPEND = 1U << 1,
DEBUG_INFO = 1U << 2,
DEBUG_INFO1 = 1U << 3,
DEBUG_INFO2 = 1U << 4,
};
struct ledc_config {
unsigned int led_count;
unsigned int reset_ns;
unsigned int t1h_ns;
unsigned int t1l_ns;
unsigned int t0h_ns;
unsigned int t0l_ns;
unsigned int wait_time0_ns;
unsigned long long wait_time1_ns;
unsigned int wait_data_time_ns;
char *output_mode;
unsigned int *data;
unsigned int length;
};
enum ledc_irq_ctrl_reg {
LEDC_TRANS_FINISH_INT_EN = (1 << 0),
LEDC_FIFO_CPUREQ_INT_EN = (1 << 1),
LEDC_WAITDATA_TIMEOUT_INT_EN = (1 << 3),
LEDC_FIFO_OVERFLOW_INT_EN = (1 << 4),
LEDC_GLOBAL_INT_EN = (1 << 5),
};
enum ledc_irq_status_reg {
LEDC_TRANS_FINISH_INT = (1 << 0),
LEDC_FIFO_CPUREQ_INT = (1 << 1),
LEDC_WAITDATA_TIMEOUT_INT = (1 << 3),
LEDC_FIFO_OVERFLOW_INT = (1 << 4),
LEDC_FIFO_FULL = (1 << 16),
LEDC_FIFO_EMPTY = (1 << 17),
};
void hal_ledc_init(void);
void hal_ledc_deinit(void);
void hal_ledc_trans_data(struct ledc_config *ledc);
void hal_ledc_clear_all_irq(void);
unsigned int hal_ledc_get_irq_status(void);
void hal_ledc_dma_callback(void *para);
void hal_ledc_reset(void);
#ifdef __cplusplus
}
#endif
#endif