天嵌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控制進行詳細說明。