etisserant@375: //****************************************************************************** etisserant@375: //! @file $RCSfile$ etisserant@375: //! etisserant@375: //! Copyright (c) 2007 Atmel. etisserant@375: //! etisserant@375: //! Use of this program is subject to Atmel's End User License Agreement. etisserant@375: //! Please read file license.txt for copyright notice. etisserant@375: //! etisserant@375: //! @brief This file contains the prototypes and the macros of the etisserant@375: //! low level functions (drivers) of: etisserant@375: //! - CAN (Controller Array Network) etisserant@375: //! - for AT90CAN128/64/32. etisserant@375: //! etisserant@375: //! This file can be parsed by Doxygen for automatic documentation generation. etisserant@375: //! This file has been validated with AVRStudio-413528/WinAVR-20070122. etisserant@375: //! etisserant@375: //! @version $Revision$ $Name$ etisserant@375: //! etisserant@375: //! @todo etisserant@375: //! @bug etisserant@375: //****************************************************************************** etisserant@375: // Same stuff removed by Peter Christen etisserant@375: etisserant@375: #ifndef _CAN_DRV_H_ etisserant@375: #define _CAN_DRV_H_ etisserant@375: etisserant@375: typedef unsigned char U8 ; etisserant@375: etisserant@375: #define CAN_PORT_IN PIND etisserant@375: #define CAN_PORT_DIR DDRD etisserant@375: #define CAN_PORT_OUT PORTD etisserant@375: #define CAN_INPUT_PIN 6 etisserant@375: #define CAN_OUTPUT_PIN 5 etisserant@375: // ---------- etisserant@375: #define ERR_GEN_MSK ((1<> DLC ) etisserant@375: #define Can_get_ide() ((CANCDMOB & (1<> IDE ) etisserant@375: #define Can_get_rtr() ((CANIDT4 & (1<> RTRTAG) etisserant@375: // ---------- etisserant@375: #define Can_set_rtrmsk() ( CANIDM4 |= (1<>5 ; \ etisserant@375: *((U8 *)(&(identifier)) ) = (CANIDT2>>5)+(CANIDT1<<3); } etisserant@375: // ---------- etisserant@375: //!< EXT ID TAG Reading etisserant@375: #define Can_get_ext_id(identifier) { *((U8 *)(&(identifier))+3) = CANIDT1>>3 ; \ etisserant@375: *((U8 *)(&(identifier))+2) = (CANIDT2>>3)+(CANIDT1<<5); \ etisserant@375: *((U8 *)(&(identifier))+1) = (CANIDT3>>3)+(CANIDT2<<5); \ etisserant@375: *((U8 *)(&(identifier)) ) = (CANIDT4>>3)+(CANIDT3<<5); } etisserant@375: // ---------- etisserant@375: //!< STD ID Construction etisserant@375: #define CAN_SET_STD_ID_10_4(identifier) (((*((U8 *)(&(identifier))+1))<<5)+((* (U8 *)(&(identifier)))>>3)) etisserant@375: #define CAN_SET_STD_ID_3_0( identifier) (( * (U8 *)(&(identifier)) )<<5) etisserant@375: // ---------- etisserant@375: //!< STD ID TAG writing etisserant@375: #define Can_set_std_id(identifier) { CANIDT1 = CAN_SET_STD_ID_10_4(identifier); \ etisserant@375: CANIDT2 = CAN_SET_STD_ID_3_0( identifier); \ etisserant@375: CANCDMOB &= (~(1<>5)) etisserant@375: #define CAN_SET_EXT_ID_20_13(identifier) (((*((U8 *)(&(identifier))+2))<<3)+((*((U8 *)(&(identifier))+1))>>5)) etisserant@375: #define CAN_SET_EXT_ID_12_5( identifier) (((*((U8 *)(&(identifier))+1))<<3)+((* (U8 *)(&(identifier)) )>>5)) etisserant@375: #define CAN_SET_EXT_ID_4_0( identifier) ((* (U8 *)(&(identifier)) )<<3) etisserant@375: // ---------- etisserant@375: //!< EXT ID TAG writing etisserant@375: #define Can_set_ext_id(identifier) { CANIDT1 = CAN_SET_EXT_ID_28_21(identifier); \ etisserant@375: CANIDT2 = CAN_SET_EXT_ID_20_13(identifier); \ etisserant@375: CANIDT3 = CAN_SET_EXT_ID_12_5( identifier); \ etisserant@375: CANIDT4 = CAN_SET_EXT_ID_4_0( identifier); \ etisserant@375: CANCDMOB |= (1<