本实验对应的例程在光盘资料的:i.MX6UL终结者光盘资料\04_裸机例程源码\5_beep 目录下,我们在Ubuntu系统下使用命令“mkdir 5_beep”建立“5_beep”文件夹,如图 1所示。
使用命令“cd 5_beep”进入5_beep文件。如图 2所示。
然后使用命令“cp -r …/4_led_bsp/* ./”将上一章试验中的所有内容拷贝到刚刚新建的“5_beep”文件夹里面,如图 3。
拷贝完成以后的工程如图 4所示。
在drivers驱动目录下新建“beep”文件夹。蜂鸣器驱动都放在这个目录下。
使用命令“sudo vi drivers/beep/beep.h”新建“beep.h”文件,如图 5所示。
在beep.h里添加如下内容。
1 #ifndef __BSP_BEEP_H
2 #define __BSP_BEEP_H
3
4 #include "imx6ul.h"
5
6
7 /* 函数声明 */
8 void beep_init(void);
9 void beep_switch(int status);
10 #endif
Beep.h文件里面声明了一些函数,添加后如图 6所示:
然后保存并退出,之后使用命令“sudo vi drivers/beep/beep.c”新建beep.c文件。如图 7所示:
添加内容如下:
1 #include "beep.h"
2
3 /*
4 * @description : 初始化蜂鸣器对应的IO
5 * @param : 无
6 * @return : 无
7 */
8 void beep_init(void)
9 {
10 /* 1、初始化IO复用,复用为GPIO5_IO01 */
11 IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,0);
12
13
14 /* 2、、配置GPIO1_IO03的IO属性
15 *bit 16:0 HYS关闭
16 *bit [15:14]: 00 默认下拉
17 *bit [13]: 0 kepper功能
18 *bit [12]: 1 pull/keeper使能
19 *bit [11]: 0 关闭开路输出
20 *bit [7:6]: 10 速度100Mhz
21 *bit [5:3]: 110 R0/6驱动能力
22 *bit [0]: 0 低转换率
23 */
24 IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,0X10B0);
25
26 /* 3、初始化GPIO,GPIO5_IO01设置为输出 */
27 GPIO5->GDIR |= (1 << 1);
28
29 /* 4、设置GPIO5_IO01输出高电平,关闭蜂鸣器 */
30 GPIO5->DR |= (1 << 1);
31 }
32
33 /*
34 * @description : 蜂鸣器控制函数,控制蜂鸣器打开还是关闭
35 * @param - status : 0,关闭蜂鸣器,1 打开蜂鸣器
36 * @return : 无
37 */
38 void beep_switch(int status)
39 {
40 if(status == ON)
41 GPIO5->DR &= ~(1 << 1); /* 打开蜂鸣器 */
42 else if(status == OFF)
43 GPIO5->DR |= (1 << 1); /* 关闭蜂鸣器 */
44 }
此文件一共有两个函数:
beep_init: 用来初始化BEEP所使用的GPIO,也就是初始化SNVS_TAMPER1引脚,将其复用为GPIO5_IO01功能,和LED灯初始化函数一致。
beep_switch:用来控制SNVS_TAMPER1引脚的电平,也就是设置 GPIO5_IO01 的高低电平。
如图 8所示:
修改完成之后保存并退出,使用命令“sudo vi main.c”修改主函数。如图 9所示:
修改后的内容如下:
1 #include "clk.h"
2 #include "delay.h"
3 #include "led.h"
4 #include "beep.h"
5
6 /*
7 * @description : main函数
8 * @param : 无
9 * @return : 无
10 */
11 int main(void)
12 {
13 clk_enable(); /* 使能所有的时钟 */
14 led_init(); /* 初始化led */
15 beep_init(); /* 初始化beep */
16
17 while(1)
18 {
19 /* 打开LED0和蜂鸣器 */
20 led_switch(LED0,ON);
21 beep_switch(ON);
22 delay(500);
23
24 /* 关闭LED0和蜂鸣器 */
25 led_switch(LED0,OFF);
26 beep_switch(OFF);
27 delay(500);
28 }
29
30 return 0;
31 }
我们在main.c里添加beep.h头文件,然后在主函数中添加初始化beep的函数,最后在while(1)循环中添加蜂鸣器开关的内容。添加完成后如图 10所示:
至此main.c我们就添加完成了。