em_ebi.h

Go to the documentation of this file.
00001 /***************************************************************************/
00034 #ifndef __EM_EBI_H
00035 #define __EM_EBI_H
00036 
00037 #include "em_device.h"
00038 
00039 #if defined(EBI_COUNT) && (EBI_COUNT > 0)
00040 #include "em_assert.h"
00041 
00042 #include <stdint.h>
00043 #include <stdbool.h>
00044 
00045 #ifdef __cplusplus
00046 extern "C" {
00047 #endif
00048 
00049 /***************************************************************************/
00054 /***************************************************************************/
00059 /***************************************************************************/
00073 /*******************************************************************************
00074  *******************************   DEFINES   ***********************************
00075  ******************************************************************************/
00076 
00077 #define EBI_BANK0    (uint32_t)(1 << 1) 
00078 #define EBI_BANK1    (uint32_t)(1 << 2) 
00079 #define EBI_BANK2    (uint32_t)(1 << 3) 
00080 #define EBI_BANK3    (uint32_t)(1 << 4) 
00082 #define EBI_CS0      (uint32_t)(1 << 1) 
00083 #define EBI_CS1      (uint32_t)(1 << 2) 
00084 #define EBI_CS2      (uint32_t)(1 << 3) 
00085 #define EBI_CS3      (uint32_t)(1 << 4) 
00087 /*******************************************************************************
00088  ********************************   ENUMS   ************************************
00089  ******************************************************************************/
00090 
00092 typedef enum
00093 {
00095   ebiModeD8A8      = EBI_CTRL_MODE_D8A8,
00097   ebiModeD16A16ALE = EBI_CTRL_MODE_D16A16ALE,
00099   ebiModeD8A24ALE  = EBI_CTRL_MODE_D8A24ALE,
00100 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
00101 
00102   ebiModeD16       = EBI_CTRL_MODE_D16,
00103 #endif
00104 } EBI_Mode_TypeDef;
00105 
00107 typedef enum
00108 {
00110   ebiActiveLow  = 0,
00112   ebiActiveHigh = 1
00113 } EBI_Polarity_TypeDef;
00114 
00116 typedef enum
00117 {
00119   ebiLineARDY,
00121   ebiLineALE,
00123   ebiLineWE,
00125   ebiLineRE,
00127   ebiLineCS,
00128 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
00129 
00130   ebiLineBL,
00131 #endif
00132 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
00133 
00134   ebiLineTFTVSync,
00136   ebiLineTFTHSync,
00138   ebiLineTFTDataEn,
00140   ebiLineTFTDClk,
00142   ebiLineTFTCS,
00143 #endif
00144 } EBI_Line_TypeDef;
00145 
00146 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
00147 
00148 typedef enum
00149 {
00151   ebiALowA0 = EBI_ROUTE_ALB_A0,
00153   ebiALowA8 = EBI_ROUTE_ALB_A8,
00155   ebiALowA16 = EBI_ROUTE_ALB_A16,
00157   ebiALowA24 = EBI_ROUTE_ALB_A24,
00158 } EBI_ALow_TypeDef;
00159 
00161 typedef enum
00162 {
00164   ebiAHighA0 = EBI_ROUTE_APEN_A0,
00166   ebiAHighA5 = EBI_ROUTE_APEN_A5,
00168   ebiAHighA6 = EBI_ROUTE_APEN_A6,
00170   ebiAHighA7 = EBI_ROUTE_APEN_A7,
00172   ebiAHighA8 = EBI_ROUTE_APEN_A8,
00174   ebiAHighA9 = EBI_ROUTE_APEN_A9,
00176   ebiAHighA10 = EBI_ROUTE_APEN_A10,
00178   ebiAHighA11 = EBI_ROUTE_APEN_A11,
00180   ebiAHighA12 = EBI_ROUTE_APEN_A12,
00182   ebiAHighA13 = EBI_ROUTE_APEN_A13,
00184   ebiAHighA14 = EBI_ROUTE_APEN_A14,
00186   ebiAHighA15 = EBI_ROUTE_APEN_A15,
00188   ebiAHighA16 = EBI_ROUTE_APEN_A16,
00190   ebiAHighA17 = EBI_ROUTE_APEN_A17,
00192   ebiAHighA18 = EBI_ROUTE_APEN_A18,
00194   ebiAHighA19 = EBI_ROUTE_APEN_A19,
00196   ebiAHighA20 = EBI_ROUTE_APEN_A20,
00198   ebiAHighA21 = EBI_ROUTE_APEN_A21,
00200   ebiAHighA22 = EBI_ROUTE_APEN_A22,
00202   ebiAHighA23 = EBI_ROUTE_APEN_A23,
00204   ebiAHighA24 = EBI_ROUTE_APEN_A24,
00206   ebiAHighA25 = EBI_ROUTE_APEN_A25,
00208   ebiAHighA26 = EBI_ROUTE_APEN_A26,
00210   ebiAHighA27 = EBI_ROUTE_APEN_A27,
00212   ebiAHighA28 = EBI_ROUTE_APEN_A28,
00213 } EBI_AHigh_TypeDef;
00214 
00216 typedef enum {
00218   ebiLocation0 = EBI_ROUTE_LOCATION_LOC0,
00220   ebiLocation1 = EBI_ROUTE_LOCATION_LOC1,
00222   ebiLocation2 = EBI_ROUTE_LOCATION_LOC2
00223 } EBI_Location_TypeDef;
00224 #endif
00225 
00226 /* TFT support */
00227 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
00228 
00229 typedef enum
00230 {
00232   ebiTFTBank0 = EBI_TFTCTRL_BANKSEL_BANK0,
00234   ebiTFTBank1 = EBI_TFTCTRL_BANKSEL_BANK1,
00236   ebiTFTBank2 = EBI_TFTCTRL_BANKSEL_BANK2,
00238   ebiTFTBank3 = EBI_TFTCTRL_BANKSEL_BANK3
00239 } EBI_TFTBank_TypeDef;
00240 
00242 typedef enum
00243 {
00245   ebiTFTColorSrcMem    = EBI_TFTCTRL_COLOR1SRC_MEM,
00247   ebiTFTColorSrcPixel1 = EBI_TFTCTRL_COLOR1SRC_PIXEL1,
00248 } EBI_TFTColorSrc_TypeDef;
00249 
00251 typedef enum
00252 {
00254   ebiTFTInterleaveUnlimited  = EBI_TFTCTRL_INTERLEAVE_UNLIMITED,
00256   ebiTFTInterleaveOnePerDClk = EBI_TFTCTRL_INTERLEAVE_ONEPERDCLK,
00258   ebiTFTInterleavePorch      = EBI_TFTCTRL_INTERLEAVE_PORCH,
00259 } EBI_TFTInterleave_TypeDef;
00260 
00262 typedef enum
00263 {
00265   ebiTFTFrameBufTriggerVSync = EBI_TFTCTRL_FBCTRIG_VSYNC,
00267   ebiTFTFrameBufTriggerHSync = EBI_TFTCTRL_FBCTRIG_HSYNC,
00268 } EBI_TFTFrameBufTrigger_TypeDef;
00269 
00271 typedef enum
00272 {
00274   ebiTFTMBDisabled   = EBI_TFTCTRL_MASKBLEND_DISABLED,
00276   ebiTFTMBIMask      = EBI_TFTCTRL_MASKBLEND_IMASK,
00278   ebiTFTMBIAlpha     = EBI_TFTCTRL_MASKBLEND_IALPHA,
00280   ebiTFTMBIMaskAlpha = EBI_TFTCTRL_MASKBLEND_IMASKIALPHA,
00282   ebiTFTMBEMask      = EBI_TFTCTRL_MASKBLEND_EMASK,
00284   ebiTFTMBEAlpha     = EBI_TFTCTRL_MASKBLEND_EALPHA,
00286   ebiTFTMBEMaskAlpha = EBI_TFTCTRL_MASKBLEND_EMASKEALPHA,
00287 } EBI_TFTMaskBlend_TypeDef;
00288 
00290 typedef enum
00291 {
00293   ebiTFTDDModeDisabled = EBI_TFTCTRL_DD_DISABLED,
00295   ebiTFTDDModeInternal = EBI_TFTCTRL_DD_INTERNAL,
00297   ebiTFTDDModeExternal = EBI_TFTCTRL_DD_EXTERNAL,
00298 } EBI_TFTDDMode_TypeDef;
00299 
00301 typedef enum
00302 {
00304   ebiTFTWidthByte = EBI_TFTCTRL_WIDTH_BYTE,
00306   ebiTFTWidthHalfWord = EBI_TFTCTRL_WIDTH_HALFWORD,
00307 } EBI_TFTWidth_TypeDef;
00308 
00309 #endif
00310 
00311 /*******************************************************************************
00312  *******************************   STRUCTS   ***********************************
00313  ******************************************************************************/
00314 
00316 typedef struct
00317 {
00319   EBI_Mode_TypeDef     mode;
00321   EBI_Polarity_TypeDef ardyPolarity;
00323   EBI_Polarity_TypeDef alePolarity;
00325   EBI_Polarity_TypeDef wePolarity;
00327   EBI_Polarity_TypeDef rePolarity;
00329   EBI_Polarity_TypeDef csPolarity;
00330 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
00331 
00332   EBI_Polarity_TypeDef blPolarity;
00334   bool                 blEnable;
00336   bool                 noIdle;
00337 #endif
00338 
00339   bool                 ardyEnable;
00341   bool                 ardyDisableTimeout;
00343   uint32_t             banks;
00345   uint32_t             csLines;
00347   int                  addrSetupCycles;
00349   int                  addrHoldCycles;
00350 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
00351 
00352   bool                 addrHalfALE;
00353 #endif
00354 
00355   int                  readSetupCycles;
00357   int                  readStrobeCycles;
00359   int                  readHoldCycles;
00360 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
00361 
00362   bool                 readPageMode;
00364   bool                 readPrefetch;
00366   bool                 readHalfRE;
00367 #endif
00368 
00369   int                  writeSetupCycles;
00371   int                  writeStrobeCycles;
00373   int                  writeHoldCycles;
00374 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
00375 
00376   bool                 writeBufferDisable;
00378   bool                 writeHalfWE;
00380   EBI_ALow_TypeDef     aLow;
00382   EBI_AHigh_TypeDef    aHigh;
00384   EBI_Location_TypeDef location;
00385 #endif
00386 
00387   bool                 enable;
00388 } EBI_Init_TypeDef;
00389 
00391 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
00392 #define EBI_INIT_DEFAULT                                 \
00393   {   ebiModeD8A8,      /* 8 bit address, 8 bit data */  \
00394       ebiActiveLow,     /* ARDY polarity */              \
00395       ebiActiveLow,     /* ALE polarity */               \
00396       ebiActiveLow,     /* WE polarity */                \
00397       ebiActiveLow,     /* RE polarity */                \
00398       ebiActiveLow,     /* CS polarity */                \
00399       ebiActiveLow,     /* BL polarity */                \
00400       false,            /* enable BL */                  \
00401       false,            /* enable NOIDLE */              \
00402       false,            /* enable ARDY */                \
00403       false,            /* don't disable ARDY timeout */ \
00404       EBI_BANK0,        /* enable bank 0 */              \
00405       EBI_CS0,          /* enable chip select 0 */       \
00406       0,                /* addr setup cycles */          \
00407       1,                /* addr hold cycles */           \
00408       false,            /* do not enable half cycle ALE strobe */ \
00409       0,                /* read setup cycles */          \
00410       0,                /* read strobe cycles */         \
00411       0,                /* read hold cycles */           \
00412       false,            /* disable page mode */          \
00413       false,            /* disable prefetch */           \
00414       false,            /* do not enable half cycle REn strobe */ \
00415       0,                /* write setup cycles */         \
00416       0,                /* write strobe cycles */        \
00417       1,                /* write hold cycles */          \
00418       false,            /* do not disable the write buffer */ \
00419       false,            /* do not enable halc cycle WEn strobe */ \
00420       ebiALowA0,        /* ALB - Low bound, address lines */ \
00421       ebiAHighA0,       /* APEN - High bound, address lines */   \
00422       ebiLocation0,     /* Use Location 0 */             \
00423       true,             /* enable EBI */                 \
00424   }
00425 #else
00426 #define EBI_INIT_DEFAULT                                 \
00427   { ebiModeD8A8,        /* 8 bit address, 8 bit data */  \
00428     ebiActiveLow,       /* ARDY polarity */              \
00429     ebiActiveLow,       /* ALE polarity */               \
00430     ebiActiveLow,       /* WE polarity */                \
00431     ebiActiveLow,       /* RE polarity */                \
00432     ebiActiveLow,       /* CS polarity */                \
00433     false,              /* enable ARDY */                \
00434     false,              /* don't disable ARDY timeout */ \
00435     EBI_BANK0,          /* enable bank 0 */              \
00436     EBI_CS0,            /* enable chip select 0 */       \
00437     0,                  /* addr setup cycles */          \
00438     1,                  /* addr hold cycles */           \
00439     0,                  /* read setup cycles */          \
00440     0,                  /* read strobe cycles */         \
00441     0,                  /* read hold cycles */           \
00442     0,                  /* write setup cycles */         \
00443     0,                  /* write strobe cycles */        \
00444     1,                  /* write hold cycles */          \
00445     true,               /* enable EBI */                 \
00446   }
00447 #endif
00448 
00449 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
00450 
00452 typedef struct
00453 {
00455   EBI_TFTBank_TypeDef            bank;
00457   EBI_TFTWidth_TypeDef           width;
00459   EBI_TFTColorSrc_TypeDef        colSrc;
00461   EBI_TFTInterleave_TypeDef      interleave;
00463   EBI_TFTFrameBufTrigger_TypeDef fbTrigger;
00465   bool                           shiftDClk;
00467   EBI_TFTMaskBlend_TypeDef       maskBlend;
00469   EBI_TFTDDMode_TypeDef          driveMode;
00471   EBI_Polarity_TypeDef           csPolarity;
00473   EBI_Polarity_TypeDef           dclkPolarity;
00475   EBI_Polarity_TypeDef           dataenPolarity;
00477   EBI_Polarity_TypeDef           hsyncPolarity;
00479   EBI_Polarity_TypeDef           vsyncPolarity;
00481   int                            hsize;
00483   int                            hPorchFront;
00485   int                            hPorchBack;
00487   int                            hPulseWidth;
00489   int                            vsize;
00491   int                            vPorchFront;
00493   int                            vPorchBack;
00495   int                            vPulseWidth;
00497   uint32_t                       addressOffset;
00499   int                            dclkPeriod;
00501   int                            startPosition;
00503   int                            setupCycles;
00505   int                            holdCycles;
00506 } EBI_TFTInit_TypeDef;
00507 
00509 #define EBI_TFTINIT_DEFAULT                                                           \
00510   { ebiTFTBank0,                /* Select EBI Bank 0 */                               \
00511     ebiTFTWidthHalfWord,        /* Select 2-byte increments */                        \
00512     ebiTFTColorSrcMem,          /* Use memory as source for mask/blending */          \
00513     ebiTFTInterleaveUnlimited,  /* Unlimited interleaved accesses */                  \
00514     ebiTFTFrameBufTriggerVSync, /* VSYNC as frame buffer update trigger */            \
00515     false,                      /* Drive DCLK from negative edge of internal clock */ \
00516     ebiTFTMBDisabled,           /* No masking and alpha blending enabled */           \
00517     ebiTFTDDModeExternal,       /* Drive from external memory */                      \
00518     ebiActiveLow,               /* CS Active Low polarity */                          \
00519     ebiActiveLow,               /* DCLK Active Low polarity */                        \
00520     ebiActiveLow,               /* DATAEN Active Low polarity */                      \
00521     ebiActiveLow,               /* HSYNC Active Low polarity */                       \
00522     ebiActiveLow,               /* VSYNC Active Low polarity */                       \
00523     320,                        /* Horizontal size in pixels */                       \
00524     1,                          /* Horizontal Front Porch */                          \
00525     29,                         /* Horizontal Back Porch */                           \
00526     2,                          /* Horizontal Synchronization Pulse Width */          \
00527     240,                        /* Vertical size in pixels */                         \
00528     1,                          /* Vertical Front Porch */                            \
00529     4,                          /* Vertical Back Porch */                             \
00530     2,                          /* Vertical Synchronization Pulse Width */            \
00531     0x0000,                     /* Address offset to EBI memory base */               \
00532     5,                          /* DCLK Period */                                     \
00533     2,                          /* DCLK Start */                                      \
00534     1,                          /* DCLK Setup cycles */                               \
00535     1,                          /* DCLK Hold cycles */                                \
00536   }
00537 
00538 #endif
00539 /*******************************************************************************
00540  *****************************   PROTOTYPES   **********************************
00541  ******************************************************************************/
00542 
00543 void EBI_Init(const EBI_Init_TypeDef *ebiInit);
00544 void EBI_Disable(void);
00545 uint32_t EBI_BankAddress(uint32_t bank);
00546 void EBI_BankEnable(uint32_t banks, bool enable);
00547 
00548 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
00549 void EBI_TFTInit(const EBI_TFTInit_TypeDef *ebiTFTInit);
00550 void EBI_TFTSizeSet(uint32_t horizontal, uint32_t vertical);
00551 void EBI_TFTHPorchSet(int front, int back, int pulseWidth);
00552 void EBI_TFTVPorchSet(int front, int back, int pulseWidth);
00553 void EBI_TFTTimingSet(int dclkPeriod, int start, int setup, int hold);
00554 #endif
00555 
00556 #if defined(_EFM32_GIANT_FAMILY) || defined(_EFM32_WONDER_FAMILY)
00557 /* This functionality is only available on devices with independent timing support */
00558 void EBI_BankReadTimingSet(uint32_t bank, int setupCycles, int strobeCycles, int holdCycles);
00559 void EBI_BankReadTimingConfig(uint32_t bank, bool pageMode, bool prefetch, bool halfRE);
00560 
00561 void EBI_BankWriteTimingSet(uint32_t bank, int setupCycles, int strobeCycles, int holdCycles);
00562 void EBI_BankWriteTimingConfig(uint32_t bank, bool writeBufDisable, bool halfWE);
00563 
00564 void EBI_BankAddressTimingSet(uint32_t bank, int setupCycles, int holdCycles);
00565 void EBI_BankAddressTimingConfig(uint32_t bank, bool halfALE);
00566 
00567 void EBI_BankPolaritySet(uint32_t bank, EBI_Line_TypeDef line, EBI_Polarity_TypeDef polarity);
00568 void EBI_BankByteLaneEnable(uint32_t bank, bool enable);
00569 void EBI_AltMapEnable(bool enable);
00570 
00571 /***************************************************************************/
00578 __STATIC_INLINE void EBI_TFTEnable(EBI_TFTDDMode_TypeDef mode)
00579 {
00580   EBI->TFTCTRL = (EBI->TFTCTRL & ~(_EBI_TFTCTRL_DD_MASK)) | (uint32_t) mode;
00581 }
00582 
00583 
00584 /***************************************************************************/
00591 __STATIC_INLINE void EBI_TFTFrameBaseSet(uint32_t address)
00592 {
00593   EBI->TFTFRAMEBASE = (uint32_t) address;
00594 }
00595 
00596 
00597 /***************************************************************************/
00605 __STATIC_INLINE void EBI_TFTPixelSet(int pixel, uint32_t color)
00606 {
00607   EFM_ASSERT(pixel == 0 || pixel == 1);
00608 
00609   if (pixel == 0)
00610   {
00611     EBI->TFTPIXEL0 = color;
00612   }
00613   if (pixel == 1)
00614   {
00615     EBI->TFTPIXEL1 = color;
00616   }
00617 }
00618 
00619 
00620 /***************************************************************************/
00626 __STATIC_INLINE void EBI_TFTMaskBlendMode(EBI_TFTMaskBlend_TypeDef maskBlend)
00627 {
00628   EBI->TFTCTRL = (EBI->TFTCTRL & (~_EBI_TFTCTRL_MASKBLEND_MASK))|maskBlend;
00629 }
00630 
00631 
00632 /***************************************************************************/
00638 __STATIC_INLINE void EBI_TFTAlphaBlendSet(uint8_t alpha)
00639 {
00640   EBI->TFTALPHA = alpha;
00641 }
00642 
00643 
00644 /***************************************************************************/
00649 __STATIC_INLINE void EBI_TFTMaskSet(uint32_t mask)
00650 {
00651   EBI->TFTMASK = mask;
00652 }
00653 
00654 
00655 /***************************************************************************/
00660 __STATIC_INLINE uint32_t EBI_TFTVCount(void)
00661 {
00662   return((EBI->TFTSTATUS & _EBI_TFTSTATUS_VCNT_MASK) >> _EBI_TFTSTATUS_VCNT_SHIFT);
00663 }
00664 
00665 
00666 /***************************************************************************/
00671 __STATIC_INLINE uint32_t EBI_TFTHCount(void)
00672 {
00673   return((EBI->TFTSTATUS & _EBI_TFTSTATUS_HCNT_MASK) >> _EBI_TFTSTATUS_HCNT_SHIFT);
00674 }
00675 
00676 
00677 /***************************************************************************/
00687 __STATIC_INLINE void EBI_TFTFBTriggerSet(EBI_TFTFrameBufTrigger_TypeDef sync)
00688 {
00689   EBI->TFTCTRL = ((EBI->TFTCTRL & ~_EBI_TFTCTRL_FBCTRIG_MASK)|sync);
00690 }
00691 
00692 
00693 /***************************************************************************/
00700 __STATIC_INLINE void EBI_TFTHStrideSet(uint32_t nbytes)
00701 {
00702   EFM_ASSERT(nbytes < 0x1000);
00703 
00704   EBI->TFTSTRIDE = (EBI->TFTSTRIDE & ~(_EBI_TFTSTRIDE_HSTRIDE_MASK))|
00705     (nbytes<<_EBI_TFTSTRIDE_HSTRIDE_SHIFT);
00706 }
00707 
00708 
00709 /***************************************************************************/
00716 __STATIC_INLINE void EBI_IntClear(uint32_t flags)
00717 {
00718   EBI->IFC = flags;
00719 }
00720 
00721 
00722 /***************************************************************************/
00730 __STATIC_INLINE void EBI_IntSet(uint32_t flags)
00731 {
00732   EBI->IFS = flags;
00733 }
00734 
00735 
00736 /***************************************************************************/
00744 __STATIC_INLINE void EBI_IntDisable(uint32_t flags)
00745 {
00746   EBI->IEN &= ~(flags);
00747 }
00748 
00749 
00750 /***************************************************************************/
00758 __STATIC_INLINE void EBI_IntEnable(uint32_t flags)
00759 {
00760   EBI->IEN |= flags;
00761 }
00762 
00763 
00764 /***************************************************************************/
00775 __STATIC_INLINE uint32_t EBI_IntGet(void)
00776 {
00777   return(EBI->IF);
00778 }
00779 
00780 
00781 /***************************************************************************/
00785 __STATIC_INLINE void EBI_StartNandEccGen(void)
00786 {
00787   EBI->CMD = EBI_CMD_ECCSTART | EBI_CMD_ECCCLEAR;
00788 }
00789 
00790 
00791 /***************************************************************************/
00798 __STATIC_INLINE uint32_t EBI_StopNandEccGen( void )
00799 {
00800   EBI->CMD = EBI_CMD_ECCSTOP;
00801   return EBI->ECCPARITY;
00802 }
00803 #endif
00804 
00805 void EBI_ChipSelectEnable(uint32_t banks, bool enable);
00806 void EBI_ReadTimingSet(int setupCycles, int strobeCycles, int holdCycles);
00807 void EBI_WriteTimingSet(int setupCycles, int strobeCycles, int holdCycles);
00808 void EBI_AddressTimingSet(int setupCycles, int holdCycles);
00809 void EBI_PolaritySet(EBI_Line_TypeDef line, EBI_Polarity_TypeDef polarity);
00810 
00814 #ifdef __cplusplus
00815 }
00816 #endif
00817 
00818 #endif /* defined(EBI_COUNT) && (EBI_COUNT > 0) */
00819 
00820 #endif /* __EM_EBI_H */