2440 WinCE操作GPIO

來源:互聯網
上載者:User

Windows CE系統將GPIO的真實位址(例如2440的GPIO的基地址為0x56000000)映射到虛擬位址空間(GPIO對應為0xB1600000),這 樣,通過對這段虛擬位址空間的操作,就能夠完成對GPIO或者其他片內資源的控制、輸入輸出工作。要操作一個平台的GPIO,在其對應BSP中按照基地址,找到虛擬位址,並且找到方便操作這個地址的資料結構就可以了,關鍵函數就是 VirtualAlloc和VirtualCopy。下面以操作Samsung S3C2440的GPIO為例,講述這個步驟:
1.首先在BSP中的s2440.h檔案,找到虛擬位址映射以及操作GPIO的寄存器結構體(這個在自己製作一些特殊裝置的BSP時,會依據需要而發生更改)


#define IOP_BASE      0xB1600000 // 0x56000000typedef struct  {unsigned int  rGPACON;// 00unsigned int  rGPADAT;unsigned int  rPAD1[2];unsigned int  rGPBCON;// 10unsigned int  rGPBDAT;unsigned int  rGPBUP;unsigned int  rPAD2;unsigned int  rGPCCON;// 20unsigned int  rGPCDAT;unsigned int  rGPCUP;unsigned int  rPAD3;unsigned int  rGPDCON;// 30unsigned int  rGPDDAT;unsigned int  rGPDUP; unsigned int  rPAD4;unsigned int  rGPECON;// 40unsigned int  rGPEDAT;unsigned int  rGPEUP;unsigned int  rPAD5;unsigned int  rGPFCON;// 50unsigned int  rGPFDAT;unsigned int  rGPFUP; unsigned int  rPAD6;unsigned int  rGPGCON;// 60unsigned int  rGPGDAT;unsigned int  rGPGUP; unsigned int  rPAD7;unsigned int  rGPHCON;// 70unsigned int  rGPHDAT;unsigned int  rGPHUP; unsigned int  rPAD8;unsigned int  rMISCCR;// 80unsigned int  rDCKCON;unsigned int  rEXTINT0;unsigned int  rEXTINT1;unsigned int  rEXTINT2;// 90unsigned int  rEINTFLT0;unsigned int  rEINTFLT1;unsigned int  rEINTFLT2;unsigned int  rEINTFLT3;// A0unsigned int  rEINTMASK;unsigned int  rEINTPEND;unsigned int  rGSTATUS0;// ACunsigned int  rGSTATUS1;// B0unsigned int  rGSTATUS2;// B4 ;;; SHLunsigned int  rGSTATUS3;// B8unsigned int  rGSTATUS4;// BCunsigned int  rFLTOUT;// C0unsigned int  rDSC0;unsigned int  rDSC1;unsigned int  rMSLCON;unsigned int  rGPJCON;// D0unsigned int  rGPJDAT;unsigned int  rGPJUP;unsigned int  rPAD9;}IOPreg;  

二、因為我用的mini2440開發板的GPB0接在蜂鳴器上,所以我以操作GPB0為例編寫代碼。這樣給GPB0一個高電平,那麼蜂鳴器就會響,反之蜂鳴器就會停止發聲

#ifdef __cplusplusextern "C"{#endifBOOL VirtualCopy( PVOID, PVOID, DWORD, DWORD );#ifdef __cplusplus}#endifvoid GPIO()        //通過GPIO控制蜂鳴器{volatile IOPreg *v_pIORegs;v_pIORegs = (volatile IOPreg *)VirtualAlloc(0, sizeof(IOPreg), MEM_RESERVE, PAGE_NOACCESS);if(v_pIORegs){if(VirtualCopy((PVOID)v_pIORegs, (PVOID)IOP_BASE, sizeof(IOPreg), PAGE_READWRITE | PAGE_NOCACHE)){v_pIORegs->rGPBCON = 1;                    //將GPB0設定為OUTPUTv_pIORegs->rGPBDAT = 0x3ff;               //設定為高電平,蜂鳴器發聲Sleep(3000);v_pIORegs->rGPBDAT = 0;                     //恢複為低電平,蜂鳴器停止發聲}VirtualFree((LPVOID)v_pIORegs, 0, MEM_RELEASE);v_pIORegs = NULL;}}

@written by .cpp

百度空間:http://hi.baidu.com/anglecloudy

部落格園:http://www.cnblogs.com/dotcpp

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.