用C#控制TQ2440開發板上的LED小燈(C# GPIO學習筆記)

來源:互聯網
上載者:User

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

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.