Mistake on this page?
Report an issue in GitHub or email us
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes
mbed::CAN Class Reference

#include <CAN.h>

Inheritance diagram for mbed::CAN:
mbed::NonCopyable< CAN >

Public Types

enum  Mode {
  Reset = 0, Normal, Silent, LocalTest,
  GlobalTest, SilentTest
}
 
enum  IrqType {
  RxIrq = 0, TxIrq, EwIrq, DoIrq,
  WuIrq, EpIrq, AlIrq, BeIrq,
  IdIrq, IrqCnt
}
 

Public Member Functions

 CAN (PinName rd, PinName td)
 
 CAN (PinName rd, PinName td, int hz)
 
int frequency (int hz)
 
int write (CANMessage msg)
 
int read (CANMessage &msg, int handle=0)
 
void reset ()
 
void monitor (bool silent)
 
int mode (Mode mode)
 
int filter (unsigned int id, unsigned int mask, CANFormat format=CANAny, int handle=0)
 
unsigned char rderror ()
 
unsigned char tderror ()
 
void attach (Callback< void()> func, IrqType type=RxIrq)
 
template<typename T >
void attach (T *obj, void(T::*method)(), IrqType type=RxIrq)
 
template<typename T >
void attach (T *obj, void(*method)(T *), IrqType type=RxIrq)
 

Static Public Member Functions

static void _irq_handler (uint32_t id, CanIrqType type)
 

Protected Member Functions

virtual void lock ()
 
virtual void unlock ()
 

Protected Attributes

can_t _can
 
Callback< void()> _irq [IrqCnt]
 
PlatformMutex _mutex
 

Detailed Description

A can bus client, used for communicating with can devices

Constructor & Destructor Documentation

mbed::CAN::CAN ( PinName  rd,
PinName  td 
)

Creates an CAN interface connected to specific pins.

Parameters
rdread from transmitter
tdtransmit to transmitter

Example:

#include "mbed.h"
Ticker ticker;
DigitalOut led1(LED1);
DigitalOut led2(LED2);
CAN can1(p9, p10);
CAN can2(p30, p29);
char counter = 0;
void send() {
if(can1.write(CANMessage(1337, &counter, 1))) {
printf("Message sent: %d\n", counter);
counter++;
}
led1 = !led1;
}
int main() {
ticker.attach(&send, 1);
CANMessage msg;
while(1) {
if(can2.read(msg)) {
printf("Message received: %d\n\n", msg.data[0]);
led2 = !led2;
}
wait(0.2);
}
}
mbed::CAN::CAN ( PinName  rd,
PinName  td,
int  hz 
)

Initialize CAN interface and set the frequency

Parameters
rdthe rd pin
tdthe td pin
hzthe bus frequency in hertz

Member Function Documentation

void mbed::CAN::attach ( Callback< void()>  func,
IrqType  type = RxIrq 
)

Attach a function to call whenever a CAN frame received interrupt is generated.

This function locks the deep sleep while a callback is attached

Parameters
funcA pointer to a void function, or 0 to set as none
typeWhich CAN interrupt to attach the member function to (CAN::RxIrq for message received, CAN::TxIrq for transmitted or aborted, CAN::EwIrq for error warning, CAN::DoIrq for data overrun, CAN::WuIrq for wake-up, CAN::EpIrq for error passive, CAN::AlIrq for arbitration lost, CAN::BeIrq for bus error)
template<typename T >
void mbed::CAN::attach ( T *  obj,
void(T::*)()  method,
IrqType  type = RxIrq 
)
inline

Attach a member function to call whenever a CAN frame received interrupt is generated.

Parameters
objpointer to the object to call the member function on
methodpointer to the member function to be called
typeWhich CAN interrupt to attach the member function to (CAN::RxIrq for message received, TxIrq for transmitted or aborted, EwIrq for error warning, DoIrq for data overrun, WuIrq for wake-up, EpIrq for error passive, AlIrq for arbitration lost, BeIrq for bus error)
Deprecated:
The attach function does not support cv-qualifiers. Replaced by attach(callback(obj, method), type).
template<typename T >
void mbed::CAN::attach ( T *  obj,
void(*)(T *)  method,
IrqType  type = RxIrq 
)
inline

Attach a member function to call whenever a CAN frame received interrupt is generated.

Parameters
objpointer to the object to call the member function on
methodpointer to the member function to be called
typeWhich CAN interrupt to attach the member function to (CAN::RxIrq for message received, TxIrq for transmitted or aborted, EwIrq for error warning, DoIrq for data overrun, WuIrq for wake-up, EpIrq for error passive, AlIrq for arbitration lost, BeIrq for bus error)
Deprecated:
The attach function does not support cv-qualifiers. Replaced by attach(callback(obj, method), type).
int mbed::CAN::filter ( unsigned int  id,
unsigned int  mask,
CANFormat  format = CANAny,
int  handle = 0 
)

Filter out incomming messages

Parameters
idthe id to filter on
maskthe mask applied to the id
formatformat to filter on (Default CANAny)
handlemessage filter handle (Optional)
Returns
0 if filter change failed or unsupported, new filter handle if successful
int mbed::CAN::frequency ( int  hz)

Set the frequency of the CAN interface

Parameters
hzThe bus frequency in hertz
Returns
1 if successful, 0 otherwise
int mbed::CAN::mode ( Mode  mode)

Change CAN operation to the specified mode

Parameters
modeThe new operation mode (CAN::Normal, CAN::Silent, CAN::LocalTest, CAN::GlobalTest, CAN::SilentTest)
Returns
0 if mode change failed or unsupported, 1 if mode change was successful
void mbed::CAN::monitor ( bool  silent)

Puts or removes the CAN interface into silent monitoring mode

Parameters
silentboolean indicating whether to go into silent mode or not
unsigned char mbed::CAN::rderror ( )

Detects read errors - Used to detect read overflow errors.

Returns
number of read errors
int mbed::CAN::read ( CANMessage msg,
int  handle = 0 
)

Read a CANMessage from the bus.

Parameters
msgA CANMessage to read to.
handlemessage filter handle (0 for any message)
Returns
0 if no message arrived, 1 if message arrived
void mbed::CAN::reset ( )

Reset CAN interface.

To use after error overflow.

unsigned char mbed::CAN::tderror ( )

Detects write errors - Used to detect write overflow errors.

Returns
number of write errors
int mbed::CAN::write ( CANMessage  msg)

Write a CANMessage to the bus.

Parameters
msgThe CANMessage to write.
Returns
0 if write failed, 1 if write was successful

The documentation for this class was generated from the following files:
Important Information for this Arm website

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies. If you are not happy with the use of these cookies, please review our Cookie Policy to learn how they can be disabled. By disabling cookies, some features of the site will not work.