Mikroelektronika MIKROE-350 データシート

ページ / 526
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)
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