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);
/-------------------------------------------------------------------------------------
作者:宇帆 cfanlwn
时间:2009-12-06 21:03:46