void RunTimeInitialization(void) { // Must be in Config mode to change many of settings. ECANSetOperationMode(ECAN_OP_MODE_CONFIG); // Select Mode 1 ECANSetFunctionalMode(ECAN_MODE_1); // Make B0 as receiver. ECANSetBnTxRxMode(B0, ECAN_BUFFER_RX); // RXB0 will receive Stadard messages only. ECANSetRxBnRxMode(RXB0, ECAN_RECEIVE_ALL_VALID); // B0 will receive Extended ECANSetBnRxMode(B0, ECAN_RECEIVE_ALL_VALID); // Link RXF0 to RXB0 and RXF1 to B0 ECANLinkRXF0F1ToBuffer(RXB0, B0); ECANLinkRXF0Thru3ToMask(ECAN_RXM0, ECAN_RXM1, ECAN_RXM0, ECAN_RXM0); ECANSetRXF0Value(0, ECAN_MSG_STD); ECANSetRXF1Value(0, ECAN_MSG_XTD); ECANSetRXM0Value(0, ECAN_MSG_STD); ECANSetRXM1Value(0, ECAN_MSG_XTD); // Set 125kbps @ 25MHz ECANSetBaudRate(2, 4, 8, 8, 8); // Return to Normal mode to communicate. ECANSetOperationMode(ECAN_OP_MODE_NORMAL); }
void main() { unsigned long id; BYTE cpt_RB4; BYTE cpt_RB5; BYTE data_envoi; BYTE data_recu[8]; BYTE dataLen; int i; ECAN_RX_MSG_FLAGS flags; init(); cpt_RB4 = 0; cpt_RB5 = 0; data_envoi = 0; for (i = 0; i < 8;i++) data_recu[i] = 0xFF; printf(NL NL "début programme" NL); ECANInitialize(); ECANSetBaudRate(2, 4, 8, 8, 8); while(1) { if(TRUE == ECANReceiveMessage(&id, data_recu, &dataLen, &flags)) { PIC1_ONLY printf("ECAN: reçu %u octet(s) : %u" NL, dataLen, data_recu[0]); led_afficher_int(data_recu[0]); } if(bouton_RB4_pressed()) { cpt_RB4 = cpt_RB4 + 1; data_envoi = (BYTE)cpt_RB4; while (!ECANSendMessage(0, &data_envoi, 1, 0)); PIC1_ONLY printf("compteur de RB4 : %u" NL, cpt_RB4); led_afficher_int(cpt_RB4); } if(bouton_RB5_pressed()) { cpt_RB5 = cpt_RB5 + 1; data_envoi = (BYTE)cpt_RB5; while (!ECANSendMessage(0, &data_envoi, 1, 0)); PIC1_ONLY printf("compteur de RB5 : %u" NL, cpt_RB5); led_afficher_int(cpt_RB5); } } }
void can_init(void) { ECANInitialize(); ECANSetBaudRate(2, 4, 8, 8, 8); }