RTEMS  5.0.0
can.h
Go to the documentation of this file.
1 
9 /*
10  * Copyright (c) 2014 Taller Technologies.
11  *
12  * @author Diaz Marcos (marcos.diaz@tallertechnologies.com)
13  * @author Daniel Chicco (daniel.chicco@tallertechnologies.com)
14  *
15  * The license and distribution terms for this file may be
16  * found in the file LICENSE in this distribution or at
17  * http://www.rtems.org/license/LICENSE.
18  */
19 
20 #ifndef LPC176X_CAN_H
21 #define LPC176X_CAN_H
22 
23 #include <bsp.h>
24 #include <bsp/io.h>
25 #include <bsp/lpc176x.h>
26 
27 #ifdef __cplusplus
28 extern "C" {
29 #endif /* __cplusplus */
30 
34 typedef enum {
35  CAN_0,
36  CAN_1,
37  CAN_DEVICES_NUMBER
39 
43 typedef struct {
44  uint32_t info;
45  uint32_t id;
46  uint32_t data_a;
47  uint32_t data_b;
49 
53 typedef struct {
54  unsigned int reserved1 : 16;
55  unsigned int dlc : 4; /* Bits 16..19: DLC - Data Length Counter*/
56  unsigned int reserved0 : 10;
57  unsigned int rtr : 1; /* Bit 30: Set if this is a RTR message*/
58  unsigned int type : 1; /* Bit 31: Set if this is a 29-bit ID message*/
59  unsigned int id; /* CAN Message ID (11-bit or 29-bit)*/
60  unsigned char data[ 8 ]; /* CAN Message Data Bytes 0-7*/
62 
66 typedef union {
67  low_level_can_message low_level;
68  registers_can_message registers;
69 } can_message;
70 
74 typedef enum {
75  IRQ_RX = 0,
76  IRQ_TX,
77  IRQ_ERROR,
78  IRQ_OVERRUN,
79  IRQ_WAKEUP,
80  IRQ_PASSIVE,
81  IRQ_ARB,
82  IRQ_BUS,
83  IRQ_READY,
84  CAN_IRQ_NUMBER
85 } can_irq_type;
86 
92 typedef void (*lpc176x_can_isr) ( lpc176x_can_number number );
93 
97 typedef unsigned int can_freq;
98 
109 rtems_status_code can_open( lpc176x_can_number minor, can_freq freq );
110 
117 rtems_status_code can_close( lpc176x_can_number minor );
118 
127  const lpc176x_can_number minor,
129 );
130 
139  const lpc176x_can_number minor,
140  const can_message *const message
141 );
142 
153  const lpc176x_can_number number,
154  const can_irq_type type,
155  const lpc176x_can_isr isr
156 );
157 
169  can_message *const msg,
170  const int _id,
171  const char *const _data,
172  const char _len
173 );
174 
175 #ifdef __cplusplus
176 }
177 #endif /* __cplusplus */
178 
179 #endif /* ifndef LPC176X_CAN_H */
Definition: media-server.c:33
rtems_status_code can_open(lpc176x_can_number minor, can_freq freq)
Opens CAN device.
Definition: can.c:332
A CAN message represented with each logical parts.
Definition: can.h:53
rtems_status_code can_write(const lpc176x_can_number minor, const can_message *const message)
Writes the passed CAN message into the selected CAN device.
Definition: can.c:458
rtems_status_code
Classic API Status.
Definition: status.h:43
lpc176x_can_number
The CAN devices of the board.
Definition: can.h:34
A CAN message represented of both forms.
Definition: can.h:66
rtems_status_code create_can_message(can_message *const msg, const int _id, const char *const _data, const char _len)
Creates a CAN message.
Definition: can.c:523
Specific register definitions according to lpc176x family boards.
can_irq_type
The possible interrupt sources for CAN.
Definition: can.h:74
void(* lpc176x_can_isr)(lpc176x_can_number number)
An isr for a CAN interrupt.
Definition: can.h:92
Definition: b1553brm.c:75
rtems_status_code can_register_isr(const lpc176x_can_number number, const can_irq_type type, const lpc176x_can_isr isr)
Registers an isr in the driver vector, and enables the interrupt in the device.
Definition: can.c:506
unsigned int can_freq
A CAN frequency value.
Definition: can.h:97
A CAN message represented for the registers of the device.
Definition: can.h:43
rtems_status_code can_close(lpc176x_can_number minor)
Closes the passed CAN device and shut it down.
Definition: can.c:81
rtems_status_code can_read(const lpc176x_can_number minor, can_message *message)
Reads the CAN device.
Definition: can.c:415