CAN-BUS Fehler

Gast #831093
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
}
Gast #831745
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren