Forum: Mikrocontroller und Digitale Elektronik Probleme mit Mikrocontroller XC886


von Patrick (Gast)


Lesenswert?

Guten Abend,

ich habe mir von Infineon das Starter-Kid mit dem Mikricontroller XC886 
und einen Emulator (USB-Wiggler) geholt. Ich habe dann gleich alle Tool 
installiert (DAVE,Keil usw). Wenn wenn ich das Tool XC800_FLOAD.exe 
ausführe und dann auf den Button "Find Device" drücke, dann wird das 
Gerät nicht erkannt. In der Liste sehe ich nur den COM1. Das ist ja 
meine serielle Schnittstelle. In uVision bekomme ich auch keine 
Verbindung zustande.
Bin jetzt ratlos!!!

von Ralph (Gast)


Lesenswert?

Hast du daran gedacht den BSL Jumper zu setzen bevor du "Find Device " 
drückst? Und sobald XC800 das Device sucht musst du den Resettaster 
drücken.

So funktioniert es zumindest beim XC866 Starterkit, und hier wird es das 
gleiche sein.

von Carsten S. (carsten)


Lesenswert?

Hast du auch die USB-Treiber für den USB-UART-Chip installiert? Schau 
mal in deiner Systemsteuerung ob das Board richtig erkann wird. (Unknown 
USB-Device ist schlecht, z.B. COM8 ist gut)

Wieso nutzt du den BSL und nicht den USB-Wiggler? (nehme an ULINK oder 
Tantino von Hitex)

von Patrick (Gast)


Lesenswert?

Gestern Nacht, habe ich es geschafft, ein HEX File mit dem Tool 
XC800_FLOAD.exe auf den Mikrocontroller zu laden. Ich habe nur das USB 
Kabel zwischen PC und Starter-Kid angeschlossen.
Mit dem Emulator USB-WIGGLER habe ich noch so meine Probleme. Unter 
uVision habe ich das ganze für den USB-Emulator eingerichtet. Wenn ich 
das Projekt comiliere und anschließend auf LOAD gehe, dann wird der 
EMULATOR gar nicht erkannt. Ich habe dann keine Verbindung. Was muss man 
bei dem EMULATOR alles beachten? Vielleicht habe ich noch ein paar 
Einstellungsfeher?

von Carsten S. (carsten)


Lesenswert?

Du must den Debugger einmal bei "Debug" in Projektsettings einstellen 
und zum Programmieren auch noch unter "Utilities->Use Target Driver for 
Flash Programming"

von Patrick (Gast)


Lesenswert?

Muss man noch Jumper entfernen oder setzen? Die grüne LED blinkt 
ständig.
Die anderen LED RUN und COM sind immer aus.

von Carsten S. (carsten)


Lesenswert?

eigentlich nicht.

edit: Kannst aber mal den BSL-Jumper offen lassen.

von Patrick (Gast)


Angehängte Dateien:

Lesenswert?

Ok ich lade jetzt die HEX Dateien immer mit dem Tool XC800_FLOAD auf den 
Mikrocontroller. Das tut jetzt! Mit dem Starter-Kid bin ich gerade dabei 
eine CAN Verbindung zu dem CAN Dongle von der Firma PeakTech zu 
realisieren.
Als Baudrate verwende ich 500kBit/s. Mit einem zweiten CAN Dongle habe 
ich die CAN verbindung zu meinem anderen CAN Dongle getestet. Das tut 
auch.
Ich habe mit DAVE eine CAN Kommunikation für den Controller 
eingerichtet.
Ich sehe auf meinem PC keine Botschaften vom Mikrocontroller.
Hat jemand schon mal eine CAN Verbindung mit dem Mikrocontroller 
realisert?

von Patrick (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe mir einen FIFO-Puffer mit 3 Message Objekten gebildet, um 
CAN-Pakete zu Empfangen und zu einem späteren Zeitpunkt zu bearbeiten.

Objekt Liste von CAN Node 1 sieht folgendermassen aus:

Message Object 0-1 => FIFO-Puffer Objekte
Message Object 2 => FIFO Base Object

Ich nutze die von Dave generierte Funktion CAN_ubReadFIFO um aktuelle
Nachrichten aus dem FIFO-Puffer zu laden und dann zu bearbeiten.

main(void)
{
 ...
 while(1)
   {
    CAN_ubReadFIFO(2,&receive);
    wait(500); // Verzögerung
    P3_DATA = receive.datenByte1;
   }
}

Leider gibt die Funktion CAN_ubReadFIFO nur das erste CAN Paket (über
den als Paramter übergebenen Zeiger) das ankommt zurück (Rückgabewert
der Funktion ist 1, was dafür steht, dass ein neues CAN-Pakete über den
Zeiger zurückgegeben wurde). Bei jedem weiteren gibt die Funktion den
Wert 0 zurück, was laut Funktionsbeschreibung aussagt, dass keine neuen
Pakete vorliegen.

Nun weiss ich leider nicht ob das Problem an der Funktion liegt oder das
angekommene Paket gar nicht erst in den FIFO-Puffer eingetragen wurde
und deshalb die Funktion nichts zurück liefert.

Muss ich noch etwas beachten, evtl. in DAVE ?

von Patrick (Gast)


Lesenswert?

1
void SHINT_viXINTR5Isr(void) interrupt XINTR5INT
2
{
3
  CAN_pushAMRegs();  // Push the CAN Access Mediator Registers
4
  IRCON2 &= ~(ubyte)0x01;   // Clear CANSRC0
5
6
  CAN_vWriteCANAddress(CAN_MSPND0);   //Addressing CAN_MSPND0
7
  CAN_DATA0 = ~(0x01);       // clear message pending register
8
  CAN_vWriteEN(D0_VALID);    // bitposition 0 ( message object 0 )
9
10
  CAN_vWriteCANAddress(CAN_MOCTR0);   // Addressing CAN_MOCTR0
11
  CAN_DATA0 = 0x09;   // Reset RxPND and NEWDAT flag for object 0
12
  CAN_vWriteEN(D0_VALID);
13
  CAN_vWriteCANAddress(CAN_MODATAL0);
14
  CAN_vReadEN();
15
  P3_DATA = CAN_DATA0;
16
17
  CAN_popAMRegs();      // restore the CAN Access Mediator Registers
18
}  //  End of function SHINT_viXINTR5Isr

Wofür ist das Register MSPND eigentlich gut? Das was im Datenblatt 
darüber steht, verstehe ich nicht. Warum muss dieses Bit wieder 
zurückgesetzt werden?

Wenn ich in der ISR die Funktion CAN_vGetMsgObj verwende, muss ich doch 
auch das entsprechende Bit vom MSPND Register sowie MOCTR Register 
zurücksetzen oder?

von Patrick (Gast)


Lesenswert?

Eigentlich müsste man das Interrupt Pending Register gar nicht 
zurücksetzen.

von Carsten S. (carsten)


Lesenswert?

Wenn ein Interrupt des CAN-Moduls erzeugt werden soll wird ein Bit im 
Pending-Register gesetzt. Anhand von diesen Bits wird ein Interrupt 
ausgelöst. Man geht über das Pending-Register, weil es deutlich mehr 
Interruptquellen als Vektoren gibt und irgendwie muss man ja entscheiden 
können wer den Interrupt ausgelöst hat (auch für Priorisierung der 
Interrupts wichtig). Wenn man diese Bits nicht zurück setzt, dann meint 
der µC dass dauernd ein Interrupt verlangt wird.

von Patrick (Gast)


Lesenswert?

Die bedeutet ich kann in der ISR mit einer IF Bedingung das MSPND 
Register prüfen. Wenn z.B. Bit 2 auf 1 liegt, dann kann ich die Funktion 
CAN_vGetMsgObj ausführen. Anschließend muss man dieses Bit im MSPND 
Register wieder löschen. Stimmt dies so?

von Patrick (Gast)


Lesenswert?

Bei mir greifen mehrere Message Objekte (Receive) auf eine ISR zu.
Dies bedeutet ich muss ja prüfen, welcher Message Objekt gerade die 
Nachricht empfängt. Da kann man ja das MSPND Register gut dazu 
verwenden.

von Patrick (Gast)


Lesenswert?

In der ISR kann ich maximal 3 Message Objekte empfangen. Dies hab ich so 
konfiguriert.

void SHINT_viXINTR5Isr(void) interrupt XINTR5INT
{
  CAN_pushAMRegs();  // Push the CAN Access Mediator Registers
  IRCON2 &= ~(ubyte)0x01;   // Clear CANSRC0

  CAN_vWriteCANAddress(CAN_MSPND0);   //Addressing CAN_MSPND0
  CAN_DATA0 = ~(0x2E);       // clear message pending register
  CAN_vWriteEN(D0_VALID);    // bitposition ? ( message object 1  2  5 
)

  CAN_vWriteCANAddress(CAN_MOCTR1);   // Addressing CAN_MOCTR1
  CAN_DATA0 = 0x09;   // Reset RxPND and NEWDAT flag for object 1
  CAN_vWriteEN(D0_VALID);

  CAN_vWriteCANAddress(CAN_MOCTR2);   // Addressing CAN_MOCTR2
  CAN_DATA0 = 0x09;   // Reset RxPND and NEWDAT flag for object 2
  CAN_vWriteEN(D0_VALID);

  CAN_vWriteCANAddress(CAN_MOCTR5);   // Addressing CAN_MOCTR5
  CAN_DATA0 = 0x09;   // Reset RxPND and NEWDAT flag for object 5
  CAN_vWriteEN(D0_VALID);


  CAN_popAMRegs();      // restore the CAN Access Mediator Registers

  CAN_vGetMsgObj(1,&stCAN);
  ....
  CAN_vGetMsgObj(2,stCAN);
  ...
  CAN_vGetMsgObj(5,stCAN);
  ...
}  //  End of function SHINT_viXINTR5Isr

Muss ich überhaupt in diesem Fall das Message Pending Register 
zurücksetzen oder nicht? Wenn ja woher weiss ich welches Bit ich genau 
zurücksetzen sollte? Das RxPND und das NEWDAT Flag sollte man ja 
definitiv immer wieder zurücksetzen.

von Patrick (Gast)


Lesenswert?

Also ich finde es macht hier in diesem Fall nicht sehr viel Sinn. 
Wichtig ist doch blos, dass das PxPND und NEWDTA Flag wieder 
zurückgesetzt werden.

von Patrick (Gast)


Lesenswert?

Egal ob ich in der ISR das MSPND Register lösche oder auch nicht,
das Empfangen der Nachrichten wird davon nicht beeinträchtigt.
Also ich kann da auch nichts feststellen. Der ISR wird immer ausgelöst, 
sobald ich eine entsprechende CAN Nachricht auf den CANBUS gebe.

von Patrick (Gast)


Lesenswert?

Gibt es in diesem Forum jemand der sehr gute Erfahrungen hat mit dem 
XC888?
Mich würde dies interessieren ob ich trotz all dem in der ISR das MSPND 
Register dementsprechend löschen muss.

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.