User manual

Table Of Contents
mikroC PRO for PIC32
MikroElektronika
283
Library Example
This is a simple demonstration of CANSPI Library routines usage. First node initiates the communication with the
second node by sending some data to its address. The second node responds by sending back the data incremented
by 1. First node then does the same and sends incremented data back to second node, etc.
Code for the rst CANSPI node:
Copy Code To Clipboard
unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags; // can ags
unsigned char Rx_Data_Len; // received data length in
bytes
char RxTx_Data[8]; // can rx/tx data buffer
char Msg_Rcvd; // reception ag
const long ID_1st = 12111, ID_2nd = 3; // node IDs
long Rx_ID;
// CANSPI module connections
sbit CanSpi_CS at LATF0_bit;
sbit CanSpi_CS_Direction at TRISF0_bit;
sbit CanSpi_Rst at LATF1_bit;
sbit CanSpi_Rst_Direction at TRISF1_bit;
// End CANSPI module connections
void main() {
CHECON = 0x32;
AD1PCFG = 0xFFFF; // congure AN pins as digital I/O
PORTB = 0; // clear PORTB
TRISB = 0; // set PORTB as output
Can_Init_Flags = 0; //
Can_Send_Flags = 0; // clear ags
Can_Rcv_Flags = 0; //
Can_Send_Flags = _CANSPI_TX_PRIORITY_0 & // form value to be used
_CANSPI_TX_XTD_FRAME & // with CANSPIWrite
_CANSPI_TX_NO_RTR_FRAME;
Can_Init_Flags = _CANSPI_CONFIG_SAMPLE_THRICE & // form value to be used
_CANSPI_CONFIG_PHSEG2_PRG_ON & // with CANSPIInit
_CANSPI_CONFIG_XTD_MSG &
_CANSPI_CONFIG_DBL_BUFFER_ON &
_CANSPI_CONFIG_VALID_XTD_MSG;
// Initialize SPI2 module
SPI2_Init();
CANSPIInitialize(1,3,3,3,1,Can_Init_Flags); // initialize external CANSPI module
CANSPISetOperationMode(_CANSPI_MODE_CONFIG,0xFF); // set CONFIGURATION mode
CANSPISetMask(_CANSPI_MASK_B1,-1,_CANSPI_CONFIG_XTD_MSG); // set all mask1 bits to ones
CANSPISetMask(_CANSPI_MASK_B2,-1,_CANSPI_CONFIG_XTD_MSG);// set all mask2 bits to ones
CANSPISetFilter(_CANSPI_FILTER_B2_F4,ID_2nd,_CANSPI_CONFIG_XTD_MSG); // set id of
lter B2_F4 to 2nd node ID