include/hcs12/candriver.h
author dejoigny
Tue, 16 May 2006 17:18:56 +0200
changeset 6 8038ced64796
parent 0 4472ee7c6c3e
child 7 126e37bcca0f
permissions -rw-r--r--
pas de debogue
0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     1
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     2
This file is part of CanFestival, a library implementing CanOpen Stack. 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     3
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     4
Copyright (C): Edouard TISSERANT and Francis DUPIN
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     5
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     6
See COPYING file for copyrights details.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     7
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     8
This library is free software; you can redistribute it and/or
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
     9
modify it under the terms of the GNU Lesser General Public
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    10
License as published by the Free Software Foundation; either
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    11
version 2.1 of the License, or (at your option) any later version.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    12
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    13
This library is distributed in the hope that it will be useful,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    14
but WITHOUT ANY WARRANTY; without even the implied warranty of
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    16
Lesser General Public License for more details.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    17
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    18
You should have received a copy of the GNU Lesser General Public
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    19
License along with this library; if not, write to the Free Software
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    20
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    21
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    22
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    23
#ifndef __CANDRIVER__
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    24
#define __CANDRIVER__
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    25
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    26
//#include DEBUG_CAN
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    27
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    28
#include <can.h>
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    29
#include <objdictdef.h>
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    30
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    31
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    32
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    33
The CAN message received are stored in a fifo stack
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    34
We consider one stack for all the 5 can devices. It is a choice !
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    35
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    36
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    37
/* Be free to change this value */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    38
#define MAX_STACK_MSG_RCV 5
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    39
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    40
/* Number of incomings and outcomings CAN Line. The layer CanOpen must be
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    41
used only for ONE line CAN. But you may used one or more CAN drivers, without
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    42
a CanOpen layer.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    43
Only 2 lines are implemented. If more lines are needed, copy void __attribute__((interrupt)) can0HdlRcv (void) to void __attribute__((interrupt)) canXHdlRcv (void) and make 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    44
changes : [0] to [x], CAN0 to CANX, etc
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    45
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    46
#define NB_LINE_CAN 1
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    47
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    48
/* Whose hardware HCS12 CAN block is used for CanOpen ? Chose between CAN0, ..., CAN4
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    49
If you use CANOPEN_LINE_NUMBER_USED = CANI, the value of NB_LINE_CAN must be
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    50
more or equal to I + 1
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    51
Value other than CAN0 not tested, but should work fine.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    52
 */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    53
#define CANOPEN_LINE_NUMBER_USED CAN0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    54
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    55
/* Stack of received messages 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    56
MSG received on CAN0 module is stored in stackMsgRcv[0], etc
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    57
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    58
extern volatile Message stackMsgRcv[NB_LINE_CAN][MAX_STACK_MSG_RCV];
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    59
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    60
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    61
/* Copy from the stack of the message to treat */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    62
extern Message msgRcv;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    63
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    64
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    65
/* To move on the stack of messages 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    66
 */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    67
typedef struct {
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    68
  UNS8 w ; /* received */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    69
  UNS8 r ; /* To transmit */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    70
} t_pointerStack;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    71
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    72
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    73
/* Pointer for write or read a message in/from the reception stack */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    74
extern volatile t_pointerStack ptrMsgRcv[NB_LINE_CAN];
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    75
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    76
/* 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    77
Parameters to define the  clock system for the CAN bus
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    78
example : 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    79
CAN_BUS_TIME clk = {
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    80
      1,  // clksrc: Use the bus clock : 16 MHz, the freq. of the quartz's board        
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    81
      0,  // brp :  chose btw 0 and 63 (6 bits).  freq time quantum = 16MHz / (brp + 1) 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    82
      1,  // sjw : chose btw 0 and 3 (2 bits). Sync on (sjw + 1 ) time quantum          
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    83
      1,  // samp : chose btw 0 and 3 (2 bits) (samp + 1 ) samples per bit              
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    84
      4,  // tseg2 : chose btw 0 and 7 (3 bits) Segment 2 width = (tseg2 + 1)  tq       
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    85
      9,  // tseg1 : chose btw 0 and 15 (4 bits) Segment 1 width = (tseg1 + 1)  tq      
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    86
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    87
      
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    88
      With these values, 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    89
      - The width of the bit time is 16 time quantum :
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    90
          - 1 tq for the SYNC segment (could not be modified)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    91
          - 10 tq for the TIME 1 segment (tseg1 = 9)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    92
          - 5 tq for the TIME 2 segment (tseg2 = 4)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    93
      - Because the bus clock of the MSCAN is 16 MHZ, and the 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    94
        freq of the time quantum is 16 MHZ (brp = 0), and  there are 16 tq in the bit time,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    95
        so the freq of the bit time is 1 MHz.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    96
      
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    97
  };
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    98
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
    99
typedef struct {
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   100
  UNS8  clksrc;     /* use of internal clock  or clock bus        */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   101
  UNS8  brp;        /* define the bus speed                       */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   102
  UNS8  sjw;        /* Number of time quantum for synchro - 1     */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   103
  UNS8  samp;       /* Number of sample per bit (1 or 3)          */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   104
  UNS8  tseg2;      /* Width of the time segment 2 (in tq) - 1    */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   105
  UNS8  tseg1;      /* Width of the time segment 1 (in tq) - 1    */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   106
} canBusTime;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   107
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   108
/* 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   109
Parameters to init the filters for received messages
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   110
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   111
typedef struct {
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   112
  UNS8  idam;        /* Put 0x01 for 16 bits acceptance filter    */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   113
  UNS8  canidar0;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   114
  UNS8  canidmr0;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   115
  UNS8  canidar1;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   116
  UNS8  canidmr1; 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   117
  UNS8  canidar2;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   118
  UNS8  canidmr2;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   119
  UNS8  canidar3;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   120
  UNS8  canidmr3;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   121
  UNS8  canidar4;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   122
  UNS8  canidmr4;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   123
  UNS8  canidar5;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   124
  UNS8  canidmr5; 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   125
  UNS8  canidar6;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   126
  UNS8  canidmr6;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   127
  UNS8  canidar7;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   128
  UNS8  canidmr7;  
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   129
} canBusFilterInit;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   130
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   131
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   132
Parameters to init MSCAN
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   133
Example
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   134
CAN_BUS_INIT bi = {
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   135
    0,     no low power                  
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   136
    0,     no time stamp                
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   137
    1,     enable MSCAN                 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   138
    0,     clock source : oscillator    
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   139
    0,     no loop back                 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   140
    0,     no listen only               
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   141
    0,     no low pass filter for wk up 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   142
    {
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   143
      1,       Use the oscillator clock                         
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   144
      0,       Quartz oscillator : freq time quantum =  freq oscillator clock / (0 + 1)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   145
      1,       Sync on (1 + 1) time quantum                            
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   146
      1,       1 sample per bit                                  
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   147
      4,       time segment 2 width : (4 + 1) tq                     
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   148
      9,       time segment 1 width : (9 + 1) tq                     
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   149
    }
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   150
  };   
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   151
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   152
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   153
typedef struct {
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   154
  UNS8  cswai;      /* Low power/normal in wait mode   (1/0)      */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   155
  UNS8  time;       /* Timer for time-stamp enable/disable (1/0)  */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   156
  UNS8  cane;       /* Enable MSCAN (yes=1) Do it !               */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   157
  UNS8  clksrc;     /* clock source bus/oscillator (1/0)          */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   158
  UNS8  loopb;      /* loop back mode for test (yes=1/no=0)       */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   159
  UNS8  listen;     /* MSCAN is listen only (yes=1/no=0 ie normal)*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   160
  UNS8  wupm;       /* low pas filter for wake up (yes=1/no=0)    */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   161
  canBusTime 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   162
        clk;        /* Values for clock system init               */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   163
  canBusFilterInit
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   164
  fi;               /* Values for filter acceptance msg init      */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   165
  
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   166
} canBusInit;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   167
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   168
extern canBusInit bi;
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   169
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   170
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   171
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   172
For the received messsage, add a Identificator to
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   173
the list of ID to accept.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   174
You can use several times this function to accept several messages.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   175
It configures registers on 16 bits.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   176
Automatically, it configure the filter to
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   177
- not accepting the msg on 29 bits (ide=1 refused)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   178
- not filtering on rtr state (rtr = 1 and rtr = 0 are accepted)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   179
Algo :
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   180
if CANIDARx = 0 then  CANIDARx = id . else do nothing
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   181
CANIDMRx = CANIDMRx OR (CANIDARx XOR id )
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   182
nFilter : 0 to 3
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   183
Must be in init mode before.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   184
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   185
char canAddIdToFilter (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   186
		       UNS16 adrCAN,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   187
		       UNS8 nFilter,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   188
		       UNS16 id /* 11 bits, the 5 msb not used */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   189
		       );
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   190
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   191
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   192
Enable one of the 5 MSCAN.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   193
Must be done only one time after a reset of the CPU.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   194
To do before any CAN initialisation
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   195
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   196
char canEnable (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   197
		UNS16 adrCAN /* First address of MSCANx registers */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   198
		);
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   199
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   200
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   201
/* 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   202
Initialize one of the 5 mscan
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   203
can be done multiple times in your code
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   204
Return 0 : OK
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   205
When it return from the function,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   206
mscan is on sleep mode with wake up disabled.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   207
      is not on init mode
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   208
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   209
char canInit (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   210
	      UNS16 adrCAN,   /* First address of MSCANx registers  */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   211
	      canBusInit 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   212
	      bi       /* All the parameters to init the bus */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   213
	      );
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   214
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   215
Initialize the parameters of the system clock for the MSCAN
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   216
You must put the MSCAN in sleep mode before with canSleepMode()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   217
Return 0 : OK
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   218
       1 : Not in sleep mode. Unable to init MSCAN 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   219
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   220
char canInitClock (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   221
		   UNS16 adrCAN, /* First address of MSCANx registers */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   222
		   canBusTime clk);
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   223
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   224
/* 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   225
Initialize one filter for acceptance of received msg.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   226
Filters MUST be configured on 16 bits 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   227
(See doc Motorola mscan bloc guide fig 4.3)
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   228
Must be in init mode before.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   229
adrCAN  : adress of the first register of the mscan module
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   230
nFilter : the filter : 0 to 3.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   231
ar : Value to write in acceptance register
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   232
     Beware ! hight byte and low byte inverted.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   233
     for example if nFilter = 0, hight byte of ar -> CANIDAR0
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   234
                                 low   byte of ar -> CANIDAR1
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   235
mr : Value to write in mask register
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   236
     Beware ! hight byte and low byte inverted.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   237
     for example if nFilter = 2, hight byte of ar -> CANIDMR4
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   238
                                 low   byte of ar -> CANIDMR5
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   239
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   240
char canInit1Filter (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   241
		     UNS16 adrCAN, 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   242
		     UNS8 nFilter,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   243
		     UNS16 ar,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   244
		     UNS16 mr
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   245
		     );
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   246
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   247
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   248
Initialise the parameters for filtering the messages received.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   249
You must put the MSCAN in init mode before with canInitMode()
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   250
Return 0 : OK
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   251
       1 : Not in init mode. Unable to init MSCAN 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   252
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   253
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   254
char canInitFilter (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   255
		    UNS16 adrCAN, /* First address of MSCANx registers */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   256
		    canBusFilterInit fi);
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   257
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   258
Put one of the 5 mscan in Init mode
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   259
Loop until init mode is reached.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   260
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   261
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   262
char canInitMode (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   263
		  UNS16 adrCAN /* First address of MSCANx registers */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   264
		  );	
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   265
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   266
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   267
Leave the Init mode
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   268
loop until init mode leaved.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   269
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   270
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   271
char canInitModeQ (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   272
		   UNS16 adrCAN /* First address of MSCANx registers */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   273
		   );
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   274
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   275
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   276
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   277
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   278
Transmit a msg on CAN "adrCan"
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   279
Return : 0      No error
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   280
         other  error : no buffer available to make the transmission
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   281
*/	
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   282
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   283
char canMsgTransmit (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   284
		     UNS16 adrCAN,  /* First address of MSCANx registers */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   285
		     Message msg  /* Message to transmit                */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   286
		     );
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   287
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   288
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   289
Put one of the 5 mscan in sleep mode
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   290
Beware! If some messages are to be sent,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   291
or if it is receiving, going into sleep mode
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   292
may take time.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   293
Wake up is disabled : stay in sleep mode even if
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   294
bus traffic detected.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   295
return 0 if 0K, other if error : mscan is on init mode.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   296
Stay in this function until the sleep mode
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   297
is reached.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   298
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   299
char canSleepMode (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   300
		   UNS16 adrCAN /* First address of MSCANx registers */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   301
		   );	
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   302
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   303
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   304
Leave the sleep mode
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   305
loop until sleep mode leaved.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   306
return 0 : OK
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   307
return 1 : error : in init mode
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   308
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   309
char canSleepModeQ (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   310
		    UNS16 adrCAN /* First address of MSCANx registers */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   311
		    );	
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   312
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   313
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   314
Put one of the 5 mscan in sleep mode
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   315
MSCAN must not be in init mode.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   316
wake up is enabled : wake up if traffic on CAN is detected
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   317
Beware! If some messages are to be sent,
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   318
or if it is receiving, going into sleep mode
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   319
may take time.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   320
Loop until sleep mode reached.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   321
return 0 if 0K, other if error
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   322
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   323
char canSleepWupMode (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   324
		      UNS16 adrCAN /* First address of MSCANx registers */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   325
		      );	
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   326
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   327
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   328
Test if one of the 5 mscan is in init mode.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   329
Return 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   330
       0     -> Not in init mode
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   331
       other -> In init mode
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   332
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   333
char canTestInitMode (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   334
		      UNS16 adrCAN /* First address of MSCANx registers */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   335
		      );   
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   336
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   337
/*
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   338
Test if one of the 5 mscan is in sleep mode.
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   339
Return 
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   340
       0     -> Not in sleep mode
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   341
       other -> In sleep mode
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   342
*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   343
char canTestSleepMode (
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   344
		       UNS16 adrCAN /* First address of MSCANx registers */
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   345
		       );   
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   346
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   347
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   348
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   349
#endif /*__CANDRIVER__*/
4472ee7c6c3e Commit a new cvs repo.
etisserant
parents:
diff changeset
   350