📄 csl_gpio.h
字号:
/******************************************************************************\* Copyright (C) 2000-2001 Texas Instruments Incorporated.* All Rights Reserved*------------------------------------------------------------------------------* FILENAME...... csl_gpio.h* DATE CREATED.. 12/04/2000 * LAST MODIFIED. 05/09/2001\******************************************************************************/#ifndef _CSL_GPIO_H_#define _CSL_GPIO_H_#include <csl_stdinc.h>#include <csl_chip.h>#include <csl_irq.h>#include "csl_gpiohal.h"#if (GPIO_SUPPORT)/******************************************************************************\* scope and inline control macros\******************************************************************************/#ifdef __cplusplus#define CSLAPI extern "C" far #else#define CSLAPI extern far#endif#undef USEDEFS#undef IDECL#undef IDEF#ifdef _GPIO_MOD_ #define IDECL CSLAPI #define USEDEFS #define IDEF#else #ifdef _INLINE #define IDECL static inline #define USEDEFS #define IDEF static inline #else #define IDECL CSLAPI #endif#endif/******************************************************************************\* global macro declarations\******************************************************************************//* Macro define devices */#define GPIO_DEV0 0#if CHIP_DA610#define GPIO_DEV1 1#endif/* misc global settings */#define GPIO_INT_CNT 5#define GPIO_PIN_CNT 32#define GPIO_OPEN_RESET 1/* Pin id definitions */#define GPIO_PIN0 0x00000001u#define GPIO_PIN1 0x00000002u#define GPIO_PIN2 0x00000004u#define GPIO_PIN3 0x00000008u#define GPIO_PIN4 0x00000010u#define GPIO_PIN5 0x00000020u#define GPIO_PIN6 0x00000040u#define GPIO_PIN7 0x00000080u#define GPIO_PIN8 0x00000100u#define GPIO_PIN9 0x00000200u#define GPIO_PIN10 0x00000400u#define GPIO_PIN11 0x00000800u#define GPIO_PIN12 0x00001000u#define GPIO_PIN13 0x00002000u#define GPIO_PIN14 0x00004000u#define GPIO_PIN15 0x00008000u#define GPIO_PIN16 0x00010000u#define GPIO_PIN17 0x00020000u#define GPIO_PIN18 0x00040000u#define GPIO_PIN19 0x00080000u#define GPIO_PIN20 0x00100000u#define GPIO_PIN21 0x00200000u#define GPIO_PIN22 0x00400000u#define GPIO_PIN23 0x00800000u#define GPIO_PIN24 0x01000000u#define GPIO_PIN25 0x02000000u#define GPIO_PIN26 0x04000000u#define GPIO_PIN27 0x08000000u#define GPIO_PIN28 0x10000000u#define GPIO_PIN29 0x20000000u#define GPIO_PIN30 0x40000000u#define GPIO_PIN31 0x80000000u/* CPU Interrupt Pins for GPIO0 only */#define GPIO_GPINT0 0#define GPIO_GPINT4 1#define GPIO_GPINT5 2#define GPIO_GPINT6 3#define GPIO_GPINT7 4/* Interrupt Polarity */#define GPIO_RISING 0#define GPIO_FALLING 1/* Pin Direction */#define GPIO_INPUT 0#define GPIO_OUTPUT 1/* GPIO masks */#define GPIO_MASK_NA 0x00000000u#define GPIO_MASK_00 0x00000001u#define GPIO_MASK_01 0x00000002u#define GPIO_MASK_02 0x00000004u#define GPIO_MASK_03 0x00000008u#define GPIO_MASK_04 0x00000010u#define GPIO_MASK_05 0x00000020u#define GPIO_MASK_06 0x00000040u#define GPIO_MASK_07 0x00000080u#define GPIO_MASK_08 0x00000100u#define GPIO_MASK_09 0x00000200u#define GPIO_MASK_10 0x00000400u#define GPIO_MASK_11 0x00000800u#define GPIO_MASK_12 0x00001000u#define GPIO_MASK_13 0x00002000u#define GPIO_MASK_14 0x00004000u#define GPIO_MASK_15 0x00008000u/*****************************************************************************\* global typedef declarations\******************************************************************************/ typedef struct { Uint32 gpgc; Uint32 gpen; Uint32 gpdir; Uint32 gpval; Uint32 gphm; Uint32 gplm; Uint32 gppol; } GPIO_Config;/* device handle object */typedef struct { Uint32 allocated; volatile Uint32 *baseAddr; Uint32 pinAllocMask;} GPIO_Obj, *GPIO_Handle;/******************************************************************************\* global variable declarations\******************************************************************************///extern far Uint32 _GPIO_pinTable[GPIO_PIN_CNT];extern far Uint32 _GPIO_intTable[GPIO_INT_CNT];extern far GPIO_Handle _hGpioDev0;/******************************************************************************\* global function declarations\******************************************************************************//* private functions *//* API functions (Non-Inline function : Source file) */CSLAPI GPIO_Handle GPIO_open(int devnum, Uint32 flags);CSLAPI void GPIO_close(GPIO_Handle hGpio);CSLAPI void GPIO_reset(GPIO_Handle hGpio);CSLAPI void GPIO_clear(GPIO_Handle hGpio);/******************************************************************************\* inline function declarations\******************************************************************************//* configuration */IDECL void GPIO_config(GPIO_Handle hGpio, GPIO_Config *config);IDECL void GPIO_configArgs(GPIO_Handle hGpio,Uint32 gpgc,Uint32 gpen, Uint32 gpdir,Uint32 gpval, Uint32 gphm, Uint32 gplm, Uint32 gppol);IDECL void GPIO_getConfig(GPIO_Handle hGpio, GPIO_Config *config);IDECL void GPIO_pinDisable(GPIO_Handle hGpio, Uint32 pinId);IDECL void GPIO_pinEnable(GPIO_Handle hGpio,Uint32 pinId);IDECL Uint32 GPIO_pinDirection(GPIO_Handle hGpio, Uint32 pinId, Uint32 direction);IDECL Uint32 GPIO_pinRead(GPIO_Handle hGpio,Uint32 pinId);IDECL Uint32 GPIO_read(GPIO_Handle hGpio, Uint32 pinMask);/* For output Pins */IDECL void GPIO_pinWrite(GPIO_Handle hGpio,Uint32 pinId, Uint32 val);IDECL void GPIO_write(GPIO_Handle hGpio, Uint32 pinMask, Uint32 val);/* For input Pins */IDECL Uint32 GPIO_deltaHighGet(GPIO_Handle hGpio,Uint32 pinId);IDECL void GPIO_deltaHighClear(GPIO_Handle hGpio,Uint32 pinId);IDECL Uint32 GPIO_deltaLowGet(GPIO_Handle hGpio,Uint32 pinId);IDECL void GPIO_deltaLowClear(GPIO_Handle hGpio,Uint32 pinId);IDECL void GPIO_maskHighSet(GPIO_Handle hGpio,Uint32 pinId);IDECL void GPIO_maskHighClear(GPIO_Handle hGpio,Uint32 pinId);IDECL void GPIO_maskLowSet(GPIO_Handle hGpio,Uint32 pinId);IDECL void GPIO_maskLowClear(GPIO_Handle hGpio,Uint32 pinId);/* Pass Through Mode */IDECL Uint32 GPIO_intPolarity(GPIO_Handle hGpio,Uint32 signal, Uint32 polarity);/******************************************************************************\* inline function definitions\******************************************************************************/#ifdef USEDEFS/*----------------------------------------------------------------------------*/IDEF void GPIO_pinEnable(GPIO_Handle hGpio,Uint32 pinId) { volatile Uint32 gpen = GPIO_RGETH(hGpio,GPEN); gpen = gpen | (pinId & hGpio->pinAllocMask); GPIO_FSETH(hGpio,GPEN,GPXEN,gpen);}/*----------------------------------------------------------------------------*/IDEF void GPIO_pinDisable(GPIO_Handle hGpio,Uint32 pinId) { volatile Uint32 gpen = GPIO_RGETH(hGpio,GPEN); gpen = gpen & (~pinId & hGpio->pinAllocMask); GPIO_FSETH(hGpio,GPEN,GPXEN,gpen);}/*----------------------------------------------------------------------------*/IDEF Uint32 GPIO_pinDirection(GPIO_Handle hGpio,Uint32 pinId, Uint32 direction) { volatile Uint32 gpdir = GPIO_RGETH(hGpio,GPDIR); if ( direction == 0) { GPIO_RSETH(hGpio,GPDIR,(gpdir & (~pinId & hGpio->pinAllocMask))); } else { GPIO_RSETH(hGpio,GPDIR,(gpdir | (pinId & hGpio->pinAllocMask))); } return ( GPIO_RGETH(hGpio,GPDIR));}/*----------------------------------------------------------------------------*/IDEF Uint32 GPIO_pinRead(GPIO_Handle hGpio,Uint32 pinId) {volatile Uint32 x = 0xFFFFFFFF; if ( (GPIO_RGETH(hGpio,GPVAL) & (pinId & hGpio->pinAllocMask))!= 0 ) { x = 1; } else { x = 0; } return ( x );}/*----------------------------------------------------------------------------*/IDEF Uint32 GPIO_read(GPIO_Handle hGpio, Uint32 pinMask){ return ((GPIO_RGETH(hGpio,GPVAL) & pinMask) & hGpio->pinAllocMask);}/*----------------------------------------------------------------------------*/IDEF void GPIO_pinWrite(GPIO_Handle hGpio,Uint32 pinId, Uint32 val) { volatile Uint32 gpval = GPIO_RGETH(hGpio,GPVAL); if ( val == 0) { GPIO_RSETH(hGpio,GPVAL,(gpval & (~pinId & hGpio->pinAllocMask))); } else { GPIO_RSETH(hGpio,GPVAL,(gpval | (pinId & hGpio->pinAllocMask))); }}/*----------------------------------------------------------------------------*/IDEF void GPIO_write(GPIO_Handle hGpio, Uint32 pinMask, Uint32 val){ volatile Uint32 gpval = GPIO_RGETH(hGpio,GPVAL); GPIO_RSETH(hGpio,GPVAL, ((gpval & ~pinMask) | (pinMask & val)));}/*----------------------------------------------------------------------------*/IDEF Uint32 GPIO_deltaHighGet(GPIO_Handle hGpio,Uint32 pinId) { return (GPIO_FGETH(hGpio,GPDH,GPXDH)& (pinId & hGpio->pinAllocMask));}/*----------------------------------------------------------------------------*/IDEF void GPIO_deltaHighClear(GPIO_Handle hGpio,Uint32 pinId) { volatile Uint32 gpdh= GPIO_RGETH(hGpio,GPDH); GPIO_FSETH(hGpio,GPDH,GPXDH,(gpdh & (pinId & hGpio->pinAllocMask)));}/*----------------------------------------------------------------------------*/ IDEF Uint32 GPIO_deltaLowGet(GPIO_Handle hGpio,Uint32 pinId) { return (GPIO_FGETH(hGpio,GPDL,GPXDL)& (pinId & hGpio->pinAllocMask));}/*----------------------------------------------------------------------------*/ IDEF void GPIO_deltaLowClear(GPIO_Handle hGpio,Uint32 pinId) { volatile Uint32 gpdl= GPIO_RGETH(hGpio,GPDL); GPIO_FSETH(hGpio,GPDL,GPXDL,(gpdl & (pinId & hGpio->pinAllocMask)));}/*----------------------------------------------------------------------------*/IDEF void GPIO_maskHighSet(GPIO_Handle hGpio,Uint32 pinId) { volatile Uint32 gphm = GPIO_RGETH(hGpio,GPHM); GPIO_FSETH(hGpio,GPHM,GPXHM,(gphm | (pinId & hGpio->pinAllocMask)));}/*----------------------------------------------------------------------------*/IDEF void GPIO_maskHighClear(GPIO_Handle hGpio,Uint32 pinId) { volatile Uint32 gphm = GPIO_RGETH(hGpio,GPHM); GPIO_FSETH(hGpio,GPHM,GPXHM,(gphm & (~pinId & hGpio->pinAllocMask)));}/*----------------------------------------------------------------------------*/IDEF void GPIO_maskLowSet(GPIO_Handle hGpio,Uint32 pinId) { volatile Uint32 gplm = GPIO_RGETH(hGpio,GPLM); GPIO_FSETH(hGpio,GPLM,GPXLM,(gplm | (pinId & hGpio->pinAllocMask)));}/*----------------------------------------------------------------------------*/IDEF void GPIO_maskLowClear(GPIO_Handle hGpio,Uint32 pinId) { volatile Uint32 gplm = GPIO_RGETH(hGpio,GPLM); GPIO_FSETH(hGpio,GPLM,GPXLM,(gplm & (~pinId & hGpio->pinAllocMask)));}/*----------------------------------------------------------------------------*/IDEF Uint32 GPIO_intPolarity(GPIO_Handle hGpio,Uint32 signal, Uint32 polarity){ volatile Uint32 gppol = GPIO_RGETH(hGpio,GPPOL); if ( polarity == 0) { GPIO_FSETH(hGpio,GPPOL,GPINTXPOL,(gppol & ~_GPIO_intTable[signal])); } else { GPIO_FSETH(hGpio,GPPOL,GPINTXPOL,(gppol | _GPIO_intTable[signal])); } return ( GPIO_RGETH(hGpio,GPPOL));} /*----------------------------------------------------------------------------*/IDEF void GPIO_config(GPIO_Handle hGpio,GPIO_Config *config) { Uint32 gie; register int x0,x1,x2,x3,x4,x5,x6; volatile Uint32 *base = (volatile Uint32 *)(hGpio->baseAddr); gie = IRQ_globalDisable(); x0 = config->gpgc; x1 = config->gpen; x2 = config->gpdir; x3 = config->gpval; x4 = config->gphm; x5 = config->gplm; x6 = config->gppol; base[_GPIO_GPGC_OFFSET] = x0; base[_GPIO_GPEN_OFFSET] = x1; base[_GPIO_GPDIR_OFFSET]= x2; base[_GPIO_GPVAL_OFFSET]= x3; base[_GPIO_GPHM_OFFSET] = x4; base[_GPIO_GPLM_OFFSET] = x5; base[_GPIO_GPPOL_OFFSET]= x6; IRQ_globalRestore(gie);}/*----------------------------------------------------------------------------*/IDEF void GPIO_configArgs(GPIO_Handle hGpio, Uint32 gpgc,Uint32 gpen, Uint32 gpdir,Uint32 gpval, Uint32 gphm, Uint32 gplm, Uint32 gppol) { Uint32 gie; volatile Uint32 *base = (volatile Uint32 *)(hGpio->baseAddr); gie = IRQ_globalDisable(); base[_GPIO_GPGC_OFFSET] = gpgc; base[_GPIO_GPEN_OFFSET] = gpen; base[_GPIO_GPDIR_OFFSET]= gpdir; base[_GPIO_GPVAL_OFFSET]= gpval; base[_GPIO_GPHM_OFFSET] = gphm; base[_GPIO_GPLM_OFFSET] = gplm; base[_GPIO_GPPOL_OFFSET]= gppol ; IRQ_globalRestore(gie);}/*----------------------------------------------------------------------------*/IDEF void GPIO_getConfig(GPIO_Handle hGpio,GPIO_Config *config) { Uint32 gie; register int x0,x1,x2,x3,x4,x5,x6; volatile Uint32 *base = (volatile Uint32 *)(hGpio->baseAddr); gie = IRQ_globalDisable(); x0 = base[_GPIO_GPGC_OFFSET]; x1 = base[_GPIO_GPEN_OFFSET]; x2 = base[_GPIO_GPDIR_OFFSET]; x3 = base[_GPIO_GPVAL_OFFSET]; x4 = base[_GPIO_GPHM_OFFSET]; x5 = base[_GPIO_GPLM_OFFSET]; x6 = base[_GPIO_GPPOL_OFFSET]; config->gpgc = x0; config->gpen = x1; config->gpdir = x2; config->gpval = x3; config->gphm = x4; config->gplm = x5; config->gppol = x6; IRQ_globalRestore(gie);}/*---------------------------------------------------------------------------*/#endif /* USEDEFS */#endif /* GPIO_SUPPORT */#endif /* _CSL_GPIO_H_ *//******************************************************************************\* End of csl_gpio.h\******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -