35#ifndef MCAN_H_INCLUDED
36#define MCAN_H_INCLUDED
39#include <mcan_internal.h>
123const uint32_t CONF_MCAN_RTR_CHANNELS = 8;
139 uint32_t TxBufferIndex;
141 volatile uint32_t standard_receive_index = 0;
142 volatile uint32_t extended_receive_index = 0;
144 __attribute__((__aligned__(0x0800)))
158 void enable_peripheral_clock();
159 void message_memory_init();
160 void set_configuration(
struct mcan_config *config);
161 void clean_up_pending_tx();
163 void process_isr(
void);
166 void ack_tx(uint32_t index);
170 static inline void dispatch_isr(
int n) {
if(this_Ref[n]) this_Ref[n]->process_isr(); };
171 friend void MCAN0_Handler(
void );
172 friend void MCAN1_Handler(
void );
174 void set_baudrate(uint32_t baudrate);
175 void fd_set_baudrate(uint32_t baudrate);
178 void enable_fd_mode();
179 void disable_fd_mode();
180 void enable_restricted_operation_mode();
181 void disable_restricted_operation_mode();
182 void enable_bus_monitor_mode();
183 void disable_bus_monitor_mode();
184 void enable_sleep_mode();
185 void disable_sleep_mode();
186 void enable_test_mode();
187 void disable_test_mode();
188 enum status_code set_rx_standard_filter(
struct mcan_standard_message_filter_element *sd_filter, uint32_t index);
193 enum status_code set_tx_buffer_element (
struct mcan_tx_element *tx_element, uint32_t index);
194 enum status_code get_tx_event_fifo_element(
struct mcan_tx_event_element *tx_event_element, uint32_t index);
203 inline uint16_t read_timestamp_count_value(){
return hw->MCAN_TSCV;};
212 inline uint16_t read_timeout_count_value(){
return hw->MCAN_TOCV;};
221 inline uint32_t read_error_count(){
return hw->MCAN_ECR;};
230 inline uint32_t read_protocal_status(){
return hw->MCAN_PSR;};
239 inline uint32_t read_high_priority_message_status(){
return hw->MCAN_HPMS;}
252 inline bool rx_get_buffer_status(uint32_t index)
256 if (hw->MCAN_NDAT1 & (1 << index))
266 if (hw->MCAN_NDAT2 & (1 << index))
282 inline void rx_clear_buffer_status(uint32_t index)
286 hw->MCAN_NDAT1 = (1 << index);
290 hw->MCAN_NDAT2 = (1 << index);
302 inline uint32_t rx_get_fifo_status(
bool fifo_number)
306 return hw->MCAN_RXF0S;
309 return hw->MCAN_RXF1S;
320 inline void rx_fifo_acknowledge(
bool fifo_number, uint32_t index)
324 hw->MCAN_RXF0A = MCAN_RXF0A_F0AI(index);
327 hw->MCAN_RXF1A = MCAN_RXF1A_F1AI(index);
338 inline uint32_t tx_get_fifo_queue_status()
340 return hw->MCAN_TXFQS;
350 inline uint32_t tx_get_pending_status()
352 return hw->MCAN_TXBRP;
366 inline enum status_code tx_transfer_request( uint32_t trig_mask)
368 if (hw->MCAN_CCCR & MCAN_CCCR_CCE)
372 hw->MCAN_TXBAR = trig_mask;
387 inline enum status_code tx_cancel_request( uint32_t trig_mask)
389 if (hw->MCAN_CCCR & MCAN_CCCR_CCE)
391 return STATUS_ERR_BUSY;
393 hw->MCAN_TXBCR = trig_mask;
404 inline uint32_t tx_get_transmission_status()
406 return hw->MCAN_TXBTO;
416 inline uint32_t tx_get_cancellation_status()
418 return hw->MCAN_TXBCF;
428 inline uint32_t tx_get_event_fifo_status()
430 return hw->MCAN_TXEFS;
439 inline void tx_event_fifo_acknowledge( uint32_t index)
441 hw->MCAN_TXEFA = MCAN_TXEFA_EFAI(index);
452 hw->MCAN_IE |= source;
463 hw->MCAN_IE &= ~source;
471 inline uint32_t read_interrupt_status()
486 hw->MCAN_IR = source;
632#define CAN_EXTENDED_ID_BIT (0x20000000)
637#define ExtToNbId(id ) (id | CAN_EXTENDED_ID_BIT)
642#define NormToNbId(id) (id & 0x7ff)
649#define IsNBIdExt(id) ( (id & CAN_EXTENDED_ID_BIT)!=0)
654#define NbToExtId(id) (id & 0x1FFFFFFF)
663#define NbToNormId(id) (id & 0x7FF)
807#define CAN_DATA_STORE_SIZE (512)
811struct PrivateCanData;
819 PrivateCanData *pData;
839 uint8_t
CopyData( uint8_t *buffer, uint8_t max_len );
MCAN extended message ID filter element structure.
Definition mcan_internal.h:414
Class to hold received CAN messages.
Definition mcan.h:817
BOOL IsValid()
Check to verify the CanRxMessage is a valid message.
~CanRxMessage()
Destructor.
uint32_t GetId()
Returns the ID of the message.
uint8_t CopyData(uint8_t *buffer, uint8_t max_len)
Copy the data in the message up to max_len.
const uint8_t * GetData()
Returns a pointer to the message data.
BOOL GetNewMessage(OS_FIFO *pFifo, uint32_t timeout=WAIT_FOREVER)
Get a new message from the FIFO. If no message is available, wait up to the timeout for one to be rec...
uint8_t GetLength()
Returns the amount of data stored in the message.
uint16_t GetTimeStamp()
Returns the time stamp of the message.
CanRxMessage(OS_FIFO *pFifo, uint32_t timeout=WAIT_FOREVER)
Build a CanRxMessage from a FIFO.
MCAN configuration structure.
Definition mcan.h:677
uint8_t rx_fifo_1_watermark
Definition mcan.h:726
uint8_t rx_fifo_0_watermark
Definition mcan.h:722
bool tx_queue_mode
Definition mcan.h:728
bool run_in_standby
Definition mcan.h:680
bool protocol_exception_handling
Definition mcan.h:688
bool transmit_pause
Definition mcan.h:684
enum mcan_timeout_mode timeout_mode
Definition mcan.h:700
uint8_t watchdog_configuration
Definition mcan.h:682
uint8_t tx_event_fifo_watermark
Definition mcan.h:730
bool remote_frames_standard_reject
Definition mcan.h:714
void set_config_defaults()
Initializes an MCAN configuration structure to defaults.
Definition mcan.h:767
bool remote_frames_extended_reject
Definition mcan.h:716
bool clock_stop_acknowledge
Definition mcan.h:694
bool clock_stop_request
Definition mcan.h:692
bool automatic_retransmission
Definition mcan.h:690
uint8_t delay_compensation_offset
Definition mcan.h:706
bool rx_fifo_1_overwrite
Definition mcan.h:724
bool timeout_enable
Definition mcan.h:702
uint8_t timestamp_prescaler
Definition mcan.h:696
uint32_t extended_id_mask
Definition mcan.h:718
uint8_t delay_compensation_filter_window_length
Definition mcan.h:708
bool tdc_enable
Definition mcan.h:704
enum mcan_nonmatching_frames_action nonmatching_frames_action_extended
Definition mcan.h:712
uint16_t timeout_period
Definition mcan.h:698
enum mcan_nonmatching_frames_action nonmatching_frames_action_standard
Definition mcan.h:710
bool rx_fifo_0_overwrite
Definition mcan.h:720
bool edge_filtering
Definition mcan.h:686
MCAN Module Class.
Definition mcan.h:136
void init(Mcan *phw, struct mcan_config *config, uint32_t baud)
Initialize a MCAN module.
int RegisterRxFifoRange(uint32_t composite_id_low, uint32_t composite_id_hi, OS_FIFO *pFifo, int channel=-1)
Register a FIFO to receive messages in the specified numeric range of addresses from low to high.
void send_message(uint32_t id_value, uint8_t *data, uint32_t data_length, OS_SEM *pSem=0)
Send a MCAN message.
int MultiCanReplaceRTRMessage(int channel, uint8_t *data, uint8_t len)
Modifies/updates the response for the RTR message registered wotj MultiCanSetRTRMessage().
int MultiCanStopRTRMessage(int channel)
Unregister the RTR message for the specified channel.
int RegisterRxFifoMask(uint32_t composite_id, uint32_t mask, OS_FIFO *pFifo, int channel=-1)
Register a FIFO to receive messages as specified by the address bit mask. A value of 1 = match,...
mcan_module(Mcan *phw, uint32_t baud)
Create a MCAN module instance.
int MultiCanSetRTRMessage(uint32_t id, uint8_t *data, uint8_t len, int channel=-1)
Enable an auto-reply to a CAN RTR message for the specified CAN ID. The reply message is specified by...
int UnRegisterFifo(int channel)
Unregister the FIFO for the specified CAN channel.
int RegisterRxFifo(uint32_t composite_id, OS_FIFO *pFifo, int channel=-1)
Register a FIFO to receive CAN messages.
bool blocking_send_message(uint32_t id_value, uint8_t *data, uint32_t data_length, uint32_t TimeOut)
Send a MCAN message and block until sent.
mcan_timeout_mode
Can time out modes.
Definition mcan_internal.h:546
mcan_nonmatching_frames_action
Can non-matching frames action.
Definition mcan_internal.h:562
mcan_interrupt_source
Can module interrupt source.
Definition mcan_internal.h:579
@ MCAN_TIMEOUT_CONTINUES
Definition mcan_internal.h:548
@ MCAN_NONMATCHING_FRAMES_REJECT
Definition mcan_internal.h:568
const uint32_t CONF_MCAN_RX_EXTENDED_ID_FILTER_NUM
Range: 1..64.
Definition mcan.h:111
const uint32_t CONF_MCAN_TX_EVENT_FIFO
Range: 1..32.
Definition mcan.h:105
const uint32_t CONF_MCAN_RX_FIFO_1_NUM
Range: 1..64.
Definition mcan.h:93
const uint32_t CONF_MCAN_RX_STANDARD_ID_FILTER_NUM
Range: 1..128.
Definition mcan.h:108
const uint32_t CONF_MCAN_TX_FIFO_QUEUE_NUM
Range: 1..16.
Definition mcan.h:102
const uint32_t CONF_MCAN_TX_BUFFER_NUM
Range: 1..16.
Definition mcan.h:99
const uint32_t CONF_MCAN_RX_BUFFER_NUM
Range: 1..64.
Definition mcan.h:96
const uint32_t CONF_MCAN_RX_FIFO_0_NUM
Range: 1..64.
Definition mcan.h:90
#define WAIT_FOREVER
Pass as a timeout parameter to wait indefinitely (no timeout)
Definition nbrtos.h:90
#define STATUS_OK
OK, no errors.
Definition mailto.h:28
mcanMODM7AE70 namespace
Definition mcan.h:46
A linked-list FIFO for passing pointers to user-defined structures between tasks.
Definition nbrtos.h:1177
Counting semaphore for task synchronization and resource management.
Definition nbrtos.h:550
MCAN receive element structure for buffer.
Definition mcan_internal.h:79
MCAN transfer element structure.
Definition mcan_internal.h:191
MCAN transfer event FIFO element structure.
Definition mcan_internal.h:270