`
huobengle
  • 浏览: 858715 次
文章分类
社区版块
存档分类
最新评论

用C#控制TQ2440开发板上的LED小灯(C# GPIO学习笔记)

 
阅读更多

天嵌2440开发板上有4个LED小灯,随机带的测试软件使用的C++开发的,但笔者比较喜欢C#语言,所以通过对TQ2440的BSP包分析,4个LED小灯,是通过GPIO口进行控制。因此,只要用C#对GPIO口进行控制,就能让LED发光。

关键代码如下:

首先要声明2个WindowCE API 函数调用

第1个 API声明,这个API声明是从C#串口通信的代码中找到,没想到还能用于GPIO口控制。(以后有时间在慢慢学习了,先把代码贴出来供大家参考)

[DllImport( "coredll.dll" )]
private static extern IntPtr CreateFile(
string lpFileName,
uint dwDesiredAccess,
int dwShareMode,
int lpSecurityAttributes,

int dwCreationDisposition,
int dwFlagsAndAttributes,
int hTemplateFile
);

第2个:设备IO控制,在Windows XP/2000下倒是常用,WinCE下也提供。

[DllImport("coredll.dll", EntryPoint = "DeviceIoControl", SetLastError = true)]
internal static extern int DeviceIoControl(
IntPtr hDevice,
int dwIoControlCode,
byte[] lpInBuffer,
int nInBufferSize,
byte[] lpOutBuffer,
int nOutBufferSize,
ref int lpBytesReturned,
IntPtr lpOverlapped);

注意:以上API如果要用在Win2000/XP...等环境下,声明要用 KERNEL32.DLL

API声明完了,现在来说说控制LED小灯的GPIO口:

在天嵌的 L:/TQ2440/TQ2440配套光盘_0829/TQ2440_CD/WinCE资源/WinCE源码/BSP包/TQ2440/Src/Drivers/GPIOdriver

下面可以找到GPIO驱动代码。从代码中可以找到

#define IO_CTL_GPIO_1_ON 0x01
#define IO_CTL_GPIO_2_ON 0x02
#define IO_CTL_GPIO_3_ON 0x03
#define IO_CTL_GPIO_4_ON 0x04
#define IO_CTL_GPIO_ALL_ON 0x05
#define IO_CTL_GPIO_1_OFF 0x06
#define IO_CTL_GPIO_2_OFF 0x07
#define IO_CTL_GPIO_3_OFF 0x08
#define IO_CTL_GPIO_4_OFF 0x09
#define IO_CTL_GPIO_ALL_OFF 0x0a

这些宏定义,和开发板本身带的VC++实例中的定义是一致的。

开发板带的VC++示例程序在:L:/TQ2440/TQ2440配套光盘_0829/TQ2440_CD/WinCE资源/WinCE源码/应用程序/GPIO_Test

不难看出:ON 就是LED 发光,OFF就是LED熄灭。

因此,在C#中,可以用如下的代码控制LED发光

IntPtr gpiodriver = CreateFile("GIO1:", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
if (gpiodriver == (IntPtr)(-1))
{
MessageBox.Show("打开GPIO设备失败!");
}
else
{

int bytesReturned = 0;
DeviceIoControl(gpiodriver, 0x02, null, 0, null, 0, ref bytesReturned, IntPtr.Zero);
}

注:0x02就是让LED发光,如果需要让LED2熄灭,则

DeviceIoControl(gpiodriver, 0x07, null, 0, null, 0, ref bytesReturned, IntPtr.Zero);

如果要全部熄灭则:

DeviceIoControl(gpiodriver, 0x0a, null, 0, null, 0, ref bytesReturned, IntPtr.Zero);

有兴趣的朋友可以把上面的代码包装起来,就可以用去做更多的控制实验。关于上面代码的详细解说,今后再续。。。

今天先写到此为止,过几天就要考试了,得复习了。。。。待考完试后,在细细的对C#在GPIO控制进行详细说明。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics