本实验的源码工程在开发板光盘资料的:i.MX6UL终结者光盘资料\04_裸机例程源码\18_backlight 目录下。我们在Ubuntu系统下使用命令“mkdir 18_backlight”建立“18_backlight”文件夹,如图 1所示:
然后使用“cd 18_backlight”命令进入到18_backlight文件夹,如图 2所示:
然后使用命令“cp -r …/17_touchscreen/* ./”将上一章试验中的所有内容拷贝到刚刚新建的“18_backlight”里面,如图 3所示:
然后在drivers目录下建立backlight文件夹,用来保存背光的驱动文件,然后在“drivers/backlight”目录中新建backlight.h和backlight.c两个文件,然后在backlight.h文件输入下面的代码:
1 #ifndef _BACKLIGHT_H
2 #define _BACKLIGHT_H
3
4 #include "imx6ul.h"
5
6 /* 背光PWM结构体 */
7 struct backlight_dev_struc
8 {
9 unsigned char pwm_duty;/* 占空比*/
10 };
11
12
13 /* 函数声明 */
14 void backlight_init(void);
15 void pwm1_enable(void);
16 void pwm1_setsample_value(unsigned int value);
17 void pwm1_setperiod_value(unsigned int value);
18 void pwm1_setduty(unsigned char duty);
19 void pwm1_irqhandler(void);
20
21 #endif
第7行定义了一个背光的结构体,用来存储PWM的占空比。第14行到第19行声明了一些函数。
然后我们打开backlight.c文件,在里面输入下面的内容:
1 #include "backlight.h"
2 #include "int.h"
3 #include "stdio.h"
4
5
6 /* 背光设备 */
7 struct backlight_dev_struc backlight_dev;
8
9 /*
10 * @description : pwm1中断处理函数
11 * @param : 无
12 * @return : 无
13 */
14 void pwm1_irqhandler(void)
15 {
16
17 if(PWM1->PWMSR & (1 << 3))/* FIFO为空中断 */
18 {
19 /* 将占空比信息写入到FIFO中,其实就是设置占空比 */
20 pwm1_setduty(backlight_dev.pwm_duty);
21 PWM1->PWMSR |= (1 << 3); /* 写1清除中断标志位 */
22 }
23 }
24
25 /*
26 * @description : 初始化背光PWM
27 * @param : 无
28 * @return : 无
29 */
30 void backlight_init(void)
31 {
32 unsigned char i = 0;
33
34