Forum: Mikrocontroller und Digitale Elektronik CAN-BUS Fehler


von SVEN (Gast)


Lesenswert?

VIC Initialisieren ?
wie wird der Interrupt Controller initialisiert damit ich CAN Nachricht 
empfangen kann.wo soll ich was einstellen??
ich kriege einen fehler beim empfangen, CRC delimiter?
danke von Voraus für eure Hilfe

von Willivonbienemaya .. (willivonbienemaya)


Lesenswert?

Wär nicht schlecht wenn du dich mal hinsetzt und dir erst mal überlegst 
was dein Problem ist und wie du es am besten formulierst.

Ich versteh kein Wort.

von SVEN (Gast)


Lesenswert?

sorry,
ich was vergessen,also ich arbeite mit der LPC2378, ich möchte den 
Interrupt Controller initialisieren damit ich eine CAN Nachricht 
bekommen kann.?
ich denke es ist klar jetzt?

von Peter (Gast)


Lesenswert?

etwa so :

void init_can(UINT32 BTR)
  {
  // Power Control
  PCONP = PCONP | 0x00006000; // aktiviert CAN1 und CAN2 (Bit PCAN1 = 
PCAN2 = 1)

  // Der CAN Controller läuft mit halbem Prozessortakt = 36 MHz(72MHz/2)
  // Initialisation of CAN interfaces

  CANFilter = 0;                      // Reset and disable all message 
filters

  CAN_AFMR = 0x00000001;              // Acceptance Filter Mode Register 
= off !

  CAN1MOD = 1;                        // Mode Register: 
Reset Mode
  CAN1IER = 0;                        // Interrupt Enable Register: 
Disable All Interrupts
  CAN1GSR = 0;                        // Status Register: 
Clear Status register
  CAN1BTR = BTR;                      // BTR Register:              Set 
bit timing

  CAN1EWL = 0x0000007F;               // Error Warning Level auf 0x7F
                                      // läuft auf 0x80 wenn Knoten 
alleine am Bus

  VICVectAddr23 = (unsigned long)CAN_CANISR;   // Set interrupt vector
  VICVectCntl23 = 6;                  // Priorität 6
  VICIntEnable = 0x00800000;          // Enable CAN Interrupt

  CAN1IER = 1;                        // Interrupt Register: 
Enable Receive Interrupt
  CAN1MOD = 0;                        // Mode register: 
Operating Mode
}

von SVEN (Gast)


Lesenswert?

hallo,
ich habe die gleiche Initialisation gemacht
DWORD CAN_Init( DWORD can_btr )
{

  PCONP |= (1 << 13) | (1 << 14);  // Enable clock to the peripheral

  PINSEL0  &= ~0x00000F0F;
  PINSEL0 |= 0x0000A05;  // port0.0~1, function 0x01, port0.4~5, 
function 0x10

  CAN1MOD = CAN2MOD = 1;  // Reset CAN
  CAN1IER = CAN2IER = 0;  // Disable Receive Interrupt
  CAN1GSR = CAN2GSR = 0;  // Reset error counter when CANxMOD is in 
reset

  CAN1BTR = CAN2BTR = can_btr;
     // Install CAN interrupt
  VICVectAddr0  =(unsigned long)CAN_RX2_ISR;// Adresse der 
Interrupt-Service-Routine wird in die Interrupt-Vector-Tabelle 
eingetragen
  VICVectCntl0   = 0x00000034;       // die 5 ersten bits stellt die 
Interrupt Slot Nummer fest = 20  und 6-Bit enablt diese Slot
  VICIntEnable  = 0x00800000;      // Enable C2Rx Interrupt  (Bit 23)
  CAN1IER = CAN2IER = 0x01;    // Enable receive interrupts
  CAN1MOD = CAN2MOD = 0x0;  // CAN in normal operation mode
  return( TRUE );
}

es kommt keine Interrupt,ich weiss nicht woran es liegt???
MFG SVEN

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.