www.pudn.com > ethercat-slave-source-code.rar > el9800hw.h, change:2013-05-03,size:11758b
/** * \addtogroup EL9800_HW EL9800 Platform (Serial ESC Access) * @{ */ /** \file el9800hw.h \author EthercatSSC@beckhoff.com \brief Defines to access the EL9800 specific periphery and ESC (via SPI) \version 5.01 <br>Changes to version - :<br> V5.01 : Start file change log */ #ifndef _EL9800HW_H_ #define _EL9800HW_H_ /*----------------------------------------------------------------------------------------- ------ ------ Includes ------ -----------------------------------------------------------------------------------------*/ #include "esc.h" #if _PIC18 #include <pic18.h> #elif _PIC24 #include <p24Hxxxx.h> #endif /*----------------------------------------------------------------------------------------- ------ ------ Defines and Types ------ -----------------------------------------------------------------------------------------*/ #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.*/ /*--------------------------------------------- - Microcontroller definitions -----------------------------------------------*/ #if defined(_18F242) || defined(_18F252) || defined(_18F442) || defined(_18F452) #define ADREG ADCON1 #define ADREG_ALL_DIG_IO 0x07 #elif defined(_18F2420) || defined(_18F2520) || defined(_18F4420) || defined(_18F4520) #define ADREG ADCON1 #define ADREG_ALL_DIG_IO 0x0F #elif defined(_18F23K20) || defined(_18F24K20) || defined(_18F25K20) || defined(_18F43K20) || defined(_18F44K20) || defined(_18F45K20) #define ADREG ANSEL #define ADREG_ALL_DIG_IO 0x00 #endif #if _PIC24 #define PORT_CFG {TRISD = 0xFFFF; TRISB = 0x0008; TRISF = 0xFFCC; TRISG = 0x210C; PORTB = 0x00F4; PORTF = 0x0030; PORTG = 0x1243;} #define SWITCH_1 PORTDbits.RD7 /**< \brief Access to switch 1 input*/ #define SWITCH_2 PORTDbits.RD6 /**< \brief Access to switch 2 input*/ #define SWITCH_3 PORTDbits.RD5 /**< \brief Access to switch 3 input*/ #define SWITCH_4 PORTDbits.RD4 /**< \brief Access to switch 4 input*/ #define SWITCH_5 PORTDbits.RD3 /**< \brief Access to switch 5 input*/ #define SWITCH_6 PORTDbits.RD2 /**< \brief Access to switch 6 input*/ #define SWITCH_7 PORTDbits.RD1 /**< \brief Access to switch 7 input*/ #define SWITCH_8 PORTDbits.RD0 /**< \brief Access to switch 8 input*/ #define LED_1 LATBbits.LATB8 /**< \brief Access to led 1 output*/ #define LED_2 LATBbits.LATB9 /**< \brief Access to led 2 output*/ #define LED_3 LATBbits.LATB10 /**< \brief Access to led 3 output*/ #define LED_4 LATBbits.LATB11 /**< \brief Access to led 4 output*/ #define LED_5 LATBbits.LATB12 /**< \brief Access to led 5 output*/ #define LED_6 LATBbits.LATB13 /**< \brief Access to led 6 output*/ #define LED_7 LATBbits.LATB14 /**< \brief Access to led 7 output*/ #define LED_8 LATBbits.LATB15 /**< \brief Access to led 8 output*/ #elif _PIC18 #define PORT_CFG {PORTB = 0x00; TRISB = 0x0D; PORTC = 0x00; TRISC = 0x10; TRISD = 0x0F; PORTD = 0x00;} #define SWITCH_1 RD0 /**< \brief Access to switch 1 input*/ #define SWITCH_2 RD1 /**< \brief Access to switch 2 input*/ #define SWITCH_3 RD2 /**< \brief Access to switch 3 input*/ #define SWITCH_4 RD3 /**< \brief Access to switch 4 input*/ #define LED_1 RD4 /**< \brief Access to led 1 output*/ #define LED_2 RD5 /**< \brief Access to led 2 output*/ #define LED_3 RD6 /**< \brief Access to led 3 output*/ #define LED_4 RD7 /**< \brief Access to led 4 output*/ #endif /*--------------------------------------------- - hardware timer settings -----------------------------------------------*/ #if _PIC24 #define ECAT_TIMER_INC_P_MS 0x271 /**< \brief 625 ticks per ms*/ #elif _PIC18 #define ECAT_TIMER_INC_P_MS 0x15F9 /**< \brief 5628 ticks per ms*/ #endif /*--------------------------------------------- - Interrupt and Timer defines -----------------------------------------------*/ #if _PIC24 #ifndef DISABLE_ESC_INT #define DISABLE_ESC_INT() {(_INT1IE)=0;} /**< \brief Disable interrupt source INT1*/ #endif #ifndef ENABLE_ESC_INT #define ENABLE_ESC_INT() {(_INT1IE)=1;} /**< \brief Enable interrupt source INT1*/ #endif #ifndef HW_GetTimer #define HW_GetTimer() ((UINT16)(TMR7)) /**< \brief Access to the hardware timer*/ #endif #ifndef HW_ClearTimer #define HW_ClearTimer() {(TMR7) = 0;} /**< \brief Clear the hardware timer*/ #endif #elif _PIC18 #ifndef DISABLE_ESC_INT #define DISABLE_ESC_INT() (INT0IE)=0 /**< \brief Disable interrupt source INT0*/ #endif #ifndef ENABLE_ESC_INT #define ENABLE_ESC_INT() (INT0IE)=1 /**< \brief Enable interrupt source INT0*/ #endif #ifndef HW_GetTimer #define HW_GetTimer() ((UINT16)TMR3) /**< \brief Access to the hardware timer*/ #endif #ifndef HW_ClearTimer #define HW_ClearTimer() {(TMR3) = 0;} /**< \brief Clear the hardware timer*/ #endif #endif //#elif _PIC18 #if !INTERRUPTS_SUPPORTED #define HW_GetALEventRegister_Isr HW_GetALEventRegister /**< \brief No interrupts are supported so the default Get AL Event register (0x220) function is used*/ #endif #define HW_EscReadWord(WordValue, Address) HW_EscRead(((MEM_ADDR *)&(WordValue)),((UINT16)(Address)),2) /**< \brief 16Bit ESC read access*/ #define HW_EscReadDWord(DWordValue, Address) HW_EscRead(((MEM_ADDR *)&(DWordValue)),((UINT16)(Address)),4) /**< \brief 32Bit ESC read access*/ #if !ESC_16BIT_ACCESS #define HW_EscReadByte(ByteValue, Address) HW_EscRead(((MEM_ADDR *)&(ByteValue)),((UINT16)(Address)),1) /**< \brief 8Bit ESC read access*/ #endif #define HW_EscReadMbxMem(pData,Address,Len) HW_EscRead(((MEM_ADDR *)(pData)),((UINT16)(Address)),(Len)) /**< \brief The mailbox data is stored in the local uC memory therefore the default read function is used.*/ #if INTERRUPTS_SUPPORTED #define HW_EscReadWordIsr(WordValue, Address) HW_EscReadIsr(((MEM_ADDR *)&(WordValue)),((UINT16)(Address)),2) /**< \brief Interrupt specific 16Bit ESC read access*/ #define HW_EscReadDWordIsr(DWordValue, Address) HW_EscReadIsr(((MEM_ADDR *)&(DWordValue)),((UINT16)(Address)),4) /**< \brief Interrupt specific 32Bit ESC read access*/ #if !ESC_16BIT_ACCESS #define HW_EscReadByteIsr(ByteValue, Address) HW_EscReadIsr(((MEM_ADDR *)&(ByteValue)),((UINT16)(Address)),1) /**< \brief Interrupt specific 8Bit ESC read access*/ #endif #else #define HW_EscReadIsr(pData, Address, Len ) HW_EscRead(((MEM_ADDR *)(pData)),((UINT16)(Address)),(Len)) /**< \brief No Interrupts are supported so the generic ESC write access function is used*/ #define HW_EscReadWordIsr(WordValue, Address) HW_EscRead(((MEM_ADDR *)&(WordValue)),((UINT16)(Address)),2) /**< \brief No Interrupts are used so the generic (16Bit) ESC read access function is used*/ #define HW_EscReadDWordIsr(DWordValue, Address) HW_EscRead(((MEM_ADDR *)&(DWordValue)),((UINT16)(Address)),4) /**< \brief No Interrupts are used so the generic (32Bit) ESC read access function is used*/ #if !ESC_16BIT_ACCESS #define HW_EscReadByteIsr(ByteValue, Address) HW_EscRead(((MEM_ADDR *)&(ByteValue)),((UINT16)(Address)),1) /**< \brief No Interrupts are used so the generic (8Bit) ESC read access function is used*/ #endif //#if !ESC_16BIT_ACCESS #endif// #if else INTERRUPTS_SUPPORTED #define HW_EscWriteWord(WordValue, Address) HW_EscWrite(((MEM_ADDR *)&(WordValue)),((UINT16)(Address)),2) /**< \brief 16Bit ESC write access*/ #define HW_EscWriteDWord(DWordValue, Address) HW_EscWrite(((MEM_ADDR *)&(DWordValue)),((UINT16)(Address)),4) /**< \brief 32Bit ESC write access*/ #if !ESC_16BIT_ACCESS #define HW_EscWriteByte(ByteValue, Address) HW_EscWrite(((MEM_ADDR *)&(ByteValue)),((UINT16)(Address)),1) /**< \brief 8Bit ESC write access*/ #endif #define HW_EscWriteMbxMem(pData,Address,Len) HW_EscWrite(((MEM_ADDR *)(pData)),((UINT16)(Address)),(Len)) /**< \brief The mailbox data is stored in the local uC memory therefore the default write function is used.*/ #if INTERRUPTS_SUPPORTED #define HW_EscWriteWordIsr(WordValue, Address) HW_EscWriteIsr(((MEM_ADDR *)&(WordValue)),((UINT16)(Address)),2) /**< \brief Interrupt specific 16Bit ESC write access*/ #define HW_EscWriteDWordIsr(DWordValue, Address) HW_EscWriteIsr(((MEM_ADDR *)&(DWordValue)),((UINT16)(Address)),4) /**< \brief Interrupt specific 32Bit ESC write access*/ #if !ESC_16BIT_ACCESS #define HW_EscWriteByteIsr(ByteValue, Address) HW_EscWriteIsr(((MEM_ADDR *)&(ByteValue)),((UINT16)(Address)),1) /**< \brief Interrupt specific 8Bit ESC write access*/ #endif #else #define HW_EscWriteIsr(pData, Address, Len ) HW_EscWrite(((MEM_ADDR *)(pData)),((UINT16)(Address)),(Len)) /**< \brief No Interrupts are supported so the generic ESC write access function is used*/ #define HW_EscWriteWordIsr(WordValue, Address) HW_EscWrite(((MEM_ADDR *)&(WordValue)),((UINT16)(Address)),2) /**< \brief No Interrupts are used so the generic (16Bit) ESC write access function is used*/ #define HW_EscWriteDWordIsr(DWordValue, Address) HW_EscWrite(((MEM_ADDR *)&(DWordValue)),((UINT16)(Address)),4) /**< \brief No Interrupts are used so the generic (32Bit) ESC write access function is used*/ #if !ESC_16BIT_ACCESS #define HW_EscWriteByteIsr(ByteValue, Address) HW_EscWrite(((MEM_ADDR *)&(ByteValue)),((UINT16)(Address)),1) /**< \brief No Interrupts are used so the generic (8Bit) ESC write access function is used*/ #endif #endif #endif //_EL9800HW_H_ #if _EL9800HW_ #define PROTO #else #define PROTO extern #endif /*----------------------------------------------------------------------------------------- ------ ------ Global variables ------ -----------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------- ------ ------ Global functions ------ -----------------------------------------------------------------------------------------*/ PROTO UINT8 HW_Init(void); PROTO void HW_Release(void); PROTO UINT16 HW_GetALEventRegister(void); #if INTERRUPTS_SUPPORTED PROTO UINT16 HW_GetALEventRegister_Isr(void); #endif//#if INTERRUPTS_SUPPORTED #if AL_EVENT_ENABLED PROTO void HW_ResetALEventMask(UINT16 intMask); PROTO void HW_SetALEventMask(UINT16 intMask); #endif #if UC_SET_ECAT_LED PROTO void HW_SetLed(UINT8 RunLed,UINT8 ErrLed); #endif //#if UC_SET_ECAT_LED PROTO void HW_EscRead( MEM_ADDR * pData, UINT16 Address, UINT16 Len ); #if INTERRUPTS_SUPPORTED PROTO void HW_EscReadIsr( MEM_ADDR *pData, UINT16 Address, UINT16 Len ); #endif PROTO void HW_EscWrite( MEM_ADDR *pData, UINT16 Address, UINT16 Len ); #if INTERRUPTS_SUPPORTED PROTO void HW_EscWriteIsr( MEM_ADDR *pData, UINT16 Address, UINT16 Len ); #endif #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); /*--------------------------------------------- - ESC Access macros -----------------------------------------------*/ #if _EL9800HW_ #endif //#if _EL9800HW_ #undef PROTO /** @}*/