PWM 驱动函数

 

函数名称: BOOL  PWM_Close(DWORD Handle)

功能描述:驱动程序关闭函数

函数参数: DWORD Handle :驱动程序句柄

函数返回值: FALSE: 失败     TRUE: 成功

调用程序: CloseHandle(hFile);

 

 

函数名称: DWORD   PWM_Open (

                              DWORD dwData,

                                                DWORD dwAccess,

                                                DWORD dwShareMode

                                                 )

功能描述:打开驱动程序

函数参数: DWORD dwData     : 设备驱动程序句柄

          DWORD dwAccess   : 访问请求代码 , 是读和写的组合

          DWORD dwShareMode: 共享模式  

函数返回值:驱动程序引用事例句柄

调用程序:

CreateFile(TEXT("PWM1:"), GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);  

 

 

函数名称: BOOL  PWM_IOControl(

                                                     DWORD Handle,

                                                     DWORD dwIoControlCode,

                                                     PBYTE pInBuf,

                                                     DWORD nInBufSize,

                                                     PBYTE pOutBuf,

                                                     DWORD nOutBufSize,

                                                     PDWORD pBytesReturned

                                                )

功能描述:驱动程序 I/O 请求

函数参数: Handle :设备驱动的句柄

                 dwIoControlCode :操作码   设备指定的 WORD 型标识,用于描述这个 IOControl 操作的定义,该值定义:

                     // 设置预分频值

#define IOCTL_PWM_SET_PRESCALER           1

// 设置分频值

#define IOCTL_PWM_SET_DIVIDER              2

// 设置频率和占空比

#define IOCTL_PWM_START                                   3

// 获取当前 PWM 的输出频率

#define IOCTL_PWM_GET_FREQUENCY         4

(pOutBuf       数据类型为 DWORD ,长度为 1 ,用于返回 PWM 输出频率值

nOutBufSize   取值为 1 )

 

                pInBuf :输入 Buffer  缓冲区指针,指向需要传给驱动程序使用的数据

                nInBufSize :输入 Buffer 的 size  要传给驱动程序使用的数据长度

                pOutBuf :输出 Buffer  缓冲区指针 指向驱动程序传给应用程序使用的数据

                nOutBufSize :输出 Buffer 的 size  要传送给应用程序使用的数据长度

                pBytesReturned :实际处理数据长度

 

 

dwIoControlCode
 pInBuf   
 nInBufSize    
 
IOCTL_PWM_SET_PRESCALER

设置预分频值
 第一字节为定时器编号,取值 0 或 1,

第二字节为分频值,取值为 0-------255

 
 2
 
IOCTL_PWM_SET_DIVIDER

设置分频值
 第一字节为定时器编号,取值 0 或 1,

第二字节为分频值,取值为 2 , 4 , 8 , 16
 2
 
IOCTL_PWM_START

设置频率和占空比
 第一字节为定时器编号,取值 0 或 1,

第二字节为频率值,取值为 0-------------65535

第三字节为占空比值 取值为 0-----------65535

 
 3
 
IOCTL_PWM_GET_FREQUENCY

获取当前 PWM 的输出频率
 定时器编号,取值 0 或 1,
 1
 
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

函数返回值: TRUE: 成功    FALSE: 失败

调用程序:    

// 设置 PWM0 定时器预分频值

BYTE prescale[2] = {0, 97};

::DeviceIoControl(hPWMFile, IOCTL_PWM_SET_PRESCALER, prescale, 2, NULL, 0, NULL, NULL);

// 设置 PWM0 定时器分频值

BYTE divider[2] = {0, 2};

       ret = ::DeviceIoControl(hPWMFile, IOCTL_PWM_SET_DIVIDER, divider, 2,

                                                 NULL, 0, NULL, NULL);

// 设置占空比和频率

       DWORD buff[3] = {0, FREQ_VALUE, m_slider_pos};

       ret = ::DeviceIoControl(hPWMFile, IOCTL_PWM_START, buff, 3,

                                                 NULL, 0, NULL, NULL);

       // 获取 PWM0 输出频率

       DWORD timer = 0, curfreq, actlen;

       ret = ::DeviceIoControl(hPWMFile, IOCTL_PWM_GET_FREQUENCY, &timer, 1,

                                                 &curfreq, 1, &actlen, NULL);

 

 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cfanlwn/archive/2009/12/06/4952937.aspx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值