User manual

Table Of Contents
284
mikoC PRO for PIC32
MikroElektronika
CANSPISetOperationMode(_CANSPI_MODE_NORMAL,0xFF); // set NORMAL mode
// Set initial data to be sent
RxTx_Data[0] = 9;
CANSPIWrite(ID_1st, RxTx_Data, 1, Can_Send_Flags); // send initial message
while(1) { // endless loop
Msg_Rcvd = CANSPIRead(&Rx_ID , RxTx_Data , &Rx_Data_Len, &Can_Rcv_Flags); //
receive message
if ((Rx_ID == ID_2nd) && Msg_Rcvd) { // if message received check id
PORTB = RxTx_Data[0]; // id correct, output data at PORTC
RxTx_Data[0]++ ; // increment received data
Delay_ms(10);
CANSPIWrite(ID_1st, RxTx_Data, 1, Can_Send_Flags); // send incremented data back
}
}
}
Code for the second 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;