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;
522 void send_message(uint32_t id_value, uint8_t *data,uint32_t data_length, OS_SEM * pSem=0);
570 int RegisterRxFifoRange(uint32_t composite_id_low,uint32_t composite_id_hi, OS_FIFO *pFifo,
int channel = -1 );