?? gpio.cpp
字號(hào):
#include <dos.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "GPIO.h"
/***************************************************************************
片上通用IO方向配制函數(shù): PIODirCfg
入口參數(shù): int PIO_BIT_INDEX cpu 上雙向IO索引號(hào)
char Dir =0,表示輸入,=1表示輸出,=2表示正常功能
返回值 : char =0,表示成功,非零表示失敗
****************************************************************************/
char PIODirCfg(int PIO_BIT_INDEX, char Dir )
{
unsigned int PIOBitMask=1; /*PIO_BIT_INDEX,對(duì)應(yīng)的掩碼*/
unsigned int PIOModeR; /*模式寄存器的IO地址*/
unsigned int PIODirR; /*方向寄存器的IO地址*/
if(PIO_BIT_INDEX>15)
{
PIO_BIT_INDEX-=16;
PIOBitMask<<=PIO_BIT_INDEX;
PIOModeR=OFFS_PIOMODE1+CTL_OFF;
PIODirR =OFFS_PIODIR1 +CTL_OFF;
}
else
{
PIOBitMask<<=PIO_BIT_INDEX;
PIOModeR=OFFS_PIOMODE0+CTL_OFF;
PIODirR =OFFS_PIODIR0 +CTL_OFF;
}
if(Dir==0) /*表示配制為輸入*/
{
outport( PIOModeR,inport (PIOModeR)& ~PIOBitMask);/*模式寄存器相應(yīng)的位清零*/
outport( PIODirR ,inport (PIODirR) | PIOBitMask);/*模式寄存器相應(yīng)的位置1*/
}
else if(Dir==1)
{
outport( PIOModeR,inport (PIOModeR)|PIOBitMask);/*模式寄存器相應(yīng)的位置1*/
outport( PIODirR ,inport (PIODirR) &~PIOBitMask);/*模式寄存器相應(yīng)的位清零*/
}
else if(Dir==2)
{
outport( PIOModeR,inport (PIOModeR)&~PIOBitMask);/*模式寄存器相應(yīng)的位清零*/
outport( PIODirR ,inport (PIODirR) &~PIOBitMask);/*模式寄存器相應(yīng)的位清零*/
}
return 0;
}
/***************************************************************************
片上通用IO寫函數(shù): PIOWrite
入口參數(shù): int PIO_BIT_INDEX cpu 上雙向IO索引號(hào)
char Val =0,表示輸出低電平,非零表示輸出高電平
返回值 : char =0,表示成功,非零表示失敗,方向設(shè)置有錯(cuò)
注意: 函數(shù)功能,只有在相應(yīng)的位方向設(shè)置為輸出時(shí),才是有效的
****************************************************************************/
char PIOWrite(int PIO_BIT_INDEX, char Val )
{
unsigned int PIOBitMask=1; /*PIO_BIT_INDEX,對(duì)應(yīng)的掩碼*/
unsigned int PIOModeR; /*模式寄存器的IO地址*/
unsigned int PIODirR; /*方向寄存器的IO地址*/
unsigned int PIODataR; /*數(shù)據(jù)口寄存器*/
if(PIO_BIT_INDEX>15)
{
PIO_BIT_INDEX-=16;
PIOBitMask<<=PIO_BIT_INDEX;
PIOModeR=OFFS_PIOMODE1+CTL_OFF;
PIODirR =OFFS_PIODIR1 +CTL_OFF;
PIODataR=OFFS_PIODATA1+CTL_OFF;
}
else
{
PIOBitMask<<=PIO_BIT_INDEX;
PIOModeR=OFFS_PIOMODE0+CTL_OFF;
PIODirR =OFFS_PIODIR0 +CTL_OFF;
PIODataR=OFFS_PIODATA0+CTL_OFF;
}
if((inport (PIOModeR)&PIOBitMask)==0) /*檢查有效性*/
{
return 1; /*表示方向不對(duì)*/
}
if((inport (PIODirR)&PIOBitMask)!=0) /*檢查有效性*/
{
return 1; /*表示方向不對(duì)*/
}
if(Val==0)
outport( PIODataR,inport (PIODataR)& ~PIOBitMask);/*模式寄存器相應(yīng)的位清零*/
else
outport( PIODataR,inport (PIODataR)|PIOBitMask);/*模式寄存器相應(yīng)的位置1*/
return 0;
}
/***************************************************************************
片上通用IO讀函數(shù): PIORead
入口參數(shù): int PIO_BIT_INDEX cpu 上雙向IO索引號(hào)
char Val
返回值 : char =0,表示輸入為低電平,=1表示輸入高電平,=3,表示失敗,方向設(shè)置有錯(cuò)
注意: 函數(shù)功能,只有在相應(yīng)的位方向設(shè)置為輸入時(shí),才是有效的
****************************************************************************/
char PIORead(int PIO_BIT_INDEX )
{
unsigned int PIOBitMask=1; /*PIO_BIT_INDEX,對(duì)應(yīng)的掩碼*/
unsigned int PIOModeR; /*模式寄存器的IO地址*/
unsigned int PIODirR; /*方向寄存器的IO地址*/
unsigned int PIODataR; /*數(shù)據(jù)口寄存器*/
char val; /*讀的值*/
if(PIO_BIT_INDEX>15)
{
PIO_BIT_INDEX-=16;
PIOBitMask<<=PIO_BIT_INDEX;
PIOModeR=OFFS_PIOMODE1+CTL_OFF;
PIODirR =OFFS_PIODIR1 +CTL_OFF;
PIODataR=OFFS_PIODATA1+CTL_OFF;
}
else
{
PIOBitMask<<=PIO_BIT_INDEX;
PIOModeR=OFFS_PIOMODE0+CTL_OFF;
PIODirR =OFFS_PIODIR0 +CTL_OFF;
PIODataR=OFFS_PIODATA0+CTL_OFF;
}
if((inport (PIOModeR)&PIOBitMask)!=0) /*檢查有效性*/
{
return 3; /*表示方向不對(duì)*/
}
if((inport (PIODirR)&PIOBitMask)==0) /*檢查有效性*/
{
return 3; /*表示方向不對(duì)*/
}
if(inport (PIODataR)& PIOBitMask)
val=1; /*輸入高電平*/
else
val=0; /*輸入低電平*/
return val;
}
/***************************************************************************
擴(kuò)展板上單向IO讀函數(shù): EXTGPIORead
擴(kuò)展IO輸入,對(duì)應(yīng)信號(hào)線GP17,GP16,GP15,GP14,GP13,GP12,GP11,GP10
入口參數(shù):
返回值 : char 相應(yīng)數(shù)據(jù)位等于0,表示輸入為低電平,=1表示輸入高電平
****************************************************************************/
unsigned char EXTGP1Read(void)
{
return inportb (GPIO1_PORT);
}
/***************************************************************************
擴(kuò)展板上單向IO讀函數(shù): EXTGP2WRITE
擴(kuò)展IO輸出,對(duì)應(yīng)信號(hào)線GP25,GP24,GP23,GP22,GP21,GP20的數(shù)據(jù)位BIT5.....BIT0
入口參數(shù):
返回值 : VOID
****************************************************************************/
void EXTGP2WRITE(unsigned char Val)
{
outportb(GPIO2_PORT, (inportb (GPIO2_PORT)&0xC0)|Val);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -