www.pudn.com > ethercat-slave-source-code.rar > mcihw.h, change:2013-05-03,size:8472b


/** 
 * \addtogroup MCI_HW Parallel ESC Access 
 * @{ 
 */ 
 
/** 
\file mcihw.h 
\author EthercatSSC@beckhoff.com 
\brief Defines and Macros to access the ESC via a parallel interface 
 
\version 5.10 
 
<br>Changes to version V5.01:<br> 
V5.10 HW4: Add volatile directive for direct ESC DWORD/WORD/BYTE access<br> 
           Add missing swapping in mcihw.c<br> 
           Add "volatile" directive vor dummy vairables in enable and disable SyncManger functions<br> 
           Add missing swapping in EL9800hw files<br> 
<br>Changes to version - :<br> 
V5.01 : Start file change log 
 */ 
 
 
#ifndef _MCIHW_H_ 
#define _MCIHW_H_ 
 
 
/*----------------------------------------------------------------------------------------- 
------ 
------    Includes 
------ 
-----------------------------------------------------------------------------------------*/ 
#include <string.h> 
#include <malloc.h> 
#include "esc.h" 
 
 
/*----------------------------------------------------------------------------------------- 
------ 
------    Defines and Types 
------ 
-----------------------------------------------------------------------------------------*/ 
 
#if ESC_32BIT_ACCESS 
#define ESC_MEM_ADDR    UINT32 /**< \brief ESC address type (32Bit)*/ 
#define ESC_MEM_SHIFT   2 /**< \brief shift to convert Byte address to ESC address type*/ 
#elif ESC_16BIT_ACCESS 
#define ESC_MEM_ADDR    UINT16 /**< \brief ESC address type (16Bit)*/ 
#define ESC_MEM_SHIFT   1 /**< \brief shift to convert Byte address to ESC address type*/ 
#else 
#define ESC_MEM_ADDR    UINT8 /**< \brief ESC address type (8Bit)*/ 
#define ESC_MEM_SHIFT   0 /**< \brief shift to convert Byte address to ESC address type*/ 
#endif 
 
#if !ECAT_TIMER_INT || COE_SUPPORTED 
#ifndef HW_GetTimer 
/** 
 * \todo Define a macro or implement a function to get the hardware timer value.<br>See SSC Application Note for further details, http://www.beckhoff.com/english.asp?download/ethercat_development_products.htm?id=71003127100387 
 */ 
#define HW_GetTimer() 
#endif 
 
#ifndef HW_ClearTimer 
/** 
 * \todo Define a macro or implement a function to clear the hardware timer value.<br>See SSC Application Note for further details, http://www.beckhoff.com/english.asp?download/ethercat_development_products.htm?id=71003127100387 
 */ 
#define HW_ClearTimer() 
#endif 
 
/** 
 * \todo Define the hardware timer ticks per millisecond. 
 */ 
#define ECAT_TIMER_INC_P_MS 
 
 
#warning "define access to timer register(counter)" 
#endif //#if !ECAT_TIMER_INT || COE_SUPPORTED 
/* ECATCHANGE_START(V5.10) HW4*/ 
#define     HW_GetALEventRegister()             ((((volatile UINT16 ESCMEM *)pEsc)[((ESC_AL_EVENT_OFFSET)>>1)])) /**< \brief Returns the first 16Bit of the AL Event register (0x220)*/ 
/* ECATCHANGE_END(V5.10) HW4*/ 
#define     HW_GetALEventRegister_Isr           HW_GetALEventRegister /**< \brief Returns the first 16Bit of the AL Event register (0x220).<br>Called from ISRs.*/ 
 
#define     HW_EscRead(pData,Address,Len)       ESCMEMCPY((MEM_ADDR *)(pData), &((ESC_MEM_ADDR ESCMEM *) pEsc)[((Address) >> ESC_MEM_SHIFT)], (Len)) /**< \brief Generic ESC (register and DPRAM) read access.*/ 
#define     HW_EscReadIsr                       HW_EscRead /**< \brief Generic ESC (register and DPRAM) read access.<br>Called for ISRs.*/ 
/* ECATCHANGE_START(V5.10) HW4*/ 
#define     HW_EscReadDWord(DWordValue, Address)    ((DWordValue) = (UINT32)(((volatile UINT32 *)pEsc)[(Address>>2)])) /**< \brief 32Bit specific ESC (register and DPRAM) read access.*/ 
#define     HW_EscReadDWordIsr(DWordValue, Address) ((DWordValue) = (UINT32)(((volatile UINT32 *)pEsc)[(Address>>2)])) /**< \brief 32Bit specific ESC (register and DPRAM) read access.<br>Called from ISRs.*/ 
/* ECATCHANGE_END(V5.10) HW4*/ 
#if !ESC_32BIT_ACCESS 
/* ECATCHANGE_START(V5.10) HW4*/ 
#define     HW_EscReadWord(WordValue, Address)  ((WordValue) = (((volatile UINT16 *)pEsc)[((Address)>>1)])) /**< \brief 16Bit specific ESC (register and DPRAM) read access.*/ 
/* ECATCHANGE_END(V5.10) HW4*/ 
#define     HW_EscReadWordIsr(WordValue, Address) HW_EscReadWord(WordValue, Address) /**< \brief 16Bit specific ESC (register and DPRAM) read access.<br>Called from ISRs.*/ 
#if !ESC_16BIT_ACCESS 
/* ECATCHANGE_START(V5.10) HW4*/ 
#define     HW_EscReadByte(ByteValue, Address)  ((ByteValue) = (((volatile UINT8 *)pEsc)[(Address)])) /**< \brief 8Bit specific ESC (register and DPRAM) read access.*/ 
/* ECATCHANGE_END(V5.10) HW4*/ 
#define     HW_EscReadByteIsr(ByteValue, Address) HW_EscReadByte(ByteValue, Address) /**< \brief 8Bit specific ESC (register and DPRAM) read access.<br>Called from ISRs.*/ 
#endif 
#endif 
#define     HW_EscReadMbxMem(pData,Address,Len) ESCMBXMEMCPY((MEM_ADDR *)(pData), &((ESC_MEM_ADDR ESCMEM *) pEsc)[((Address) >> ESC_MEM_SHIFT)], (Len)) /**< \brief Macro to copy data from the application mailbox memory(not the ESC memory, this access is handled by HW_EscRead).*/ 
 
 
#define     HW_EscWrite(pData,Address,Len)      ESCMEMCPY(&((ESC_MEM_ADDR ESCMEM *) pEsc)[((Address)>>ESC_MEM_SHIFT)], (MEM_ADDR *)(pData), (Len)) /**< \brief Generic ESC (register and DPRAM) write access.*/ 
#define     HW_EscWriteIsr                      HW_EscWrite /**< \brief Generic ESC (register and DPRAM) write access.<br>Called for ISRs.*/ 
/* ECATCHANGE_START(V5.10) HW4*/ 
#define     HW_EscWriteDWord(DWordValue, Address)   ((((volatile UINT32 *)pEsc)[(Address>>2)]) = (DWordValue)) /**< \brief 32Bit specific ESC (register and DPRAM) write access.*/ 
#define     HW_EscWriteDWordIsr(DWordValue, Address)((((volatile UINT32 *)pEsc)[(Address>>2)]) = (DWordValue)) /**< \brief 32Bit specific ESC (register and DPRAM) write access.<br>Called from ISRs.*/ 
/* ECATCHANGE_END(V5.10) HW4*/ 
#if !ESC_32BIT_ACCESS 
/* ECATCHANGE_START(V5.10) HW4*/ 
#define     HW_EscWriteWord(WordValue, Address) ((((volatile UINT16 *)pEsc)[((Address)>>1)]) = (WordValue)) /**< \brief 16Bit specific ESC (register and DPRAM) write access.*/ 
/* ECATCHANGE_END(V5.10) HW4*/ 
#define     HW_EscWriteWordIsr(WordValue, Address) HW_EscWriteWord(WordValue, Address) /**< \brief 16Bit specific ESC (register and DPRAM) write access.<br>Called from ISRs.*/ 
#if !ESC_16BIT_ACCESS 
/* ECATCHANGE_START(V5.10) HW4*/ 
#define     HW_EscWriteByte(ByteValue, Address) ((((volatile UINT8 *)pEsc)[(Address)]) = (ByteValue)) /**< \brief 8Bit specific ESC (register and DPRAM) write access.*/ 
/* ECATCHANGE_END(V5.10) HW4*/ 
#define     HW_EscWriteByteIsr(ByteValue, Address) HW_EscWriteByte(ByteValue, Address) /**< \brief 8Bit specific ESC (register and DPRAM) write access.<br>Called from ISRs.*/ 
#endif 
#endif 
#define     HW_EscWriteMbxMem(pData,Address,Len)    ESCMBXMEMCPY(&((ESC_MEM_ADDR ESCMEM *) pEsc)[((Address)>>ESC_MEM_SHIFT)],(MEM_ADDR *)(pData), (Len)) /**< \brief Macro to copy data from the application mailbox memory (not the ESC memory, this access is handled by HW_EscWrite).*/ 
 
 
#ifndef TIMER_INT_HEADER 
#define    TIMER_INT_HEADER /**< \brief Compiler directive before the hardware timer ISR function*/ 
#endif 
 
#define     ESC_RD                    0x02 /**< \brief Indicates a read access to ESC or EEPROM*/ 
#define     ESC_WR                    0x04 /**< \brief Indicates a write access to ESC or EEPROM.*/ 
 
#endif//_MCIHW_H_ 
 
 
/*----------------------------------------------------------------------------------------- 
------ 
------    Global variables 
------ 
-----------------------------------------------------------------------------------------*/ 
 
#if _MCIHW_ 
    #define PROTO 
#else 
    #define PROTO extern 
#endif 
 
PROTO MEM_ADDR ESCMEM *            pEsc;            /**< \brief Pointer to the ESC.<br>Shall be initialized in HW_Init().*/ 
 
 
/*----------------------------------------------------------------------------------------- 
------ 
------    Global functions 
------ 
-----------------------------------------------------------------------------------------*/ 
#if UC_SET_ECAT_LED 
PROTO void HW_SetLed(BOOL RunLed,BOOL ErrLed); 
#endif //#if UC_SET_ECAT_LED 
 
PROTO UINT16 HW_Init(void); 
PROTO void HW_Release(void); 
PROTO    void HW_ResetALEventMask(UINT16 intMask); 
PROTO    void HW_SetALEventMask(UINT16 intMask); 
 
#if BOOTSTRAPMODE_SUPPORTED 
PROTO    void HW_RestartTarget(void); 
#endif 
 
PROTO void HW_DisableSyncManChannel(UINT8 channel); 
PROTO void HW_EnableSyncManChannel(UINT8 channel); 
PROTO    TSYNCMAN ESCMEM * HW_GetSyncMan(UINT8 channel); 
 
#undef PROTO 
/** @}*/