Datasheet

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,3,_CANSPI_CONFIG_XTD_MSG);
// set id of filter B1_F1 to 3
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 (TRUE) do
begin // endless loop
Msg_Rcvd := CANSPIRead(Rx_ID , RxTx_Data , Rx_Data_Len,
Can_Rcv_Flags); // receive message
if ((Rx_ID = 3) and Msg_Rcvd) then
// if message received check id
begin
PORTC := RxTx_Data[0];
// id correct, output data at PORTC
Inc(RxTx_Data[0]) ;
// increment received data
Delay_ms(10);
CANSPIWrite(Tx_ID, RxTx_Data, 1, Can_Send_Flags);
// send incremented data back
end;
end;
end.
Code for the second CANSPI node:
program Can_Spi_2nd;
var Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags : byte; // can
flags
Rx_Data_Len : byte; //
received data length in bytes
RxTx_Data : array[8] of byte; // CAN rx/tx data buffer
Msg_Rcvd : byte; // reception flag
Tx_ID, Rx_ID : longint; // can rx and tx ID
// CANSPI module connections
200
MIKROELEKTRONIKA - SOFTWARE AND HARDWARE SOLUTIONS FOR EMBEDDED WORLD
Libraries
mikroPASCAL PRO for AVR
CHAPTER 6