User manual
mikroC PRO for dsPIC
MikroElektronika
303
CANSPISetOperationMode(_CANSPI_MODE_NORMAL,0xFF); // Set NORMAL mode
RxTx_Data[0] = 9; // Set initial data to be sent
Tx_ID = 12111; // Set transmit ID
CANSPIWrite(Tx_ID, 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 == 3u) && Msg_Rcvd) { // If message received check id
PORTB = RxTx_Data[0]; // Id correct, output data at PORTB
RxTx_Data[0]++; // Increment received data
Delay_ms(10);
CANSPIWrite(Tx_ID, RxTx_Data, 1, Can_Send_Flags); // Send incremented data back
}
}
}
Code for the second CANSPI node:
Copy Code To Clipboard
sbit CanSpi_CS at RF0_bit; // Chip select line
sbit CanSpi_Rst at RF1_bit; // Reset line
sbit CanSpi_CS_Direction at TRISF0_bit; // Direction of the Chip Select pin
sbit CanSpi_Rst_Direction at TRISF1_bit; // Direction of the Reset pin
unsigned int Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags; // Can ags
unsigned int Rx_Data_Len; // Received data length in
bytes
char RxTx_Data[8]; // Can rx/tx data buffer
char Msg_Rcvd; // Reception ag
unsigned long Tx_ID, Rx_ID; // Can rx and tx ID
void main() {
ADPCFG = 0xFFFF;
PORTB = 0;
TRISB = 0;
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 CANSPI1Write
_CANSPI_TX_NO_RTR_FRAME;
Can_Init_Flags = _CANSPI_CONFIG_SAMPLE_THRICE & // Form value to be used
_CANSPI_CONFIG_PHSEG2_PRG_ON & // with CANSPI1Init
_CANSPI_CONFIG_XTD_MSG &