User manual
274
mikoPascal PRO for dsPIC30/33 and PIC24
MikroElektronika
CANSPISetFilter(_CANSPI_FILTER_B2_F4,ID_2nd,_CANSPI_CONFIG_XTD_MSG);// set id of lter
B2_F4 to 2nd node ID
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 (TRUE) do
begin // endless loop
Msg_Rcvd := CANSPIRead(Rx_ID , RxTx_Data , Rx_Data_Len, Can_Rcv_Flags);// receive
message
if ((Rx_ID = ID_2nd) and Msg_Rcvd) then // if message received check id
begin
PORTB := RxTx_Data[0]; // id correct, output data at PORTD
Inc(RxTx_Data[0]); // increment received data
Delay_ms(10);
CANSPIWrite(ID_1st, RxTx_Data, 1, Can_Send_Flags);// send incremented data back
end;
end;
end.
Code for the second CANSPI node:
Copy Code To Clipboard
program Can_Spi_2nd;
const ID_1st : longint = 12111;
const ID_2nd : longint = 3;
var Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags : word; // can ags
Rx_Data_Len : word; // received data length in bytes
RxTx_Data : array[8] of byte; // can rx/tx data buffer
Msg_Rcvd : byte; // reception ag
Tx_ID, Rx_ID : dword; // can rx and tx ID
// CANSPI module connections
var CanSpi_CS : sbit at LATF0_bit;
CanSpi_CS_Direction : sbit at TRISF0_bit;
CanSpi_Rst : sbit at LATF1_bit;
CanSpi_Rst_Direction : sbit at TRISF1_bit;
// End CANSPI module connections
begin
ADPCFG := 0xFFFF; // Congure 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; //