I'm new here and I have a problem with CanRead command.
I connected two DVK90CAN1 board and it works well when I try using CanWrite(the CAN led blinks)
However when I try to read the transmitted data, CanRead command seems doesn't respond. In CAN 2 code I placed led blink code to know whether CanRead operate or not. And I noticed led doesn't blink if I use CanRead. I am not sure whether the syntax itself is a problem. I might say that my CAN configuration has a problem.
CAN 1
Code: Select all
unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags; // can flags
unsigned char Rx_Data_Len; // received data length in bytes
char RxTx_Data[8]; // can rx/tx data buffer
char Msg_Rcvd = 0; // reception flag
const long ID_1st = 12111, ID_2nd = 3; // node IDs
long Rx_ID;
void main() {
PORTC = 0x00; // clear PORTC
DDRC = 0xFF; // set PORTC as output
Can_Init_Flags = 0; //
Can_Send_Flags = 0; // clear flags
Can_Rcv_Flags = 0; //
Can_Send_Flags = _CAN_IDE_XTD_FRAME // form value to be used
& _CAN_NO_RTR_FRAME; // with CANWrite
Can_Init_Flags = _CAN_CONFIG_SAMPLE_THRICE // form value to be used
& _CAN_CONFIG_XTD_MSG; // with CANInit
CANInitialize(1,6,3,3,1,Can_Init_Flags); // initialize external CAN module
CANSetOperationMode(_CAN_MODE_STANDBY,0xFF); // set STANDBY mode
//----------------------------------------------------------//
CANSetFilter(CAN_RX_FILTER_3, -1, _CAN_CONFIG_XTD_MSG); //
CANSetFilter(CAN_RX_FILTER_4, ID_2nd, _CAN_CONFIG_XTD_MSG); // set ID filter of 4th filter to 2nd node ID
CANSetFilter(CAN_RX_FILTER_5, -1, _CAN_CONFIG_XTD_MSG); // and ones to other filters
CANSetFilter(CAN_RX_FILTER_6, -1, _CAN_CONFIG_XTD_MSG);
CANSetFilter(CAN_RX_FILTER_7, -1, _CAN_CONFIG_XTD_MSG);
CANSetFilter(CAN_RX_FILTER_8, -1, _CAN_CONFIG_XTD_MSG);
CANSetFilter(CAN_RX_FILTER_9, -1, _CAN_CONFIG_XTD_MSG);
CANSetFilter(CAN_RX_FILTER_10, -1, _CAN_CONFIG_XTD_MSG);
CANSetFilter(CAN_RX_FILTER_11, -1, _CAN_CONFIG_XTD_MSG);
CANSetFilter(CAN_RX_FILTER_12, -1, _CAN_CONFIG_XTD_MSG);
CANSetFilter(CAN_RX_FILTER_13, -1, _CAN_CONFIG_XTD_MSG);
CANSetFilter(CAN_RX_FILTER_14, -1, _CAN_CONFIG_XTD_MSG);
//----------------------------------------------------------//
//----------------------------------------------------------//
CANSetMask(CAN_RX_MASK_3, -1, _CAN_CONFIG_XTD_MSG); // set all mask bits of masks[3..14] to all ones
CANSetMask(CAN_RX_MASK_4, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_5, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_6, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_7, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_8, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_9, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_10, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_11, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_12, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_13, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_14, -1, _CAN_CONFIG_XTD_MSG);
//----------------------------------------------------------//
CANSetOperationMode(_CAN_MODE_ENABLE,0xFF); // set ENABLE mode
RxTx_Data[0] = 9; // set initial data to be sent
CANWrite(ID_1st, RxTx_Data, 1, Can_Send_Flags); // send initial message
while(1) { // endless loop // increment received data
Delay_ms(10);
CANWrite(ID_1st, RxTx_Data, 1, Can_Send_Flags); // send incremented data back
}
}
}
Code: Select all
unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags; // can flags
unsigned char Rx_Data_Len; // received data length in bytes
char RxTx_Data[8]; // can rx/tx data buffer
char Msg_Rcvd = 0; // reception flag
const long ID_1st = 12111, ID_2nd = 3; // node IDs
long Rx_ID;
void main() {
PORTA = 0x00; // clear PORTC
DDRA = 0xFF; // set PORTC as output
Can_Init_Flags = 0; //
Can_Send_Flags = 0; // clear flags
Can_Rcv_Flags = 0; //
Can_Send_Flags = _CAN_IDE_XTD_FRAME // form value to be used
& _CAN_NO_RTR_FRAME; // with CANWrite
Can_Init_Flags = _CAN_CONFIG_SAMPLE_THRICE // form value to be used
& _CAN_CONFIG_XTD_MSG; // with CANInit
CANInitialize(1,6,3,3,1,Can_Init_Flags); // initialize external CAN module
CANSetOperationMode(_CAN_MODE_STANDBY,0xFF); // set STANDBY mode
//----------------------------------------------------------//
CANSetFilter(CAN_RX_FILTER_3, -1, _CAN_CONFIG_XTD_MSG); //
CANSetFilter(CAN_RX_FILTER_4, -1, _CAN_CONFIG_XTD_MSG); //
CANSetFilter(CAN_RX_FILTER_5, -1, _CAN_CONFIG_XTD_MSG); //
CANSetFilter(CAN_RX_FILTER_6, -1, _CAN_CONFIG_XTD_MSG); //
CANSetFilter(CAN_RX_FILTER_7, ID_1st, _CAN_CONFIG_XTD_MSG); // set ID filter of 7th filter to 2nd node ID
CANSetFilter(CAN_RX_FILTER_8, -1, _CAN_CONFIG_XTD_MSG); // and ones to other filters
CANSetFilter(CAN_RX_FILTER_9, -1, _CAN_CONFIG_XTD_MSG);
CANSetFilter(CAN_RX_FILTER_10, -1, _CAN_CONFIG_XTD_MSG);
CANSetFilter(CAN_RX_FILTER_11, -1, _CAN_CONFIG_XTD_MSG);
CANSetFilter(CAN_RX_FILTER_12, -1, _CAN_CONFIG_XTD_MSG);
CANSetFilter(CAN_RX_FILTER_13, -1, _CAN_CONFIG_XTD_MSG);
CANSetFilter(CAN_RX_FILTER_14, -1, _CAN_CONFIG_XTD_MSG);
//----------------------------------------------------------//
//----------------------------------------------------------//
CANSetMask(CAN_RX_MASK_3, -1, _CAN_CONFIG_XTD_MSG); // set all mask bits of masks[3..14] to all ones
CANSetMask(CAN_RX_MASK_4, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_5, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_6, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_7, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_8, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_9, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_10, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_11, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_12, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_13, -1, _CAN_CONFIG_XTD_MSG);
CANSetMask(CAN_RX_MASK_14, -1, _CAN_CONFIG_XTD_MSG);
//----------------------------------------------------------//
CANSetOperationMode(_CAN_MODE_ENABLE,0xFF); // set ENABLE mode
while (1) { // endless loop
Msg_Rcvd = CANRead(&Rx_ID, &RxTx_Data, &Rx_Data_Len, &Can_Rcv_Flags); // receive message
PORTA = 0xFF;
Delay_ms(100);
PORTA = 0x00;
Delay_ms(100);
}
}