drew
26.06.2008, 18:19
Hallo,
ich versuche gerade bei einem AT90CAN im Betrieb ein MOb um zu programmieren, leider ohne großen Erfolg.
Der Bus und alle MOb's sind erst mal konfiguriert und laufen fehlerfrei. Nun möchte ich die Sende ID's und Emppfangs ID's ändern. Dazu setze ich erst die CANPAGE auf mein MOb und schreibe die ID:
CANPAGE = (u8Counter << 4); // select MOb
//CANSTMOB = 0x00; // reset channel status
if (u8Xtd != 0) // extended identifier? //MST !=0
{
// ID
CANIDT1 = (uint8)(u32Id >> 21);
CANIDT2 = (uint8)(u32Id >> 13);
CANIDT3 = (uint8)(u32Id >> 5);
CANIDT4 = (uint8)(u32Id << 3);
// ID mask
CANIDM1 = (uint8)(u32MaskLong >> 21);
CANIDM2 = (uint8)(u32MaskLong >> 13);
CANIDM3 = (uint8)(u32MaskLong >> 5);
CANIDM4 = (uint8)((u32MaskLong << 3) | (1 << IDEMSK));
CANCDMOB |= (1u << IDE); // reset control and dlc register
}
else // standard identifier
{
// ID
CANIDT1 = (uint8)(u32Id >> 3);
CANIDT2 = (uint8)(u32Id << 5);
// ID mask
CANIDM1 = (uint8)(u16MaskShort >> 3);
CANIDM2 = (uint8)(u16MaskShort << 5);
CANIDM4 = (1u << IDEMSK);
CANCDMOB &= ~(1u << IDE); // reset control and dlc register
}
Danach geht gar nichts mehr :-( .
Kann mir jemand weiter helfen? Muss ich den CAN-Controller erst deaktivieren? Ich hab schon mal versucht das MOb mit CANSTMOB zu reseten.
Schon mal Danke,
Drew
ich versuche gerade bei einem AT90CAN im Betrieb ein MOb um zu programmieren, leider ohne großen Erfolg.
Der Bus und alle MOb's sind erst mal konfiguriert und laufen fehlerfrei. Nun möchte ich die Sende ID's und Emppfangs ID's ändern. Dazu setze ich erst die CANPAGE auf mein MOb und schreibe die ID:
CANPAGE = (u8Counter << 4); // select MOb
//CANSTMOB = 0x00; // reset channel status
if (u8Xtd != 0) // extended identifier? //MST !=0
{
// ID
CANIDT1 = (uint8)(u32Id >> 21);
CANIDT2 = (uint8)(u32Id >> 13);
CANIDT3 = (uint8)(u32Id >> 5);
CANIDT4 = (uint8)(u32Id << 3);
// ID mask
CANIDM1 = (uint8)(u32MaskLong >> 21);
CANIDM2 = (uint8)(u32MaskLong >> 13);
CANIDM3 = (uint8)(u32MaskLong >> 5);
CANIDM4 = (uint8)((u32MaskLong << 3) | (1 << IDEMSK));
CANCDMOB |= (1u << IDE); // reset control and dlc register
}
else // standard identifier
{
// ID
CANIDT1 = (uint8)(u32Id >> 3);
CANIDT2 = (uint8)(u32Id << 5);
// ID mask
CANIDM1 = (uint8)(u16MaskShort >> 3);
CANIDM2 = (uint8)(u16MaskShort << 5);
CANIDM4 = (1u << IDEMSK);
CANCDMOB &= ~(1u << IDE); // reset control and dlc register
}
Danach geht gar nichts mehr :-( .
Kann mir jemand weiter helfen? Muss ich den CAN-Controller erst deaktivieren? Ich hab schon mal versucht das MOb mit CANSTMOB zu reseten.
Schon mal Danke,
Drew