42 #include "pic24_all.h"
43 #include "pic24_ecan.h"
46 extern __eds__ ECANMSG __esos_ecan_msgBuf[__ESOS_ECAN_HW_NUM_BUFS] __attribute__((space(dma),aligned(__ESOS_ECAN_HW_NUM_BUFS*16),eds));
48 void __esos_ecan_hw_config_ecan (
void ) {
51 CHANGE_MODE_ECAN1(ECAN_MODE_CONFIGURE);
57 C1FCTRL = ECAN_FIFO_START_AREA_1 | ECAN_DMA_BUF_SIZE_8;
58 configRxFilterECAN1( 0, 0x7a0, 0, 15, 0 );
59 configRxMaskECAN1( 0, 0x000, 0, 0 );
60 clrRxFullOvfFlagsECAN1();
62 for ( u8_i = 0; u8_i < 8; u8_i++ ) {
63 if ( u8_i < __ESOS_ECAN_HW_NUM_TX_BUFS ) {
64 configTxRxBufferECAN1( u8_i, ECAN_TX_BUFF, 3 );
66 configTxRxBufferECAN1( u8_i, ECAN_RX_BUFF, 3 );
70 __esos_ecan_hw_config_dma_tx();
71 __esos_ecan_hw_config_dma_rx();
73 CONFIG_C1TX_TO_RP(102);
74 RPINR26bits.C1RXR = 101;
79 void __esos_ecan_hw_config_dma_tx (
void ) {
82 DMA0PAD = (
unsigned int) &C1TXD;
83 DMA0REQ = DMA_IRQ_ECAN1TX;
84 DMA0STAL = (
unsigned int) &__esos_ecan_msgBuf;
85 DMA0STAH = (
unsigned int) &__esos_ecan_msgBuf;
90 DMA_DIR_WRITE_PERIPHERAL |
93 DMA_AMODE_PERIPHERAL_INDIRECT |
100 void __esos_ecan_hw_config_dma_rx (
void ) {
102 DMA1PAD = (
unsigned int) &C1RXD;
103 DMA1REQ = DMA_IRQ_ECAN1RX;
104 DMA1STAL = (
unsigned int) &__esos_ecan_msgBuf;
105 DMA1STAH = (
unsigned int) &__esos_ecan_msgBuf;
110 DMA_DIR_READ_PERIPHERAL |
113 DMA_AMODE_PERIPHERAL_INDIRECT |
120 void __esos_ecan_hw_mark_message_received ( uint16_t u16_rx_buff_id ) {
121 clrRxFullFlagECAN1( u16_rx_buff_id );
122 clrRxFullOvfFlagsECAN1();
127 void __esos_ecan_hw_format_and_send ( ECANMSG *p_temp_Msg, uint16_t u16_can_id, uint8_t u8_payload_len ) {
128 formatStandardDataFrameECAN( p_temp_Msg, u16_can_id, u8_payload_len );
129 __esos_ecan_msgBuf[0] = *p_temp_Msg;