/* ---------------------------------------------------------------------------- | |
* SAM Software Package License | |
* ---------------------------------------------------------------------------- | |
* Copyright (c) 2011, Atmel Corporation | |
* | |
* All rights reserved. | |
* | |
* Redistribution and use in source and binary forms, with or without | |
* modification, are permitted provided that the following conditions are met: | |
* | |
* - Redistributions of source code must retain the above copyright notice, | |
* this list of conditions and the disclaimer below. | |
* | |
* Atmel's name may not be used to endorse or promote products derived from | |
* this software without specific prior written permission. | |
* | |
* DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR | |
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE | |
* DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, | |
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, | |
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, | |
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
* ---------------------------------------------------------------------------- | |
*/ | |
/** \file | |
* Definitions and prototypes for Controller Area Network (CAN) | |
* peripheral operations. | |
*/ | |
/** \ingroup lib_chip | |
* \ingroup cand_module | |
* \addtogroup can_module Working with CAN | |
* | |
* \section Purpose | |
* Interface for Controller Area Network (CAN). | |
* | |
* \section Usage | |
* | |
* Before CAN operation, its peripheral clock should be enabled, see | |
* PMC_EnablePeripheral(). | |
* | |
* Modify CAN registers or register fields with API functions: | |
* - Modify CAN Mode register with CAN_ConfigureMode(). | |
* - Enable/Disable CAN with CAN_Enable(). | |
* - Change CAN interrupt settings with CAN_EnableIt(), CAN_DisableIt(), | |
* get interrupt mask by CAN_GetItMask(). | |
* - Get CAN status with CAN_GetStatus(). | |
* - Setup CAN baudrate via CAN_CalcBaudrate(). | |
* - Start several mailbox transmition through CAN_Command(). | |
* - The following functions setup mailboxes for message transfer: | |
* - CAN_ConfigureMessageMode() : setup _MMRx. | |
* - CAN_ConfigureMessageAcceptanceMask() : setup _MARx. | |
* - CAN_ConfigureMessageID() : setup _MIDx. | |
* - CAN_SetMessage() : setup _MDLx and _MDHx. | |
* - CAN_MessageControl() : setup _MCRx. | |
* - The following get status and data from mailbox: | |
* - CAN_GetMessage() : | |
* - CAN_GetMessageStatus() : | |
*/ | |
#ifndef _CAN_H_ | |
#define _CAN_H_ | |
/**@{*/ | |
/*---------------------------------------------------------------------------- | |
* Headers | |
*----------------------------------------------------------------------------*/ | |
#include <stdint.h> | |
/*---------------------------------------------------------------------------- | |
* Definitions | |
*----------------------------------------------------------------------------*/ | |
/** Number of mailboxes in a CAN controller */ | |
#define CAN_NUM_MAILBOX 8 | |
/*---------------------------------------------------------------------------- | |
* Exported functions | |
*----------------------------------------------------------------------------*/ | |
void CAN_ConfigureMode(Can * pCan,uint32_t dwMr); | |
void CAN_Enable(Can * pCan,uint8_t bEnDis); | |
void CAN_EnableLowPower(Can * pCan,uint8_t bEnDis); | |
void CAN_EnableAutobaud(Can * pCan,uint8_t bEnDis); | |
void CAN_EnableOverloadFrame(Can * pCan,uint8_t bEnDis); | |
void CAN_EnableTimeStampEof(Can * pCan,uint8_t bEofSof); | |
void CAN_EnableTimeTriggerMode(Can * pCan,uint8_t bEnDis); | |
void CAN_EnableTimerFreeze(Can * pCan,uint8_t bEnDis); | |
void CAN_DisableRepeat(Can * pCan,uint8_t bDisEn); | |
void CAN_EnableIt(Can * pCan,uint32_t dwSources); | |
void CAN_DisableIt(Can * pCan,uint32_t dwSources); | |
uint32_t CAN_GetItMask(Can * pCan); | |
uint32_t CAN_GetStatus(Can * pCan); | |
uint8_t CAN_CalcBaudrate(Can * pCan, uint32_t dwBaud, uint32_t dwMck); | |
void CAN_ConfigureBaudrate(Can * pCan,uint32_t dwBr); | |
void CAN_SetSamplingMode(Can * pCan,uint8_t bAvg3); | |
uint32_t CAN_GetTimer(Can * pCan); | |
uint32_t CAN_GetTimestamp(Can * pCan); | |
uint32_t CAN_GetErrorCount(Can * pCan); | |
uint32_t CAN_GetRxErrorCount(Can * pCan); | |
uint32_t CAN_GetTxErrorCount(Can * pCan); | |
void CAN_Command(Can * pCan,uint32_t dwRequests); | |
void CAN_ResetTimer(Can * pCan); | |
void CAN_Tx(Can * pCan,uint8_t bMb); | |
void CAN_Abort(Can * pCan,uint32_t dwAborts); | |
void CAN_AbortMailbox(Can * pCan,uint8_t bMb); | |
void CAN_ConfigureMessageMode(Can * pCan,uint8_t bMb,uint32_t dwMr); | |
uint32_t CAN_GetMessageMode(Can * pCan,uint8_t bMb); | |
void CAN_SetTimemark(Can * pCan,uint8_t bMb,uint8_t bTimemarks); | |
void CAN_SetPriority(Can * pCan,uint8_t bMb,uint8_t bPriority); | |
void CAN_SetObjectType(Can * pCan,uint8_t bMb,uint8_t bType); | |
void CAN_ConfigureMessageAcceptanceMask(Can * pCan,uint8_t bMb,uint32_t dwMAM); | |
uint32_t CAN_GetMessageAcceptanceMask(Can * pCan,uint8_t bMb); | |
void CAN_ConfigureIdentifierMask(Can * pCan,uint8_t bMb,uint8_t bIdCfg); | |
void CAN_SetMIDvAMask(Can * pCan,uint8_t bMb,uint32_t dwIDvA); | |
void CAN_SetMIDvBMask(Can * pCan,uint8_t bMb,uint32_t dwIDvA); | |
void CAN_ConfigureMessageID(Can * pCan,uint8_t bMb,uint32_t dwMID); | |
uint32_t CAN_GetMessageID(Can * pCan,uint8_t bMb); | |
void CAN_ConfigureIdVer(Can * pCan,uint8_t bMb,uint8_t bIdVer); | |
void CAN_SetMIDvA(Can * pCan,uint8_t bMb,uint32_t dwIDvA); | |
void CAN_SetMIDvB(Can * pCan,uint8_t bMb,uint32_t dwIDvA); | |
uint32_t CAN_GetFamilyID(Can * pCan,uint8_t bMb); | |
uint32_t CAN_GetMessageStatus(Can * pCan,uint8_t bMb); | |
void CAN_SetMessageDataL(Can * pCan,uint8_t bMb,uint32_t dwL); | |
uint32_t CAN_GetMessageDataL(Can * pCan,uint8_t bMb); | |
void CAN_SetMessageDataH(Can * pCan,uint8_t bMb,uint32_t dwH); | |
uint32_t CAN_GetMessageDataH(Can * pCan,uint8_t bMb); | |
void CAN_SetMessage(Can * pCan,uint8_t bMb,uint32_t * pDwData); | |
void CAN_GetMessage(Can * pCan,uint8_t bMb,uint32_t * pDwData); | |
void CAN_SetMessageData64(Can * pCan,uint8_t bMb,uint64_t u64); | |
uint64_t CAN_GetMessageData64(Can * pCan,uint8_t bMb); | |
void CAN_MessageControl(Can * pCan,uint8_t bMb,uint32_t dwCtrl); | |
void CAN_MessageRemote(Can * pCan,uint8_t bMb); | |
void CAN_MessageAbort(Can * pCan,uint8_t bMb); | |
void CAN_MessageTx(Can * pCan,uint8_t bMb,uint8_t bLen); | |
void CAN_MessageRx(Can * pCan,uint8_t bMb); | |
/**@}*/ | |
#endif /* #ifndef _CAN_H_ */ |