User manual

mikroPascal PRO for dsPIC30/33 and PIC24
MikroElektronika
275
Can_Send_Flags := _CANSPI_TX_PRIORITY_0 and // form value to be used
_CANSPI_TX_XTD_FRAME and // with CANSPIWrite
_CANSPI_TX_NO_RTR_FRAME;
Can_Init_Flags := _CANSPI_CONFIG_SAMPLE_THRICE and // Form value to be used
_CANSPI_CONFIG_PHSEG2_PRG_ON and // with CANSPIInit
_CANSPI_CONFIG_XTD_MSG and
_CANSPI_CONFIG_DBL_BUFFER_ON and
_CANSPI_CONFIG_VALID_XTD_MSG and
_CANSPI_CONFIG_LINE_FILTER_OFF;
// Initialize SPI1 module
SPI1_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_F3,ID_1st,_CANSPI_CONFIG_XTD_MSG);// set id of î‚¿lter
B2_F3 to 1st node ID
CANSPISetOperationMode(_CANSPI_MODE_NORMAL,0xFF); // set NORMAL mode
while (TRUE) do // endless loop
begin
Msg_Rcvd := CANSPIRead(Rx_ID , RxTx_Data , Rx_Data_Len, Can_Rcv_Flags); // receive
message
if ((Rx_ID = ID_1st) and Msg_Rcvd) then // if message received check id
begin
PORTB := RxTx_Data[0]; // id correct, output data at PORTB
Inc(RxTx_Data[0]); // increment received data
CANSPIWrite(ID_2nd, RxTx_Data, 1, Can_Send_Flags); // send incremented data back
end;
end;
end.