溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android中用PWM控制蜂鳴器輸出的測試方法是什么

發(fā)布時間:2022-01-12 15:02:12 來源:億速云 閱讀:227 作者:iii 欄目:互聯網科技

本文小編為大家詳細介紹“android中用PWM控制蜂鳴器輸出的測試方法是什么”,內容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“android中用PWM控制蜂鳴器輸出的測試方法是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

基于 QtE 系統。4418MCU 共提供了 5 路 PWM 輸出,其中一路未引出,所以共有 4 路可用的 PWM 輸出。
注意:本文檔中提供的例程,沒有注冊設備和驅動,只是在驅動入口和出口函數中進行了配置。如果用戶需要生成設備節(jié)點,則需要自行添加剩余部分,這部分可以參考 GPIO 操作的文檔。
1 配置 IO
打開底板電路圖,搜索“beep”,可以看到 beep 的網絡名為“MCU_ISO7816_CLK”,如下圖所示。
android中用PWM控制蜂鳴器輸出的測試方法是什么
在核心板原理圖,搜索該關鍵詞“MCU_ISO7816_CLK”,可見其對應 PWM2,如下圖所示。
android中用PWM控制蜂鳴器輸出的測試方法是什么
所以,接下來我們便對 PWM2 進行操作。在下面的操作之前,我們需要配置內核,取消內核中 buzzer 的驅動,解除該驅動對蜂鳴器的占用,其目錄如下圖所示。
android中用PWM控制蜂鳴器輸出的測試方法是什么
將該選項改為未選中狀態(tài),如下圖所示。
android中用PWM控制蜂鳴器輸出的測試方法是什么
接下來,編譯燒寫該內核鏡像(boot.img)到開發(fā)板。再進行下面的操作即可。
2 編寫驅動程序
在 linux 內核中有一個規(guī)律,Linux 內核開發(fā)者把通用的東西都總結出來,個性化的東西就留出接口,和 GPIO 驅動類似,PWM 驅動在內核中也提供了對應的接口函數,內核提供的接口函數聲明在 include/linux/pwm.h 中。
//申請一個 PWM 資源
struct pwm_device *pwm_request(int pwm_id, const char *label);
//釋放一個 PWM 資源
void pwm_free(struct pwm_device *pwm);
//配置 PWM
int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);
//使能 PWM,duty_ns 為高電平所用時間,period_ns 整個周期為所用時間,單位為納秒。
int pwm_enable(struct pwm_device *pwm);
//不使能 PWM
void pwm_disable(struct pwm_device *pwm);
根據以上這些,我們便可以編寫一個簡單的 pwm 輸出程序,來控制蜂鳴器的頻率。創(chuàng)建
名稱為 4418x_pwm.c 的文件,程序代碼如下所示。
#include
#include
#include
#include
#include
#include
#include
#include
#include
/*pwm for this buzzer*/
struct pwm_device *pwm = NULL;
static int __init buzzer_init(void)
{
int ret;
printk(" check buzzer init.\n");
pwm = pwm_request(2, "buzzer");
if ( pwm == NULL ) {
printk("buzzer open error.\n");
}
//printk(KERN_EMERG "pwm_request %d ",pwm);
ret=pwm_config(pwm,100000,200000);//設置了 1000Hz 頻率的聲音
printk("pwm_config %d ",ret);
printk("pwm_config %d ",ret);
ret=pwm_enable(pwm);
printk("pwm_enable %d ",ret);
printk(KERN_EMERG "done2. \n") ;
return 0;
}
static void __exit buzzer_exit(void)
{
pwm_config(pwm,0,0); //關閉蜂鳴器輸出
pwm_disable(pwm); // 關閉 pwm
pwm_free(pwm); // 釋放 pwm 資源
}
module_init(buzzer_init);
module_exit(buzzer_exit);
MODULE_DESCRIPTION("pwm_buzzer driver");
MODULE_LICENSE("GPL");
2.2 編寫 Makefile
接下來進行編寫 Makefile 文件。
export ARCH=arm
obj-m += 4418x_pwm.o
KDIR := /home/topeet/4418/4G/20170914/android/kernel
PWD = $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o modules.order *.ko *mod.c Module.symvers
腳本中,export ARCH=arm 表示設置目標 CPU 類別為 arm,也就是編譯的依賴內核和驅動模塊目標 CPU 為 ARM。
obj-m += 4418x_pwm.o 表示編譯的源文件為 4418x_pwm.c, 如果源文件名有變化,則需要修改成對應的文件名。
KDIR 參數指向對應的內核源碼目錄。作者的內核源碼是在/home/topeet/4418/4G/20170914/android/kernel 目錄下,用戶要根據自己的具體情況來修改。
2.3 編譯運行
首先設置環(huán)境變量,使其在編譯時使用源碼中的編譯器。在源碼目錄中使用”cdkernel”進入 kernel 目錄。然后使用命令“make menuconfig”打開內核缺省配置界面,如下圖所示。
android中用PWM控制蜂鳴器輸出的測試方法是什么
進入圖中高亮的“General setup”,如下圖所示。
android中用PWM控制蜂鳴器輸出的測試方法是什么
可以看到圖中高亮的文本,描述了當前源碼使用的編譯器為“arm-eabi-”,我們回到源碼文件夾,使用命令“find ./ -name arm-eabi-*”,可以得到源碼中編譯器所在路徑,如下圖所示。
android中用PWM控制蜂鳴器輸出的測試方法是什么
這樣,源碼編譯器的絕對路徑為源碼所在路徑加上上圖中紅框的路徑,在本文中為“/home/topeet/4418/4G/20170914/android/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7/bin/”,因為筆者是用 root 登錄的,所以打開文件“/root/.bashrc”在里面添加這樣一條內容,如下圖所示。
android中用PWM控制蜂鳴器輸出的測試方法是什么
接下來,我們便可以進行編譯了。
將 Makefile 與 C 程序放在 Ubuntu 系統的同一目錄。如下圖所示。
android中用PWM控制蜂鳴器輸出的測試方法是什么
在當前目錄輸入“make”開始編譯,生成內核模塊文件“ 4418x_pwm.ko”,如下圖所示。
android中用PWM控制蜂鳴器輸出的測試方法是什么
將該內核模塊文件拷貝到開發(fā)板,接下來在超級終端使用命令“insmod4418x_pwm.ko”加載該模塊,如下圖所示。
android中用PWM控制蜂鳴器輸出的測試方法是什么
模塊加載成功,同時蜂鳴器響起高頻聲音。然后使用命令“rmmod 4418x_pwm”卸載該驅動,如下圖所示。
android中用PWM控制蜂鳴器輸出的測試方法是什么
此時,蜂鳴器停止播放高頻聲音,PWM 蜂鳴器測試例程到此結束。
android中用PWM控制蜂鳴器輸出的測試方法是什么

讀到這里,這篇“android中用PWM控制蜂鳴器輸出的測試方法是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI