doc/doxygen/html/candriver_8h-source.html
author etisserant
Mon, 02 Jul 2007 18:22:58 +0200
changeset 236 905677ed00f3
parent 215 f49e5a6b7804
child 240 34654679f262
permissions -rw-r--r--
Full preliminary implementation of TPDO transmit type:
- SYNC (N) (1-240)
- RTR only + SYNC (252)
- RTR only (253)
- EVENT, with timer and inhibit time (254 and 255)

User app have to call sendPDOevent(d) to eventually signal mapped data changes.
Callbacks added to 0x140N, TPDO comm parameters for on the fly timers values change.
TestMasterSlave updated.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>CanFestival: include/hcs12/candriver.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.1 -->
<div class="tabs">
  <ul>
    <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="dirs.html"><span>Directories</span></a></li>
  </ul></div>
<div class="tabs">
  <ul>
    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
    <li><a href="globals.html"><span>Globals</span></a></li>
  </ul></div>
<div class="nav">
<a class="el" href="dir_2209bfb26110ae52d50da4cefad5e72f.html">include</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_9b4fbd1818b4be2ef59811982235911e.html">hcs12</a></div>
<h1>candriver.h</h1><a href="candriver_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment">This file is part of CanFestival, a library implementing CanOpen Stack. </span>
<a name="l00003"></a>00003 <span class="comment"></span>
<a name="l00004"></a>00004 <span class="comment">Copyright (C): Edouard TISSERANT and Francis DUPIN</span>
<a name="l00005"></a>00005 <span class="comment"></span>
<a name="l00006"></a>00006 <span class="comment">See COPYING file for copyrights details.</span>
<a name="l00007"></a>00007 <span class="comment"></span>
<a name="l00008"></a>00008 <span class="comment">This library is free software; you can redistribute it and/or</span>
<a name="l00009"></a>00009 <span class="comment">modify it under the terms of the GNU Lesser General Public</span>
<a name="l00010"></a>00010 <span class="comment">License as published by the Free Software Foundation; either</span>
<a name="l00011"></a>00011 <span class="comment">version 2.1 of the License, or (at your option) any later version.</span>
<a name="l00012"></a>00012 <span class="comment"></span>
<a name="l00013"></a>00013 <span class="comment">This library is distributed in the hope that it will be useful,</span>
<a name="l00014"></a>00014 <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00015"></a>00015 <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
<a name="l00016"></a>00016 <span class="comment">Lesser General Public License for more details.</span>
<a name="l00017"></a>00017 <span class="comment"></span>
<a name="l00018"></a>00018 <span class="comment">You should have received a copy of the GNU Lesser General Public</span>
<a name="l00019"></a>00019 <span class="comment">License along with this library; if not, write to the Free Software</span>
<a name="l00020"></a>00020 <span class="comment">Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
<a name="l00021"></a>00021 <span class="comment">*/</span>
<a name="l00022"></a>00022 
<a name="l00023"></a>00023 <span class="preprocessor">#ifndef __CANDRIVER__</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#define __CANDRIVER__</span>
<a name="l00025"></a>00025 <span class="preprocessor"></span>
<a name="l00026"></a>00026 <span class="comment">//#include DEBUG_CAN</span>
<a name="l00027"></a>00027 
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;<a class="code" href="can_8h.html">can.h</a>&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;<a class="code" href="objdictdef_8h.html">objdictdef.h</a>&gt;</span>
<a name="l00030"></a>00030 
<a name="l00031"></a>00031 
<a name="l00032"></a>00032 <span class="comment">/*</span>
<a name="l00033"></a>00033 <span class="comment">The CAN message received are stored in a fifo stack</span>
<a name="l00034"></a>00034 <span class="comment">We consider one stack for all the 5 can devices. It is a choice !</span>
<a name="l00035"></a>00035 <span class="comment">*/</span>
<a name="l00036"></a>00036 
<a name="l00037"></a>00037 <span class="comment">/* Be free to change this value */</span>
<a name="l00038"></a><a class="code" href="candriver_8h.html#604df069233e19d5960b444524a43042">00038</a> <span class="preprocessor">#define MAX_STACK_MSG_RCV 5</span>
<a name="l00039"></a>00039 <span class="preprocessor"></span>
<a name="l00040"></a>00040 <span class="comment">/* Number of incomings and outcomings CAN Line. The layer CanOpen must be</span>
<a name="l00041"></a>00041 <span class="comment">used only for ONE line CAN. But you may used one or more CAN drivers, without</span>
<a name="l00042"></a>00042 <span class="comment">a CanOpen layer.</span>
<a name="l00043"></a>00043 <span class="comment">Only 2 lines are implemented. If more lines are needed, copy void __attribute__((interrupt)) can0HdlRcv (void) to void __attribute__((interrupt)) canXHdlRcv (void) and make </span>
<a name="l00044"></a>00044 <span class="comment">changes : [0] to [x], CAN0 to CANX, etc</span>
<a name="l00045"></a>00045 <span class="comment">*/</span>
<a name="l00046"></a><a class="code" href="candriver_8h.html#08b16baaf10a1b7fb8a3569a6c0f67ff">00046</a> <span class="preprocessor">#define NB_LINE_CAN 1</span>
<a name="l00047"></a>00047 <span class="preprocessor"></span>
<a name="l00048"></a>00048 <span class="comment">/* Whose hardware HCS12 CAN block is used for CanOpen ? Chose between CAN0, ..., CAN4</span>
<a name="l00049"></a>00049 <span class="comment">If you use CANOPEN_LINE_NUMBER_USED = CANI, the value of NB_LINE_CAN must be</span>
<a name="l00050"></a>00050 <span class="comment">more or equal to I + 1</span>
<a name="l00051"></a>00051 <span class="comment">Value other than CAN0 not tested, but should work fine.</span>
<a name="l00052"></a>00052 <span class="comment"> */</span>
<a name="l00053"></a><a class="code" href="candriver_8h.html#aec12501ba547723b21fd74636ea045a">00053</a> <span class="preprocessor">#define CANOPEN_LINE_NUMBER_USED CAN0</span>
<a name="l00054"></a>00054 <span class="preprocessor"></span>
<a name="l00055"></a>00055 <span class="comment">/* Stack of received messages </span>
<a name="l00056"></a>00056 <span class="comment">MSG received on CAN0 module is stored in stackMsgRcv[0], etc</span>
<a name="l00057"></a>00057 <span class="comment">*/</span>
<a name="l00058"></a>00058 <span class="keyword">extern</span> <span class="keyword">volatile</span> <a class="code" href="structMessage.html">Message</a> <a class="code" href="candriver_8h.html#1858449b5bfa9aa019aa643f8453d1c8">stackMsgRcv</a>[<a class="code" href="candriver_8h.html#08b16baaf10a1b7fb8a3569a6c0f67ff">NB_LINE_CAN</a>][<a class="code" href="candriver_8h.html#604df069233e19d5960b444524a43042">MAX_STACK_MSG_RCV</a>];
<a name="l00059"></a>00059 
<a name="l00060"></a>00060 
<a name="l00061"></a>00061 <span class="comment">/* Copy from the stack of the message to treat */</span>
<a name="l00062"></a>00062 <span class="keyword">extern</span> <a class="code" href="structMessage.html">Message</a> <a class="code" href="candriver_8h.html#54c57753f0e749e7ca14315c745bc8d9">msgRcv</a>;
<a name="l00063"></a>00063 
<a name="l00064"></a>00064 
<a name="l00065"></a>00065 <span class="comment">/* To move on the stack of messages </span>
<a name="l00066"></a>00066 <span class="comment"> */</span>
<a name="l00067"></a><a class="code" href="structt__pointerStack.html">00067</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00068"></a><a class="code" href="structt__pointerStack.html#2932da8af07722bab7bb70042bca9e55">00068</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> w ; <span class="comment">/* received */</span>
<a name="l00069"></a><a class="code" href="structt__pointerStack.html#828854582cfd2d911935d50deec2f89e">00069</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> r ; <span class="comment">/* To transmit */</span>
<a name="l00070"></a>00070 } <a class="code" href="structt__pointerStack.html">t_pointerStack</a>;
<a name="l00071"></a>00071 
<a name="l00072"></a>00072 
<a name="l00073"></a>00073 <span class="comment">/* Pointer for write or read a message in/from the reception stack */</span>
<a name="l00074"></a>00074 <span class="keyword">extern</span> <span class="keyword">volatile</span> <a class="code" href="structt__pointerStack.html">t_pointerStack</a> <a class="code" href="candriver_8h.html#509b5bc79f44e93ccb86d970a3aab01c">ptrMsgRcv</a>[<a class="code" href="candriver_8h.html#08b16baaf10a1b7fb8a3569a6c0f67ff">NB_LINE_CAN</a>];
<a name="l00075"></a>00075 
<a name="l00076"></a>00076 <span class="comment">/* </span>
<a name="l00077"></a>00077 <span class="comment">Parameters to define the  clock system for the CAN bus</span>
<a name="l00078"></a>00078 <span class="comment">example : </span>
<a name="l00079"></a>00079 <span class="comment">CAN_BUS_TIME clk = {</span>
<a name="l00080"></a>00080 <span class="comment">      1,  // clksrc: Use the bus clock : 16 MHz, the freq. of the quartz's board        </span>
<a name="l00081"></a>00081 <span class="comment">      0,  // brp :  chose btw 0 and 63 (6 bits).  freq time quantum = 16MHz / (brp + 1) </span>
<a name="l00082"></a>00082 <span class="comment">      1,  // sjw : chose btw 0 and 3 (2 bits). Sync on (sjw + 1 ) time quantum          </span>
<a name="l00083"></a>00083 <span class="comment">      1,  // samp : chose btw 0 and 3 (2 bits) (samp + 1 ) samples per bit              </span>
<a name="l00084"></a>00084 <span class="comment">      4,  // tseg2 : chose btw 0 and 7 (3 bits) Segment 2 width = (tseg2 + 1)  tq       </span>
<a name="l00085"></a>00085 <span class="comment">      9,  // tseg1 : chose btw 0 and 15 (4 bits) Segment 1 width = (tseg1 + 1)  tq      </span>
<a name="l00086"></a>00086 <span class="comment"></span>
<a name="l00087"></a>00087 <span class="comment">      </span>
<a name="l00088"></a>00088 <span class="comment">      With these values, </span>
<a name="l00089"></a>00089 <span class="comment">      - The width of the bit time is 16 time quantum :</span>
<a name="l00090"></a>00090 <span class="comment">          - 1 tq for the SYNC segment (could not be modified)</span>
<a name="l00091"></a>00091 <span class="comment">          - 10 tq for the TIME 1 segment (tseg1 = 9)</span>
<a name="l00092"></a>00092 <span class="comment">          - 5 tq for the TIME 2 segment (tseg2 = 4)</span>
<a name="l00093"></a>00093 <span class="comment">      - Because the bus clock of the MSCAN is 16 MHZ, and the </span>
<a name="l00094"></a>00094 <span class="comment">        freq of the time quantum is 16 MHZ (brp = 0), and  there are 16 tq in the bit time,</span>
<a name="l00095"></a>00095 <span class="comment">        so the freq of the bit time is 1 MHz.</span>
<a name="l00096"></a>00096 <span class="comment">      </span>
<a name="l00097"></a>00097 <span class="comment">  };</span>
<a name="l00098"></a>00098 <span class="comment">*/</span>
<a name="l00099"></a><a class="code" href="structcanBusTime.html">00099</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00100"></a><a class="code" href="structcanBusTime.html#04e7cf483b29918f0da5c562400e6071">00100</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  clksrc;     <span class="comment">/* use of internal clock  or clock bus        */</span>
<a name="l00101"></a><a class="code" href="structcanBusTime.html#f2230f4eeb1d12dd051e7f6369cb1ebb">00101</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  brp;        <span class="comment">/* define the bus speed                       */</span>
<a name="l00102"></a><a class="code" href="structcanBusTime.html#deeefef09ef47dba2df92b45e563368f">00102</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  sjw;        <span class="comment">/* Number of time quantum for synchro - 1     */</span>
<a name="l00103"></a><a class="code" href="structcanBusTime.html#a14822cbe84c152c1c79901f0c4fd0f1">00103</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  samp;       <span class="comment">/* Number of sample per bit (1 or 3)          */</span>
<a name="l00104"></a><a class="code" href="structcanBusTime.html#7bafebcf05024a19e463f29b1c09c390">00104</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  tseg2;      <span class="comment">/* Width of the time segment 2 (in tq) - 1    */</span>
<a name="l00105"></a><a class="code" href="structcanBusTime.html#3532d6d7cd2b1f3980b82dfce78f0fe9">00105</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  tseg1;      <span class="comment">/* Width of the time segment 1 (in tq) - 1    */</span>
<a name="l00106"></a>00106 } <a class="code" href="structcanBusTime.html">canBusTime</a>;
<a name="l00107"></a>00107 
<a name="l00108"></a>00108 <span class="comment">/* </span>
<a name="l00109"></a>00109 <span class="comment">Parameters to init the filters for received messages</span>
<a name="l00110"></a>00110 <span class="comment">*/</span>
<a name="l00111"></a><a class="code" href="structcanBusFilterInit.html">00111</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00112"></a><a class="code" href="structcanBusFilterInit.html#bd65e55b40839cc85917717124ba8ff7">00112</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  idam;        <span class="comment">/* Put 0x01 for 16 bits acceptance filter    */</span>
<a name="l00113"></a><a class="code" href="structcanBusFilterInit.html#e73e4472088781055b2c634529a6c91e">00113</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidar0;
<a name="l00114"></a><a class="code" href="structcanBusFilterInit.html#73219612204df8b0eece12ebf4fbb491">00114</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidmr0;
<a name="l00115"></a><a class="code" href="structcanBusFilterInit.html#c78d28e662944187916a14991d118dda">00115</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidar1;
<a name="l00116"></a><a class="code" href="structcanBusFilterInit.html#612d35c1dda338351f6da31935ff95fd">00116</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidmr1; 
<a name="l00117"></a><a class="code" href="structcanBusFilterInit.html#a16d44afd060e1c3ebf5cf66b2e8f9c4">00117</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidar2;
<a name="l00118"></a><a class="code" href="structcanBusFilterInit.html#c5f7826dc1ec90e292f04ab1cb073a38">00118</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidmr2;
<a name="l00119"></a><a class="code" href="structcanBusFilterInit.html#0fd991a6f82c304f53acf589d4057133">00119</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidar3;
<a name="l00120"></a><a class="code" href="structcanBusFilterInit.html#b4edcd131fa7b019f6dff0c1a5b68ce3">00120</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidmr3;
<a name="l00121"></a><a class="code" href="structcanBusFilterInit.html#083024dc3a47331c1d8914d863fa6d87">00121</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidar4;
<a name="l00122"></a><a class="code" href="structcanBusFilterInit.html#a8615d16f68111163e5175543135b896">00122</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidmr4;
<a name="l00123"></a><a class="code" href="structcanBusFilterInit.html#8498a6166aa348baa5d5cc32e07bffb9">00123</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidar5;
<a name="l00124"></a><a class="code" href="structcanBusFilterInit.html#5f0904c30b658b4a4ad59a8414df2e93">00124</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidmr5; 
<a name="l00125"></a><a class="code" href="structcanBusFilterInit.html#2194ca3ae6d6613b4f9a0db939661f0b">00125</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidar6;
<a name="l00126"></a><a class="code" href="structcanBusFilterInit.html#590926f6af0adac2fdce41d43d77fc61">00126</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidmr6;
<a name="l00127"></a><a class="code" href="structcanBusFilterInit.html#5c00e7405a498d9eb55816573f12c125">00127</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidar7;
<a name="l00128"></a><a class="code" href="structcanBusFilterInit.html#cde13291ed4cd72f9818efeb50a254fd">00128</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  canidmr7;  
<a name="l00129"></a>00129 } <a class="code" href="structcanBusFilterInit.html">canBusFilterInit</a>;
<a name="l00130"></a>00130 
<a name="l00131"></a>00131 <span class="comment">/*</span>
<a name="l00132"></a>00132 <span class="comment">Parameters to init MSCAN</span>
<a name="l00133"></a>00133 <span class="comment">Example</span>
<a name="l00134"></a>00134 <span class="comment">CAN_BUS_INIT bi = {</span>
<a name="l00135"></a>00135 <span class="comment">    0,     no low power                  </span>
<a name="l00136"></a>00136 <span class="comment">    0,     no time stamp                </span>
<a name="l00137"></a>00137 <span class="comment">    1,     enable MSCAN                 </span>
<a name="l00138"></a>00138 <span class="comment">    0,     clock source : oscillator    </span>
<a name="l00139"></a>00139 <span class="comment">    0,     no loop back                 </span>
<a name="l00140"></a>00140 <span class="comment">    0,     no listen only               </span>
<a name="l00141"></a>00141 <span class="comment">    0,     no low pass filter for wk up </span>
<a name="l00142"></a>00142 <span class="comment">    {</span>
<a name="l00143"></a>00143 <span class="comment">      1,       Use the oscillator clock                         </span>
<a name="l00144"></a>00144 <span class="comment">      0,       Quartz oscillator : freq time quantum =  freq oscillator clock / (0 + 1)</span>
<a name="l00145"></a>00145 <span class="comment">      1,       Sync on (1 + 1) time quantum                            </span>
<a name="l00146"></a>00146 <span class="comment">      1,       1 sample per bit                                  </span>
<a name="l00147"></a>00147 <span class="comment">      4,       time segment 2 width : (4 + 1) tq                     </span>
<a name="l00148"></a>00148 <span class="comment">      9,       time segment 1 width : (9 + 1) tq                     </span>
<a name="l00149"></a>00149 <span class="comment">    }</span>
<a name="l00150"></a>00150 <span class="comment">  };   </span>
<a name="l00151"></a>00151 <span class="comment">*/</span>
<a name="l00152"></a>00152 
<a name="l00153"></a><a class="code" href="structcanBusInit.html">00153</a> <span class="keyword">typedef</span> <span class="keyword">struct </span>{
<a name="l00154"></a><a class="code" href="structcanBusInit.html#28a919ea372601ea997ffd7665a31300">00154</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  cswai;      <span class="comment">/* Low power/normal in wait mode   (1/0)      */</span>
<a name="l00155"></a><a class="code" href="structcanBusInit.html#85a64136e89c9106116e635487c8dbf8">00155</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  time;       <span class="comment">/* Timer for time-stamp enable/disable (1/0)  */</span>
<a name="l00156"></a><a class="code" href="structcanBusInit.html#89208e27db0d71c7b4c34b396d8e4494">00156</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  cane;       <span class="comment">/* Enable MSCAN (yes=1) Do it !               */</span>
<a name="l00157"></a><a class="code" href="structcanBusInit.html#15fa5be003dd5961e7926d75bd405058">00157</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  clksrc;     <span class="comment">/* clock source bus/oscillator (1/0)          */</span>
<a name="l00158"></a><a class="code" href="structcanBusInit.html#b12f39cd4161fdc5ad130b4bb8e4a484">00158</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  loopb;      <span class="comment">/* loop back mode for test (yes=1/no=0)       */</span>
<a name="l00159"></a><a class="code" href="structcanBusInit.html#9b6d43ba9be72e1f21e234d50a1676d6">00159</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  listen;     <span class="comment">/* MSCAN is listen only (yes=1/no=0 ie normal)*/</span>
<a name="l00160"></a><a class="code" href="structcanBusInit.html#ae0d3c3a91c165a0d782ff40be2e8e29">00160</a>   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  wupm;       <span class="comment">/* low pas filter for wake up (yes=1/no=0)    */</span>
<a name="l00161"></a>00161   <a class="code" href="structcanBusTime.html">canBusTime</a> 
<a name="l00162"></a><a class="code" href="structcanBusInit.html#fc9eb7ca2f89001dca552e3f956beb73">00162</a>         clk;        <span class="comment">/* Values for clock system init               */</span>
<a name="l00163"></a>00163   <a class="code" href="structcanBusFilterInit.html">canBusFilterInit</a>
<a name="l00164"></a><a class="code" href="structcanBusInit.html#ea84b860ae3e0e636b78d1c83e916ea0">00164</a>   fi;               <span class="comment">/* Values for filter acceptance msg init      */</span>
<a name="l00165"></a>00165   
<a name="l00166"></a>00166 } <a class="code" href="structcanBusInit.html">canBusInit</a>;
<a name="l00167"></a>00167 
<a name="l00168"></a>00168 <span class="keyword">extern</span> <a class="code" href="structcanBusInit.html">canBusInit</a> <a class="code" href="candriver_8h.html#c731fd3e22e0f2c414b1e3f511c85423">bi</a>;
<a name="l00169"></a>00169 
<a name="l00170"></a>00170 
<a name="l00171"></a>00171 
<a name="l00172"></a>00172 <span class="comment">/*</span>
<a name="l00173"></a>00173 <span class="comment">For the received messsage, add a Identificator to</span>
<a name="l00174"></a>00174 <span class="comment">the list of ID to accept.</span>
<a name="l00175"></a>00175 <span class="comment">You can use several times this function to accept several messages.</span>
<a name="l00176"></a>00176 <span class="comment">It configures registers on 16 bits.</span>
<a name="l00177"></a>00177 <span class="comment">Automatically, it configure the filter to</span>
<a name="l00178"></a>00178 <span class="comment">- not accepting the msg on 29 bits (ide=1 refused)</span>
<a name="l00179"></a>00179 <span class="comment">- not filtering on rtr state (rtr = 1 and rtr = 0 are accepted)</span>
<a name="l00180"></a>00180 <span class="comment">Algo :</span>
<a name="l00181"></a>00181 <span class="comment">if CANIDARx = 0 then  CANIDARx = id . else do nothing</span>
<a name="l00182"></a>00182 <span class="comment">CANIDMRx = CANIDMRx OR (CANIDARx XOR id )</span>
<a name="l00183"></a>00183 <span class="comment">nFilter : 0 to 3</span>
<a name="l00184"></a>00184 <span class="comment">Must be in init mode before.</span>
<a name="l00185"></a>00185 <span class="comment">*/</span>
<a name="l00186"></a>00186 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#acfd181d5b055d1403930442e28ac643">canAddIdToFilter</a> (
<a name="l00187"></a>00187                        <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN,
<a name="l00188"></a>00188                        <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> nFilter,
<a name="l00189"></a>00189                        <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> <span class="keywordtype">id</span> <span class="comment">/* 11 bits, the 5 msb not used */</span>
<a name="l00190"></a>00190                        );
<a name="l00191"></a>00191 
<a name="l00192"></a>00192 <span class="comment">/*</span>
<a name="l00193"></a>00193 <span class="comment"> Use this function to change the CAN message acceptance filters and masks.</span>
<a name="l00194"></a>00194 <span class="comment"> */</span>
<a name="l00195"></a>00195 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#751a41c9747b96ab400b5599370cea83">canChangeFilter</a> (<a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN, <a class="code" href="structcanBusFilterInit.html">canBusFilterInit</a> fi);
<a name="l00196"></a>00196 
<a name="l00197"></a>00197 
<a name="l00198"></a>00198 <span class="comment">/*</span>
<a name="l00199"></a>00199 <span class="comment">Enable one of the 5 MSCAN.</span>
<a name="l00200"></a>00200 <span class="comment">Must be done only one time after a reset of the CPU.</span>
<a name="l00201"></a>00201 <span class="comment">To do before any CAN initialisation</span>
<a name="l00202"></a>00202 <span class="comment">*/</span>
<a name="l00203"></a>00203 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#5a53a89d2e348d70331e6ebe269d155a">canEnable</a> (
<a name="l00204"></a>00204                 <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN <span class="comment">/* First address of MSCANx registers */</span>
<a name="l00205"></a>00205                 );
<a name="l00206"></a>00206 
<a name="l00207"></a>00207 
<a name="l00208"></a>00208 <span class="comment">/* </span>
<a name="l00209"></a>00209 <span class="comment">Initialize one of the 5 mscan</span>
<a name="l00210"></a>00210 <span class="comment">can be done multiple times in your code</span>
<a name="l00211"></a>00211 <span class="comment">Return 0 : OK</span>
<a name="l00212"></a>00212 <span class="comment">When it return from the function,</span>
<a name="l00213"></a>00213 <span class="comment">mscan is on sleep mode with wake up disabled.</span>
<a name="l00214"></a>00214 <span class="comment">      is not on init mode</span>
<a name="l00215"></a>00215 <span class="comment">*/</span>
<a name="l00216"></a>00216 <span class="keywordtype">char</span> <a class="code" href="can__peak__win32_8c.html#9f623ce2d3a68e90dfdb1ff0d54a9b57">canInit</a> (
<a name="l00217"></a>00217               <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN,   <span class="comment">/* First address of MSCANx registers  */</span>
<a name="l00218"></a>00218               <a class="code" href="structcanBusInit.html">canBusInit</a> 
<a name="l00219"></a>00219               bi       <span class="comment">/* All the parameters to init the bus */</span>
<a name="l00220"></a>00220               );
<a name="l00221"></a>00221 <span class="comment">/*</span>
<a name="l00222"></a>00222 <span class="comment">Initialize the parameters of the system clock for the MSCAN</span>
<a name="l00223"></a>00223 <span class="comment">You must put the MSCAN in sleep mode before with canSleepMode()</span>
<a name="l00224"></a>00224 <span class="comment">Return 0 : OK</span>
<a name="l00225"></a>00225 <span class="comment">       1 : Not in sleep mode. Unable to init MSCAN </span>
<a name="l00226"></a>00226 <span class="comment">*/</span>
<a name="l00227"></a>00227 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#6ec3ce6d79012dd8a08fa5aeb6a0489f">canInitClock</a> (
<a name="l00228"></a>00228                    <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN, <span class="comment">/* First address of MSCANx registers */</span>
<a name="l00229"></a>00229                    <a class="code" href="structcanBusTime.html">canBusTime</a> clk);
<a name="l00230"></a>00230 
<a name="l00231"></a>00231 <span class="comment">/* </span>
<a name="l00232"></a>00232 <span class="comment">Initialize one filter for acceptance of received msg.</span>
<a name="l00233"></a>00233 <span class="comment">Filters MUST be configured on 16 bits </span>
<a name="l00234"></a>00234 <span class="comment">(See doc Motorola mscan bloc guide fig 4.3)</span>
<a name="l00235"></a>00235 <span class="comment">Must be in init mode before.</span>
<a name="l00236"></a>00236 <span class="comment">adrCAN  : adress of the first register of the mscan module</span>
<a name="l00237"></a>00237 <span class="comment">nFilter : the filter : 0 to 3.</span>
<a name="l00238"></a>00238 <span class="comment">ar : Value to write in acceptance register</span>
<a name="l00239"></a>00239 <span class="comment">     Beware ! hight byte and low byte inverted.</span>
<a name="l00240"></a>00240 <span class="comment">     for example if nFilter = 0, hight byte of ar -&gt; CANIDAR0</span>
<a name="l00241"></a>00241 <span class="comment">                                 low   byte of ar -&gt; CANIDAR1</span>
<a name="l00242"></a>00242 <span class="comment">mr : Value to write in mask register</span>
<a name="l00243"></a>00243 <span class="comment">     Beware ! hight byte and low byte inverted.</span>
<a name="l00244"></a>00244 <span class="comment">     for example if nFilter = 2, hight byte of ar -&gt; CANIDMR4</span>
<a name="l00245"></a>00245 <span class="comment">                                 low   byte of ar -&gt; CANIDMR5</span>
<a name="l00246"></a>00246 <span class="comment">*/</span>
<a name="l00247"></a>00247 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#5fb549697afb7918607aa113e01c543d">canInit1Filter</a> (
<a name="l00248"></a>00248                      <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN, 
<a name="l00249"></a>00249                      <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> nFilter,
<a name="l00250"></a>00250                      <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> ar,
<a name="l00251"></a>00251                      <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> mr
<a name="l00252"></a>00252                      );
<a name="l00253"></a>00253 
<a name="l00254"></a>00254 <span class="comment">/*</span>
<a name="l00255"></a>00255 <span class="comment">Initialise the parameters for filtering the messages received.</span>
<a name="l00256"></a>00256 <span class="comment">You must put the MSCAN in init mode before with canInitMode()</span>
<a name="l00257"></a>00257 <span class="comment">Return 0 : OK</span>
<a name="l00258"></a>00258 <span class="comment">       1 : Not in init mode. Unable to init MSCAN </span>
<a name="l00259"></a>00259 <span class="comment">*/</span>
<a name="l00260"></a>00260 
<a name="l00261"></a>00261 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#b4502eef7616b25c74b1ac5a2245b085">canInitFilter</a> (
<a name="l00262"></a>00262                     <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN, <span class="comment">/* First address of MSCANx registers */</span>
<a name="l00263"></a>00263                     <a class="code" href="structcanBusFilterInit.html">canBusFilterInit</a> fi);
<a name="l00264"></a>00264 <span class="comment">/*</span>
<a name="l00265"></a>00265 <span class="comment">Put one of the 5 mscan in Init mode</span>
<a name="l00266"></a>00266 <span class="comment">Loop until init mode is reached.</span>
<a name="l00267"></a>00267 <span class="comment">*/</span>
<a name="l00268"></a>00268 
<a name="l00269"></a>00269 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#0b98e4800c82d99981833aa4207f1eb9">canInitMode</a> (
<a name="l00270"></a>00270                   <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN <span class="comment">/* First address of MSCANx registers */</span>
<a name="l00271"></a>00271                   );    
<a name="l00272"></a>00272 
<a name="l00273"></a>00273 <span class="comment">/*</span>
<a name="l00274"></a>00274 <span class="comment">Leave the Init mode</span>
<a name="l00275"></a>00275 <span class="comment">loop until init mode leaved.</span>
<a name="l00276"></a>00276 <span class="comment">*/</span>
<a name="l00277"></a>00277 
<a name="l00278"></a>00278 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#00ffb46abacfdfa56ebc70e15164113e">canInitModeQ</a> (
<a name="l00279"></a>00279                    <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN <span class="comment">/* First address of MSCANx registers */</span>
<a name="l00280"></a>00280                    );
<a name="l00281"></a>00281 
<a name="l00282"></a>00282 
<a name="l00283"></a>00283 
<a name="l00284"></a>00284 <span class="comment">/*</span>
<a name="l00285"></a>00285 <span class="comment">Transmit a msg on CAN "adrCan"</span>
<a name="l00286"></a>00286 <span class="comment">Return : 0      No error</span>
<a name="l00287"></a>00287 <span class="comment">         other  error : no buffer available to make the transmission</span>
<a name="l00288"></a>00288 <span class="comment">*/</span>      
<a name="l00289"></a>00289 
<a name="l00290"></a>00290 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#2f2d1ed55cfd9d7f85883f8d70d318ba">canMsgTransmit</a> (
<a name="l00291"></a>00291                      <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN,  <span class="comment">/* First address of MSCANx registers */</span>
<a name="l00292"></a>00292                      <a class="code" href="structMessage.html">Message</a> msg  <span class="comment">/* Message to transmit                */</span>
<a name="l00293"></a>00293                      );
<a name="l00294"></a>00294 
<a name="l00295"></a>00295 <span class="comment">/*</span>
<a name="l00296"></a>00296 <span class="comment"> Set the interruptions. Must be call just after having left the init mode.</span>
<a name="l00297"></a>00297 <span class="comment"> */</span>          
<a name="l00298"></a>00298 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#5ad8616a3276f7f40149b551f09aa6a1">canSetInterrupt</a> (<a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN);                 
<a name="l00299"></a>00299 
<a name="l00300"></a>00300 <span class="comment">/*</span>
<a name="l00301"></a>00301 <span class="comment">Put one of the 5 mscan in sleep mode</span>
<a name="l00302"></a>00302 <span class="comment">Beware! If some messages are to be sent,</span>
<a name="l00303"></a>00303 <span class="comment">or if it is receiving, going into sleep mode</span>
<a name="l00304"></a>00304 <span class="comment">may take time.</span>
<a name="l00305"></a>00305 <span class="comment">Wake up is disabled : stay in sleep mode even if</span>
<a name="l00306"></a>00306 <span class="comment">bus traffic detected.</span>
<a name="l00307"></a>00307 <span class="comment">return 0 if 0K, other if error : mscan is on init mode.</span>
<a name="l00308"></a>00308 <span class="comment">Stay in this function until the sleep mode</span>
<a name="l00309"></a>00309 <span class="comment">is reached.</span>
<a name="l00310"></a>00310 <span class="comment">*/</span>
<a name="l00311"></a>00311 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#c7773223579ec7e0fab5238df214da89">canSleepMode</a> (
<a name="l00312"></a>00312                    <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN <span class="comment">/* First address of MSCANx registers */</span>
<a name="l00313"></a>00313                    );   
<a name="l00314"></a>00314 
<a name="l00315"></a>00315 <span class="comment">/*</span>
<a name="l00316"></a>00316 <span class="comment">Leave the sleep mode</span>
<a name="l00317"></a>00317 <span class="comment">loop until sleep mode leaved.</span>
<a name="l00318"></a>00318 <span class="comment">return 0 : OK</span>
<a name="l00319"></a>00319 <span class="comment">return 1 : error : in init mode</span>
<a name="l00320"></a>00320 <span class="comment">*/</span>
<a name="l00321"></a>00321 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#a89f28005eea54f5b216eb72a18d45f3">canSleepModeQ</a> (
<a name="l00322"></a>00322                     <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN <span class="comment">/* First address of MSCANx registers */</span>
<a name="l00323"></a>00323                     );  
<a name="l00324"></a>00324 
<a name="l00325"></a>00325 <span class="comment">/*</span>
<a name="l00326"></a>00326 <span class="comment">Put one of the 5 mscan in sleep mode</span>
<a name="l00327"></a>00327 <span class="comment">MSCAN must not be in init mode.</span>
<a name="l00328"></a>00328 <span class="comment">wake up is enabled : wake up if traffic on CAN is detected</span>
<a name="l00329"></a>00329 <span class="comment">Beware! If some messages are to be sent,</span>
<a name="l00330"></a>00330 <span class="comment">or if it is receiving, going into sleep mode</span>
<a name="l00331"></a>00331 <span class="comment">may take time.</span>
<a name="l00332"></a>00332 <span class="comment">Loop until sleep mode reached.</span>
<a name="l00333"></a>00333 <span class="comment">return 0 if 0K, other if error</span>
<a name="l00334"></a>00334 <span class="comment">*/</span>
<a name="l00335"></a>00335 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#1ae1ad5d66ac87085baf5b9d0a4e62ca">canSleepWupMode</a> (
<a name="l00336"></a>00336                       <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN <span class="comment">/* First address of MSCANx registers */</span>
<a name="l00337"></a>00337                       );        
<a name="l00338"></a>00338 
<a name="l00339"></a>00339 <span class="comment">/*</span>
<a name="l00340"></a>00340 <span class="comment">Test if one of the 5 mscan is in init mode.</span>
<a name="l00341"></a>00341 <span class="comment">Return </span>
<a name="l00342"></a>00342 <span class="comment">       0     -&gt; Not in init mode</span>
<a name="l00343"></a>00343 <span class="comment">       other -&gt; In init mode</span>
<a name="l00344"></a>00344 <span class="comment">*/</span>
<a name="l00345"></a>00345 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#6beefe951b3c9de786c585257488fa82">canTestInitMode</a> (
<a name="l00346"></a>00346                       <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN <span class="comment">/* First address of MSCANx registers */</span>
<a name="l00347"></a>00347                       );   
<a name="l00348"></a>00348 
<a name="l00349"></a>00349 <span class="comment">/*</span>
<a name="l00350"></a>00350 <span class="comment">Test if one of the 5 mscan is in sleep mode.</span>
<a name="l00351"></a>00351 <span class="comment">Return </span>
<a name="l00352"></a>00352 <span class="comment">       0     -&gt; Not in sleep mode</span>
<a name="l00353"></a>00353 <span class="comment">       other -&gt; In sleep mode</span>
<a name="l00354"></a>00354 <span class="comment">*/</span>
<a name="l00355"></a>00355 <span class="keywordtype">char</span> <a class="code" href="canOpenDriver_8c.html#fa79f2ac95a8143c2fb087260df39820">canTestSleepMode</a> (
<a name="l00356"></a>00356                        <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> adrCAN <span class="comment">/* First address of MSCANx registers */</span>
<a name="l00357"></a>00357                        );   
<a name="l00358"></a>00358 
<a name="l00359"></a>00359 
<a name="l00360"></a>00360 
<a name="l00361"></a>00361 <span class="preprocessor">#endif </span><span class="comment">/*__CANDRIVER__*/</span>
<a name="l00362"></a>00362 
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Jun 8 08:51:39 2007 for CanFestival by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address>
</body>
</html>