English
Language : 

70353C Datasheet, PDF (37/76 Pages) Microchip Technology – Section 21. Enhanced Controller Area Network
Section 21. Enhanced Controller Area Network (ECAN™)
Example 21-2: Code Example for Extended Data Frame Transmission
#include <p33Exxxx.h>
/* This code example demonstrates a method to configure the ECAN module to transmit Extended
ID CAN messages. */
/* Include fuse configuration code here. Optionally the fuse configuration can be specified via
MPLAB IDE Menu operations. */
FUSE_CONFIGURATION_MACROS_COME_HERE
#define NUM_OF_ECAN_BUFFERS 32
/* This is the ECAN message buffer declaration. Note the buffer alignment. */
unsigned int ecan1MsgBuf[NUM_OF_ECAN_BUFFERS][8]
__attribute__((aligned(NUM_OF_ECAN_BUFFERS * 16)));
int main(void)
{
unsigned long address;
/* Place code to set device speed here. For this example the device speed should be set at
40 MHz (i.e., the device is operating at 40 MIPS). */
ConfigureDeviceClockFor40MIPS();
/* The dsPIC33E device features I/O remap. This I/O remap configuration for the ECAN module
can be performed here. */
SetIORemapForECANModule();
/* Set up the ECAN1 module to operate at 250 kbps. The ECAN module should be first placed in
configuration mode. */
C1CTRL1bits.REQOP = 4;
while(C1CTRL1bits.OPMODE != 4);
C1CTRL1bits.WIN = 0;
/* Set up the CAN module for 250kbps speed with 10 Tq per bit. */
C1CFG1 = 0x47;
// BRP = 8 SJW = 2 Tq
C1CFG2 = 0x2D2;
C1FCTRL = 0xC01F; // No FIFO, 32 Buffers
/* Assign 32x8 word Message Buffers for ECAN1 in device RAM. This example uses DMA0 for TX.
Refer to 21.8.1 “DMA Operation for Transmitting Data” for details on DMA channel
configuration for ECAN transmit. */
DMA0CONbits.SIZE = 0x0;
DMA0CONbits.DIR = 0x1;
DMA0CONbits.AMODE = 0x2;
DMA0CONbits.MODE = 0x0;
DMA0REQ = 70;
DMA0CNT = 7;
DMA0PAD = (volatile unsigned int)&C1TXD;
DMA0STAL = (unsigned int) &ecan1msgBuf;
DMA0STAH = (unsigned int) &ecan1msgBuf;
DMA0CONbits.CHEN = 0x1;
21
© 2008-2011 Microchip Technology Inc.
DS70353C-page 21-37