日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

linux输出指定数量脉冲,ESM335x Linux输出脉冲计数

發(fā)布時間:2023/11/27 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux输出指定数量脉冲,ESM335x Linux输出脉冲计数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關(guān)鍵詞:Linux,脈沖計數(shù),ESM335x

作者:emtronix

摘要:ESM335X具有4路PWM輸出,其中PWM1和PWM2除了可以用于產(chǎn)生標(biāo)準(zhǔn)的PWM信號,現(xiàn)已支持輸出脈沖計數(shù)功能,可以在應(yīng)用程序中設(shè)置脈沖個數(shù),當(dāng)輸出脈沖個數(shù)達(dá)到指定值時,驅(qū)動程序自動停止PWM輸出,由于系統(tǒng)響應(yīng)延遲,使用輸出脈沖計數(shù)功能時最高頻率不應(yīng)超過100KHz。本文將介紹Linux系統(tǒng)下輸出脈沖計數(shù)功能的使用方法。

1、綜述

ESM335X具有4路PWM輸出,其中PWM1和PWM2除了可以用于產(chǎn)生標(biāo)準(zhǔn)的PWM信號,現(xiàn)已支持輸出脈沖計數(shù)功能,可以在應(yīng)用程序中設(shè)置脈沖個數(shù),當(dāng)輸出脈沖個數(shù)達(dá)到指定值時,驅(qū)動程序自動停止PWM輸出,由于系統(tǒng)響應(yīng)延遲,使用輸出脈沖計數(shù)功能時最高頻率不應(yīng)超過100KHz。本文將介紹Linux系統(tǒng)下輸出脈沖計數(shù)功能的使用方法。

2、應(yīng)用程序

1、使用PWM輸出功能需要設(shè)置如下結(jié)構(gòu)體:

struct pwm_config_info

{

unsigned intfreq; /* in Hz */

unsigned intduty; /* in % */

unsigned intpolarity;

unsigned intcount;

};

我們?yōu)榱藢崿F(xiàn)輸出計數(shù)功能更新了此結(jié)構(gòu)體,如果需要使用輸出脈沖計數(shù)功能,用戶需要更新頭文件“em335x_drivers.h”中的此結(jié)構(gòu)體及相應(yīng)的封裝函數(shù)(見下文),我們也提供更改過的頭文件和示例程序,需要的用戶可以和我們聯(lián)系。

● freq用于設(shè)置頻率,單位Hz,設(shè)置為0時停止輸出

● duty用于設(shè)置占空比,單位%

● polarity用于設(shè)置輸出極性(高電平有效或低電平有效),可以取值:

#definePWM_POLARITY_NORMAL(0 << 0) // 高電平有效

#define PWM_POLARITY_INVERTED(1 << 0) // 低電平有效

只有當(dāng)PWM脈沖信號輸出時,其對應(yīng)的IO才會被驅(qū)動為高電平或低電平,其余時間PWM引腳為高阻輸入狀態(tài),由于ESM335x主板上GPIO上拉電阻的作用,在沒有脈沖輸出時,PWM引腳為上拉輸入狀態(tài)(高電平)。如果實際使用時希望PWM平時保持為低電平,則需要在PWM信號上增加反向器或者增加1K歐姆的下拉電阻。

● count用于設(shè)置輸出脈沖個數(shù),count設(shè)置為0時為標(biāo)準(zhǔn)PWM輸出,連續(xù)輸出

2、使用PWM輸出時,首先需要打開對應(yīng)的設(shè)備文件,然后在調(diào)用write()函數(shù)進(jìn)行參數(shù)設(shè)置,我們對write()函數(shù)進(jìn)行了進(jìn)一步封裝:

int PWM_Start(int fd, int freq, int duty, int count )

{

int rc;

struct pwm_config_infoconf;

conf.freq = freq;

conf.duty = duty;

conf.polarity = POLARITY;

conf.count = count;

rc = write(fd, &conf, sizeof(struct pwm_config_info));

return rc;

}

用戶在應(yīng)用程序中可以直接調(diào)用此函數(shù)使能PWM脈沖輸出功能:

#include "pwm_api.h"

int fd;

int npwm = 1;

char device[32];

unsigned intfreq = 1000;

unsigned intduty = 50;

unsigned intcount = 5;

sprintf( device, "/dev/em335x_pwm%d", npwm );

fd = open(device, O_RDWR);

if ( fd < 0)

{

printf("can not open /dev/em335x_pwm%d device file!\n", npwm);

return -1;

}

printf( "Open %s\n", device );

PWM_Start( fd, freq, duty, count );

3、使用脈沖輸出計數(shù)功能后,在PWM輸出時可以調(diào)用read()函數(shù)讀取剩余輸出個數(shù),對于標(biāo)準(zhǔn)的連續(xù)PWM輸出read()函數(shù)沒有意義:

int buf;

int nread = read ( fd, &buf, sizeof(buf) );

if ( nread < 0 )

{

perror ( "read" );

exit(-1);

}

if ( buf > 0 )

printf ( "remaining count = %d\n", buf );

4、使用過程中也可以用write()函數(shù)停止PWM輸出,我們也進(jìn)行了封裝:

int PWM_Stop(int fd )

{

int rc;

struct pwm_config_infoconf;

memset( &conf, 0, sizeof(struct pwm_config_info));

rc = write(fd, &conf, sizeof(struct pwm_config_info));

return rc;

}

用戶直接調(diào)用此函數(shù)就可以停止PWM輸出:

PWM_Stop( fd);

使用完之后關(guān)閉設(shè)備文件:

close(fd);

5、我們在驅(qū)動中也實現(xiàn)了對select()函數(shù)的支持,select()函數(shù)只在進(jìn)行PWM輸出計數(shù)時有意義,熟悉select()函數(shù)的用戶可以在應(yīng)用程序中使用select()函數(shù)等待PWM脈沖計數(shù)輸出完成設(shè)置的個數(shù),然后再進(jìn)行其他操作,select()函數(shù)可以使用戶不必為了等待PWM脈沖計數(shù)輸出完成而阻塞應(yīng)用程序,同時select()函數(shù)也可以使用戶同時對PWM1和PWM2兩個設(shè)備進(jìn)行監(jiān)控,在應(yīng)用程序中的使用方法如下:

fd_set fdWrite;

struct timeval aTime;

int ret;

while(1)

{

FD_ZERO(&fdWrite);

FD_SET(fd,&fdWrite);

aTime.tv_sec = 2;

aTime.tv_usec = 0;

ret = select ( fd+1, NULL, &fdWrite, NULL, &aTime );

if ( ret<0 )

printf( "select, something wrong!\n " );

if ( ret>0 )

{

if ( FD_ISSET(fd, &fdWrite) )

{

printf ( "pwm out all complete!\n" );

/* PWM輸出已經(jīng)輸出完設(shè)置個數(shù),用戶可以在此進(jìn)行下一步操作 */

/* write(……) or something else */

break;

}

}

}

Polarity= PWM_POLARITY_INVERTED(低電平有效), freq=5000, duty=60, count=3 時程序運行結(jié)果如下:

如果需要使用脈沖輸出計數(shù)功能或者有任何疑問請和我們聯(lián)系。

總結(jié)

以上是生活随笔為你收集整理的linux输出指定数量脉冲,ESM335x Linux输出脉冲计数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。