分析lk的leds_init()函数
来源:互联网 发布:js如何获取对象的长度 编辑:程序博客网 时间:2024/05/29 18:39
1.函数调用关系:
void platform_init(void)leds_init();cust_led_init();struct cust_gpio_para *para = &lpara;para->bl_mode = 0;mt65xx_backlight_off();mt65xx_leds_brightness_set(MT65XX_LED_TYPE_LCD, LED_OFF);mt65xx_led_set_cust(&cust_led_list[type], level);((cust_brightness_set)(cust->data))(level);//typedef int (*cust_brightness_set)(int level);2.相关的结构体:
struct cust_mt65xx_led {char *name;enum mt65xx_led_mode mode;int data; struct PWM_config config_data;};struct PWM_config{int clock_source;int div;int low_duration;int High_duration;BOOL pmic_pad;};struct cust_gpio_para {int bl_mode;unsigned short bl_timing_start;unsigned short bl_timing_low;unsigned short bl_timing_high;unsigned short bl_timing_shutdown;unsigned short max_adjust;unsigned short min_adjust;unsigned short max_level;unsigned short min_level;};static struct cust_gpio_para lpara;enum mt65xx_led_type{MT65XX_LED_TYPE_RED = 0,MT65XX_LED_TYPE_GREEN,MT65XX_LED_TYPE_BLUE,MT65XX_LED_TYPE_JOGBALL,MT65XX_LED_TYPE_KEYBOARD,MT65XX_LED_TYPE_BUTTON,MT65XX_LED_TYPE_LCD,MT65XX_LED_TYPE_TOTAL,};typedef enum { DISP_PWM0 = 0x1, DISP_PWM1 = 0x2, DISP_PWM_ALL = (DISP_PWM0 | DISP_PWM1)} disp_pwm_id_t;static struct cust_mt65xx_led cust_led_list[MT65XX_LED_TYPE_TOTAL] = {{"red", MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},{"green", MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},{"blue", MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},{"jogball-backlight", MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},{"keyboard-backlight",MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},{"button-backlight", MT65XX_LED_MODE_NONE, -1,{0,0,0,0,0}},{"lcd-backlight", MT65XX_LED_MODE_CUST_BLS_PWM, (int)disp_bls_set_backlight,{0}},};
3.贴代码
int disp_bls_set_backlight(int level_256){int level_1024 = 0;if (level_256 <= 0)level_1024 = 0;else if (level_256 >= 255)level_1024 = 1023;else {level_1024 = (level_256 << 2) + 2;}return disp_pwm_set_backlight(disp_pwm_get_main(), level_1024);}static disp_pwm_id_t g_pwm_main_id = DISP_PWM0;disp_pwm_id_t disp_pwm_get_main(void){return g_pwm_main_id;}int disp_pwm_set_backlight(disp_pwm_id_t id, int level_1024){disp_pwm_init(id);reg_base = pwm_get_reg_base(id);PWM_REG_SET(reg_base + DISP_PWM_COMMIT_OFF, 0);PWM_REG_SET(reg_base + DISP_PWM_CON_1_OFF, (level_1024 << 16) | 0x3ff);}/* 该函数的主要功能是:使能PWM0的时钟,根据数组中PWM_config配置数据来设置时钟源和PWM div*/void disp_pwm_init(disp_pwm_id_t id){ddp_enable_module_clock(DISP_MODULE_PWM0);cust = &cust_led_list[MT65XX_LED_TYPE_LCD];config_data = &cust->config_data;unsigned int reg_val = DISP_REG_GET(CLK_CFG_7);PWM_REG_SET(CLK_CFG_7, (reg_val & ~0x3) | config_data->clock_source);pwm_div =(config_data->div == 0) ? PWM_DEFAULT_DIV_VALUE : config_data->div;pwm_div &= 0x3FF;PWM_REG_SET(reg_base + DISP_PWM_CON_0_OFF, pwm_div << 16);PWM_REG_SET(reg_base + DISP_PWM_CON_1_OFF, 1023);/* 1024 levels */}
阅读全文
0 0
- 分析lk的leds_init()函数
- 291 LK的数学题【欧拉函数】
- LK的数学题 欧拉函数
- lk里的经典c函数
- lk启动过程分析
- android LK(代码分析)
- lk及其流程分析
- Lk启动流程分析
- little kernel分析 [LK]
- lk启动流程分析
- 分析 mtk lk 源代码
- NYOJ 题目291 LK的数学题(欧拉函数)
- lk启动流程详细分析
- lk启动流程详细分析
- lk启动流程详细分析
- lk启动流程详细分析
- lk启动流程详细分析
- lk启动流程详细分析
- Java面试题全集(上)
- 谷歌的变种murmurHash算法
- Android利用硬解码和OpenGL ES来高效处理MP4视频
- windows服务器 IIS FTP服务
- 理解 Thread.Sleep 函数
- 分析lk的leds_init()函数
- VariantClear 和 VariantInit 函数
- contains( )方法
- 类似SCSF中EventBroker解耦事件调用方和接受方,打破"+="带来的耦合
- 【知识】UML类图与类的关系详解
- js调试技巧 实用
- CF C. Classroom Watch【枚举】
- Docker容器实战-容器的网络及数据
- 伸展树 模板(指针+数组)