1 /* ----------------------------------------------------------------------------
\r
2 * SAM Software Package License
\r
3 * ----------------------------------------------------------------------------
\r
4 * Copyright (c) 2011, Atmel Corporation
\r
6 * All rights reserved.
\r
8 * Redistribution and use in source and binary forms, with or without
\r
9 * modification, are permitted provided that the following conditions are met:
\r
11 * - Redistributions of source code must retain the above copyright notice,
\r
12 * this list of conditions and the disclaimer below.
\r
14 * Atmel's name may not be used to endorse or promote products derived from
\r
15 * this software without specific prior written permission.
\r
17 * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
\r
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
\r
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
\r
20 * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
\r
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
\r
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
\r
23 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
\r
24 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
\r
25 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
\r
26 * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\r
27 * ----------------------------------------------------------------------------
\r
31 * Definitions and prototypes for Controller Area Network (CAN)
\r
32 * peripheral operations.
\r
35 /** \ingroup lib_chip
\r
36 * \ingroup cand_module
\r
37 * \addtogroup can_module Working with CAN
\r
40 * Interface for Controller Area Network (CAN).
\r
44 * Before CAN operation, its peripheral clock should be enabled, see
\r
45 * PMC_EnablePeripheral().
\r
47 * Modify CAN registers or register fields with API functions:
\r
48 * - Modify CAN Mode register with CAN_ConfigureMode().
\r
49 * - Enable/Disable CAN with CAN_Enable().
\r
50 * - Change CAN interrupt settings with CAN_EnableIt(), CAN_DisableIt(),
\r
51 * get interrupt mask by CAN_GetItMask().
\r
52 * - Get CAN status with CAN_GetStatus().
\r
53 * - Setup CAN baudrate via CAN_CalcBaudrate().
\r
54 * - Start several mailbox transmition through CAN_Command().
\r
55 * - The following functions setup mailboxes for message transfer:
\r
56 * - CAN_ConfigureMessageMode() : setup _MMRx.
\r
57 * - CAN_ConfigureMessageAcceptanceMask() : setup _MARx.
\r
58 * - CAN_ConfigureMessageID() : setup _MIDx.
\r
59 * - CAN_SetMessage() : setup _MDLx and _MDHx.
\r
60 * - CAN_MessageControl() : setup _MCRx.
\r
61 * - The following get status and data from mailbox:
\r
62 * - CAN_GetMessage() :
\r
63 * - CAN_GetMessageStatus() :
\r
70 /*----------------------------------------------------------------------------
\r
72 *----------------------------------------------------------------------------*/
\r
76 /*----------------------------------------------------------------------------
\r
78 *----------------------------------------------------------------------------*/
\r
80 /** Number of mailboxes in a CAN controller */
\r
81 #define CAN_NUM_MAILBOX 8
\r
83 /*----------------------------------------------------------------------------
\r
84 * Exported functions
\r
85 *----------------------------------------------------------------------------*/
\r
87 void CAN_ConfigureMode(Can * pCan,uint32_t dwMr);
\r
88 void CAN_Enable(Can * pCan,uint8_t bEnDis);
\r
89 void CAN_EnableLowPower(Can * pCan,uint8_t bEnDis);
\r
90 void CAN_EnableAutobaud(Can * pCan,uint8_t bEnDis);
\r
91 void CAN_EnableOverloadFrame(Can * pCan,uint8_t bEnDis);
\r
92 void CAN_EnableTimeStampEof(Can * pCan,uint8_t bEofSof);
\r
93 void CAN_EnableTimeTriggerMode(Can * pCan,uint8_t bEnDis);
\r
94 void CAN_EnableTimerFreeze(Can * pCan,uint8_t bEnDis);
\r
95 void CAN_DisableRepeat(Can * pCan,uint8_t bDisEn);
\r
97 void CAN_EnableIt(Can * pCan,uint32_t dwSources);
\r
98 void CAN_DisableIt(Can * pCan,uint32_t dwSources);
\r
99 uint32_t CAN_GetItMask(Can * pCan);
\r
100 uint32_t CAN_GetStatus(Can * pCan);
\r
102 uint8_t CAN_CalcBaudrate(Can * pCan, uint32_t dwBaud, uint32_t dwMck);
\r
103 void CAN_ConfigureBaudrate(Can * pCan,uint32_t dwBr);
\r
104 void CAN_SetSamplingMode(Can * pCan,uint8_t bAvg3);
\r
106 uint32_t CAN_GetTimer(Can * pCan);
\r
107 uint32_t CAN_GetTimestamp(Can * pCan);
\r
109 uint32_t CAN_GetErrorCount(Can * pCan);
\r
110 uint32_t CAN_GetRxErrorCount(Can * pCan);
\r
111 uint32_t CAN_GetTxErrorCount(Can * pCan);
\r
113 void CAN_Command(Can * pCan,uint32_t dwRequests);
\r
114 void CAN_ResetTimer(Can * pCan);
\r
115 void CAN_Tx(Can * pCan,uint8_t bMb);
\r
117 void CAN_Abort(Can * pCan,uint32_t dwAborts);
\r
118 void CAN_AbortMailbox(Can * pCan,uint8_t bMb);
\r
120 void CAN_ConfigureMessageMode(Can * pCan,uint8_t bMb,uint32_t dwMr);
\r
121 uint32_t CAN_GetMessageMode(Can * pCan,uint8_t bMb);
\r
122 void CAN_SetTimemark(Can * pCan,uint8_t bMb,uint8_t bTimemarks);
\r
123 void CAN_SetPriority(Can * pCan,uint8_t bMb,uint8_t bPriority);
\r
124 void CAN_SetObjectType(Can * pCan,uint8_t bMb,uint8_t bType);
\r
126 void CAN_ConfigureMessageAcceptanceMask(Can * pCan,uint8_t bMb,uint32_t dwMAM);
\r
127 uint32_t CAN_GetMessageAcceptanceMask(Can * pCan,uint8_t bMb);
\r
128 void CAN_ConfigureIdentifierMask(Can * pCan,uint8_t bMb,uint8_t bIdCfg);
\r
129 void CAN_SetMIDvAMask(Can * pCan,uint8_t bMb,uint32_t dwIDvA);
\r
130 void CAN_SetMIDvBMask(Can * pCan,uint8_t bMb,uint32_t dwIDvA);
\r
132 void CAN_ConfigureMessageID(Can * pCan,uint8_t bMb,uint32_t dwMID);
\r
133 uint32_t CAN_GetMessageID(Can * pCan,uint8_t bMb);
\r
134 void CAN_ConfigureIdVer(Can * pCan,uint8_t bMb,uint8_t bIdVer);
\r
135 void CAN_SetMIDvA(Can * pCan,uint8_t bMb,uint32_t dwIDvA);
\r
136 void CAN_SetMIDvB(Can * pCan,uint8_t bMb,uint32_t dwIDvA);
\r
138 uint32_t CAN_GetFamilyID(Can * pCan,uint8_t bMb);
\r
140 uint32_t CAN_GetMessageStatus(Can * pCan,uint8_t bMb);
\r
142 void CAN_SetMessageDataL(Can * pCan,uint8_t bMb,uint32_t dwL);
\r
143 uint32_t CAN_GetMessageDataL(Can * pCan,uint8_t bMb);
\r
144 void CAN_SetMessageDataH(Can * pCan,uint8_t bMb,uint32_t dwH);
\r
145 uint32_t CAN_GetMessageDataH(Can * pCan,uint8_t bMb);
\r
146 void CAN_SetMessage(Can * pCan,uint8_t bMb,uint32_t * pDwData);
\r
147 void CAN_GetMessage(Can * pCan,uint8_t bMb,uint32_t * pDwData);
\r
148 void CAN_SetMessageData64(Can * pCan,uint8_t bMb,uint64_t u64);
\r
149 uint64_t CAN_GetMessageData64(Can * pCan,uint8_t bMb);
\r
151 void CAN_MessageControl(Can * pCan,uint8_t bMb,uint32_t dwCtrl);
\r
152 void CAN_MessageRemote(Can * pCan,uint8_t bMb);
\r
153 void CAN_MessageAbort(Can * pCan,uint8_t bMb);
\r
154 void CAN_MessageTx(Can * pCan,uint8_t bMb,uint8_t bLen);
\r
155 void CAN_MessageRx(Can * pCan,uint8_t bMb);
\r
158 #endif /* #ifndef _CAN_H_ */
\r