工控主板EM9000数字IO的增强扩展

 2009-6-22          [nemail]    
[lablebox]

        在工业控制领域,数字IO以其简单、灵活的特性,得到了广泛的应用。为了进一步提高英创公司的嵌入式工控主板EM9000上32位数字IO的使用效率,在向下兼容的原则下,我们专门针对数字IO进行了一次增强升级。升级后的数字IO被简单的规划为三类,即8位数字输入DIN0–DIN7、8位数字输出DOUT0–DOUT7、以及16位通用数字GPIO0–GPIO15,相应地提供了一组新的API函数。对GPIO,新的API函数提供了按位操作的功能。

        为了保护客户在EM9000上已经进行的开发,整个数字IO的增强扩展都是在与过去功能和代码完全兼容的前提下进行的,即EM9000原有的数字IO功能及API函数仍然有效。新增的API函数主要是面向新开发而设置。为了方便新API函数的操作,我们在V4.0及以后版本的数据手册中,采用了新的数字IO信号名称,新名称与老名称的对应关系如下:

旧名称

新名称

CN2

新名称

旧名称

PIN#

PIN#

P1.0

DIN0

1

2

DIN1

P1.1

P1.2

DIN2

3

4

DIN3

P1.3

P1.4

DIN4

5

6

DIN5

P1.5

P1.6

DIN6

7

8

DIN7

P1.7

P2.0

DOUT0

9

10

DOUT1

P2.1

P2.2

DOUT2

11

12

DOUT3

P3.0

P3.1

DOUT4

13

14

RSTOUT#

RSTOUT#

P3.2

GPIO12

15

16

DOUT7

P3.3

P3.4

DOUT5

17

18

DOUT6

P3.5

P4.0

GPIO8

19

20

GPIO9

P4.1

P4.2

GPIO10

21

22

GPIO11

P4.3

P2.3

GPIO13

23

24

PWM_OUT

PWM_OUT

P2.4

GPIO14

25

26

GPIO15

P2.5

P5.0

GPIO0

27

28

GPIO1

P5.1

P5.2

GPIO2

29

30

GPIO3

P5.3

P5.4

GPIO4

31

32

GPIO5

P5.5

P5.6

GPIO6

33

34

GPIO7

P5.7

+5V

+5V

35

36

+5V

+5V

RSTIN#

RSTIN#

37

38

BATT3V

BATT3V

GND

GND

39

40

GND

GND

 

  针对新的数字IO所增加的新API函数原型定义如下:

///////////////////////////////////////////////////////////////////////////////////////
// 功能描述:对各个GPIO位执行输出使能操作,即设置为输出状态。
// 其中EnBit字中比特为1所对应的GPIO位设置为输出,为0则保持原来的
// 状态不变。
// 注意:对设置为输出的GPIO,仍然保留了输入的功能。
//
// 输入参数 EnBits: 16-bit字变量,其中为1的bit位,表示需要输出使能。
//
// EnBits各比特位与EM9000各位GPIO的对应关系如下:
// ---------------------------------------------------------------------------
//         输入参数   | 对应GPIO |   EM9000老定义
// ---------------------------------------------------------------------------
//        EnBits.D0 |   GPIO0   |   P5.0 / SA5
//        EnBits.D1 |   GPIO1   |   P5.1 / SA6
//        EnBits.D2 |   GPIO2   |   P5.2 / SA7
//        EnBits.D3 |   GPIO3   |   P5.3 / SA8
//        EnBits.D4 |   GPIO4   |   P5.4 / SA9
//        EnBits.D5 |   GPIO5   |   P5.5 / SA10
//        EnBits.D6 |   GPIO6   |   P5.6 / SA11
//        EnBits.D7 |   GPIO7   |   P5.7 / SA12
//        EnBits.D8 |   GPIO8   |   P4.0 / IRQ1
//        EnBits.D9 |   GPIO9   |   P4.1
//      EnBits.D10 |   GPIO10 |   P4.2
//      EnBits.D11 |   GPIO11 |   P4.3
//      EnBits.D12 |   GPIO12 |   P3.2 / CS0#
//      EnBits.D13 |   GPIO13 |   P2.3
//      EnBits.D14 | GPIO14   |   P2.4
//      EnBits.D15 |   GPIO15 |   P2.5
// -------------------------------------------------------------------------
//
// 返回值 = 0: 操作成功
// < 0: 操作失败
///////////////////////////////////////////////////////////////////////////////////////
int PIO_OutEnable( UINT16 EnBits );

///////////////////////////////////////////////////////////////////////////////////////
// 功能描述:对各个GPIO位执行输出禁止操作。其中DisBit字中为1的对应GPIO位输
// 出被禁止,
// 为0时则保持原来的输入输出特性。当输出被禁止后,该GPIO位只能作为
// 输入。
//
// 输入参数 DisBits: 16-bit字变量,其中为1的bit位,表示输出需禁止。
//
// DisBits各比特位与EM9000各位GPIO的对应关系如下:
// ---------------------------------------------------------------------------
// 输入参数 | 对应GPIO | EM9000老定义
// ---------------------------------------------------------------------------
// DisBits.D0 | GPIO0 | P5.0 / SA5
// DisBits.D1 | GPIO1 | P5.1 / SA6
// DisBits.D2 | GPIO2 | P5.2 / SA7
// DisBits.D3 | GPIO3 | P5.3 / SA8
// DisBits.D4 | GPIO4 | P5.4 / SA9
// DisBits.D5 | GPIO5 | P5.5 / SA10
// DisBits.D6 | GPIO6 | P5.6 / SA11
// DisBits.D7 | GPIO7 | P5.7 / SA12
// DisBits.D8 | GPIO8 | P4.0 / IRQ1
// DisBits.D9 | GPIO9 | P4.1
// DisBits.D10 | GPIO10 | P4.2
// DisBits.D11 | GPIO11 | P4.3
// DisBits.D12 | GPIO12 | P3.2 / CS0#
// DisBits.D13 | GPIO13 | P2.3
// DisBits.D14 | GPIO14 | P2.4
// DisBits.D15 | GPIO15 | P2.5
// -----------------------------------------------------------------------------
//
// 返回值 = 0: 操作成功
// < 0: 操作失败
///////////////////////////////////////////////////////////////////////////////////////
int PIO_OutDisable( UINT16 DisBits );

///////////////////////////////////////////////////////////////////////////////////////
// 功能描述:对输出使能的GPIO位,其中SetBits为1的GPIO对应位被置高电平, 为0
// 不变。
//
// 输入参数 SetBits: 16-bit字节变量,其中为1的bit位,表示需要置1的位。
//
// SetBits各比特位与EM9000各位GPIO的对应关系如下:
// -------------------------------------------------
// 输入参数 | 对应GPIO | EM9000老定义
// -------------------------------------------------
// SetBits.D0 | GPIO0 | P5.0 / SA5
// SetBits.D1 | GPIO1 | P5.1 / SA6
// SetBits.D2 | GPIO2 | P5.2 / SA7
// SetBits.D3 | GPIO3 | P5.3 / SA8
// SetBits.D4 | GPIO4 | P5.4 / SA9
// SetBits.D5 | GPIO5 | P5.5 / SA10
// SetBits.D6 | GPIO6 | P5.6 / SA11
// SetBits.D7 | GPIO7 | P5.7 / SA12
// SetBits.D8 | GPIO8 | P4.0 / IRQ1
// SetBits.D9 | GPIO9 | P4.1
// SetBits.D10 | GPIO10 | P4.2
// SetBits.D11 | GPIO11 | P4.3
// SetBits.D12 | GPIO12 | P3.2 / CS0#
// SetBits.D13 | GPIO13 | P2.3
// SetBits.D14 | GPIO14 | P2.4
// SetBits.D15 | GPIO15 | P2.5
// -------------------------------------------------
//
// 返回值 = 0: 操作成功
// < 0: 操作失败
///////////////////////////////////////////////////////////////////////////////////////
int PIO_OutSet( UINT16 SetBits );

///////////////////////////////////////////////////////////////////////////////////////
// 功能描述:对输出使能的GPIO位,其参数ClearBits字中比特位为1所对应的
// GPIO位被置为低电平, 为0不变。
//
// 输入参数 ClearBits: 16-bit字节变量,其中为1的bit位,表示需要置1的位。
//
// ClearBits各比特位与EM9000各位GPIO的对应关系如下:
// ----------------------------------------------------
// 输入参数 | 对应GPIO | EM9000老定义
// ----------------------------------------------------
// ClearBits.D0 | GPIO0 | P5.0 / SA5
// ClearBits.D1 | GPIO1 | P5.1 / SA6
// ClearBits.D2 | GPIO2 | P5.2 / SA7
// ClearBits.D3 | GPIO3 | P5.3 / SA8
// ClearBits.D4 | GPIO4 | P5.4 / SA9
// ClearBits.D5 | GPIO5 | P5.5 / SA10
// ClearBits.D6 | GPIO6 | P5.6 / SA11
// ClearBits.D7 | GPIO7 | P5.7 / SA12
// ClearBits.D8 | GPIO8 | P4.0 / IRQ1
// ClearBits.D9 | GPIO9 | P4.1
// ClearBits.D10 | GPIO10 | P4.2
// ClearBits.D11 | GPIO11 | P4.3
// ClearBits.D12 | GPIO12 | P3.2 / CS0#
// ClearBits.D13 | GPIO13 | P2.3
// ClearBits.D14 | GPIO14 | P2.4
// ClearBits.D15 | GPIO15 | P2.5
// ----------------------------------------------------
//
// 返回值 = 0: 操作成功
// < 0: 操作失败
///////////////////////////////////////////////////////////////////////////////////////
int PIO_OutClear( UINT16 ClearBits );

///////////////////////////////////////////////////////////////////////////////////////
// 功能描述:读取GPIO状态到*pInValue。
// 若pInValue为NULL,函数将直接退出,返回-1。
//
// 输出参数 pInValue: 指向16-bit字变量,函数操作后为读入的GPIO状态值。
// *pInValue各比特与GPIO各位的对应关系与其他PIO_XXX(...)函
// 数一致。
//
// 返回值 = 0: 操作成功
// < 0: 操作失败
///////////////////////////////////////////////////////////////////////////////////////
int PIO_State( UINT16* pInValue );

///////////////////////////////////////////////////////////////////////////////////////
// 功能描述:返回DIN的8bit状态。
//
// 返回8-bit数据与EM9000相应管脚对应关系
// ----------------------------------------
// 返回值 | EM9000老定义
// ----------------------------------------
// DIN.D0 | P1.0 / SD0
// DIN.D1 | P1.1 / SD1
// DIN.D2 | P1.2 / SD2
// DIN.D3 | P1.3 / SD3
// DIN.D4 | P1.4 / SD4
// DIN.D5 | P1.5 / SD5
// DIN.D6 | P1.6 / SD6
// DIN.D7 | P1.7 / SD7
// ----------------------------------------
//
///////////////////////////////////////////////////////////////////////////////////////
UCHAR DIN( );

///////////////////////////////////////////////////////////////////////////////////////
// 功能描述:设置DOUT的8bit状态。
//
// 输入参数 ucValue: 8-bit字节变量,对应DOUT各个输出位。
//
// ucValue各比特位与EM9000各位DOUT的对应关系如下:
// ----------------------------------------------------------------------------
//    输入参数    | 对应GPIO | EM9000老定义
// ----------------------------------------------------------------------------
// ucValue.D0 |   DOUT0   | P2.0 / SA0
// ucValue.D1 |   DOUT1   | P2.1 / SA1
// ucValue.D2 |   DOUT2   | P2.2 / SA2
// ucValue.D3 |   DOUT3   | P3.0 / SA3
// ucValue.D4 |   DOUT4   | P3.1 / SA4
// ucValue.D5 |   DOUT5   | P3.4 / WE#
// ucValue.D6 |   DOUT6   | P3.5 / RD#
// ucValue.D7 |   DOUT7   | P3.3 / CS1#
// ----------------------------------------------------------------------------
//
///////////////////////////////////////////////////////////////////////////////////////
void DOUT( UCHAR ucValue );

 

  新的API函数将包含在EM9000_ISA_API.LIB库中,为了使用这些新API函数,一种方法是客户从英创网站下载新的SDK,并重新安装;另一种方法是像英创技术支持部门索取新的EM9000_ISA_API.LIB文件,并拷贝到SDK的相关目录中。新的API函数均定义在头文件“EM9000_DIO_EX.H”中,应用程序在调用这些函数时,需包含这个头文件。

[lablebox]