Das Beispiel in den Application Notes finde ich für den Einstig und das
Verstehen von CAN - Bussen noch zu komplex.
Das von mir angehangene CAN-Beispiel (can.zip) ist eigentlich recht
einfach gehalten und wird schließlich auch von Renesas in den
Starterkits mitgeliefert.
Es funktioniert wie folgt:
- Es sendet den Text "Renesas" und sollte den Empfang davon auf dem
anderen Board ermöglichen.
- Der verwendete CAN-Modi ist der Polling-Mode
Nun habe ich das Problem, dass mein Board immer in den
Transmission-Error läuft und zwar genauer in den PassiveState-Error.
In der Funktion: SendCAN0Message(0);
wird beim Setzen des Bits: c0mctl0.transmit.trmreq = 1;
gleichzeitig ein Busstate-Error Flag gesetzt und ich weiss nicht warum.
Kann mir da jemand weiterhelfen?
Zur Hardware beide Boards sind über ein dreipoliges Kabel miteinander
verbunden und die Brücke für den 120ohm Widerstand ist jeweils auch
vorhanden.
Hier ein Ausschnitt des Programms die Main-Funktion:
void main(void)
{
int iStatus = NO_ERROR;
unsigned char TxDataBuff[8] = {"RENESAS"};
unsigned char RxDataBuff[8];
/* Turn LEDs 0-3 OFF */
LED_PORT_DR = LEDS_OFF;
/* Initialize CAN */
InitCAN0();
/* Send continous message & receive messages */
while(1)
{
do
{
/* Setup write message for Slot / Message Box-0*/
WriteCAN0Message(0, 8, TxDataBuff);
/* Start message transmission */
SendCAN0Message(0);
/* Check for errors */
iStatus = Check_err_can01();
if(NO_ERROR != iStatus )
{
/* Orange LED ON*/
LED_PORT_DR = 0xD0;
continue; /* Try again */
}
/* Poll message at Slot / Message Box-6*/
iStatus = PollCAN0Message(6);
if(NO_ERROR != iStatus )
{
/* Red LED ON*/
LED_PORT_DR = 0x70;
continue; /* Try again */
}
if(NO_ERROR == iStatus )
{
/* Read message at Slot / Message Box-6*/
iStatus = ReadCAN0Message(6, RxDataBuff);
if( 0 != strcmp(TxDataBuff, RxDataBuff) )
{
/* Red LED ON*/
LED_PORT_DR = 0x70;
continue; /* Try again */
}
}
} while(NO_ERROR != iStatus);
/* Green LED ON*/
LED_PORT_DR = 0xE0;
}
/* End of the user program. This function must not exit. */
for(;;);
}