]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/CORTEX_M7_SAMV71_Xplained/libchip_samv7/include/can.h
Update version number ready for V8.2.1 release.
[freertos] / FreeRTOS / Demo / CORTEX_M7_SAMV71_Xplained / libchip_samv7 / include / can.h
1 /* ----------------------------------------------------------------------------\r
2  *         SAM Software Package License \r
3  * ----------------------------------------------------------------------------\r
4  * Copyright (c) 2011, Atmel Corporation\r
5  *\r
6  * All rights reserved.\r
7  *\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
10  *\r
11  * - Redistributions of source code must retain the above copyright notice,\r
12  * this list of conditions and the disclaimer below.\r
13  *\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
16  *\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
28  */\r
29 \r
30 /** \file\r
31  *  Definitions and prototypes for Controller Area Network (CAN)\r
32  *  peripheral operations.\r
33  */\r
34 \r
35 /** \ingroup lib_chip\r
36  *  \ingroup cand_module\r
37  *  \addtogroup can_module Working with CAN\r
38  *\r
39  *  \section Purpose\r
40  *  Interface for Controller Area Network (CAN).\r
41  *\r
42  *  \section Usage\r
43  *\r
44  *  Before CAN operation, its peripheral clock should be enabled, see\r
45  *  PMC_EnablePeripheral().\r
46  *\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
64  */\r
65 \r
66 #ifndef _CAN_H_\r
67 #define _CAN_H_\r
68 /**@{*/\r
69 \r
70 /*----------------------------------------------------------------------------\r
71  *        Headers\r
72  *----------------------------------------------------------------------------*/\r
73 \r
74 #include <stdint.h>\r
75 \r
76 /*----------------------------------------------------------------------------\r
77  *        Definitions\r
78  *----------------------------------------------------------------------------*/\r
79 \r
80 /** Number of mailboxes in a CAN controller */\r
81 #define CAN_NUM_MAILBOX     8\r
82 \r
83 /*----------------------------------------------------------------------------\r
84  *        Exported functions\r
85  *----------------------------------------------------------------------------*/\r
86 \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
96 \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
101 \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
105 \r
106 uint32_t CAN_GetTimer(Can * pCan);\r
107 uint32_t CAN_GetTimestamp(Can * pCan);\r
108 \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
112 \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
116 \r
117 void CAN_Abort(Can * pCan,uint32_t dwAborts);\r
118 void CAN_AbortMailbox(Can * pCan,uint8_t bMb);\r
119 \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
125 \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
131 \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
137 \r
138 uint32_t CAN_GetFamilyID(Can * pCan,uint8_t bMb);\r
139 \r
140 uint32_t CAN_GetMessageStatus(Can * pCan,uint8_t bMb);\r
141 \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
150 \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
156 \r
157 /**@}*/\r
158 #endif /* #ifndef _CAN_H_ */\r