Mikroelektronika MIKROE-350 データシート
SPI1_Init() ' initialize SPI1 module
Spi_Rd_Ptr = @SPI1_Read '
Pass pointer to SPI Read sub function of used SPI module
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
' 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
PORTC = RxTx_Data[0] ' id correct, output data at PORTC
Inc(RxTx_Data[0]) ' increment received data
Delay_ms(10)
Delay_ms(10)
CANSPIWrite(Tx_ID, RxTx_Data, 1, Can_Send_Flags)
' send incremented data back
end if
wend
end.
Code for the second CANSPI node:
program Can_Spi_2nd
dim Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags as byte ' can flags
Rx_Data_Len
as byte
' received data length in bytes
RxTx_Data
as byte[8] ' CAN rx/tx data buffer
Msg_Rcvd
as byte
' reception flag
Tx_ID, Rx_ID
as longint
' can rx and tx ID
186
MIKROELEKTRONIKA
- SOFTWARE AND HARDWARE SOLUTIONS FOR EMBEDDED WORLD
Libraries
mikroBasic PRO for AVR
CHAPTER 6