Datum: 18.12.2007 05:38
Hallo liebe Experten, fuer mein Projekt - einer Drehzahlregelung eines Reihenschluss DC-Motors - expermentiere ich gerade mit dem C167CS-LM auf einem Phytec Evalboard KitCon-167. Zum Ueben wollte ich das Hands-On Training von Infineon durchgehen. Dafuer habe ich DAvE einen Code fuer den GPT1 generieren lassen (Eine Schande - ich weiss, aber als Einsteiger...) Das Evalboard ist mit zwei mal 256KB RAM (an CS1 und CS2) sowie zwei mal 1MB Flash (an CS0 und CS3) bestueckt. Die Startdatei Start167.A66 habe ich von DAvE erstellen lassen und folgende Register angepasst: BUSCON0 = 0x04AF BUSCON1 = 0x04AF ADDRSEL1 = 0x0006 Den Code habe ich angehaengt, interessant sind main.c und gpt1.c. Ich kompiliere und debugge mit Keil uVision3. Die Einstellungen vom Target sind die Folgenden: - 5Mhz Oszi - ROM 0x0 - 0x4000 - RAM 0x40000 - 0x44000 - Monitor: Phytec KC167CR an COM1 bei 9600 Baud (mehr geht natuerlich auch) - 8H-0BH, 0ACH-0AFH fuer Monitor reserviert Der Timer wird in der Datei gpt1.C initialisiert und arbeitet folgendermassen: - T2/T4 als Quellen fuer T3 (je nach T3 Toggle Latch) - T3 als Timer mit Alternate Output P3.3 Wenn ich ein Oszilloskop an P3.3 (Pin 106 am X3 vom kitCON) anschliesse und debugge rauscht das Signal nur ein Bisschen, aber von Pulsen ist weit und breit nichts zu sehen. Auch wundert mich, dass wenn ich mir die Timer im Debug Modus von uVision anzeigen lasse sind alle Register und Timer nach einem Stop auf "0". Selbst wenn Sie die dann dort von Hand einstelle und das Toggle Latch staendig invertiert wird, sowie der Ausgang gesetzt ist (T3OE = 1, DP3.3 = 1) tut sich nichts. Hier meine main.c:
#include "MAIN.H" void MAIN_vInit(void) { GPT1_vInit(); PSW_IEN = 1; } void main(void) { MAIN_vInit(); while(1) {}; } |
und meine GPT1-Initialisierung gpt1.c:
#include "MAIN.H" void GPT1_vInit(void) { T3CON = 0x0201; // load timer 3 control register T3 = 0x0000; // load timer 3 register T2CON = 0x0025; // load timer 2 control register T2 = 0xC000; // load timer 2 register T4CON = 0x0026; // load timer 4 control register T4 = 0x4000; // load timer 4 register P3 = (P3 & ~(uword)0x0008) | 0x0008; //set data register DP3 = (DP3 & ~(uword)0x0008) | 0x0008; //set direction register T3CON_T3R = 1; // timer 3 run bit is set } |
Fuer Anregungen, Tips, Kritiken bin ich sehr dankbar. Langsam weiss alleine nicht mehr weiter. LG Maze
Datum: 18.12.2007 05:39
hier ist meine Startup-Datei, insgesamt sind folgende Dateien eingebunden: start167.a66 main.c main.h intrins.h gpt1.h gpt1.c
Datum: 18.12.2007 09:55
Läuft Dein Programm richtig hoch?
Toggle zuerst einen beliebigen Port. Kontrolliere diesen mit dem Oszi,
oder besser gebe etwas über RS232 aus.
> ROM 0x0 - 0x4000
bist Du dir da sicher?
Datum: 18.12.2007 12:10
Hi Max! Zum Hochlauf: Ich befürchte auch, dass das Programm nicht richtig initialisiert und werde das mit der Seriellen Schnittstelle oder nem getoggelten Pin prüfen, so bald ich wieder im Lab bin. Aber warum das so ist ist mir weiterhin leider ein Rätsel. Zum Speichermodell: So wie ich das verstanden habe kann ich mir aussuchen wo ich meine Adresse von RAM und Flash hinlege und lege das mit den ADDRESELx Registern fest. Oder sehe ich das falsch? Auf jeden Fall läuft ein simples LED blinky mit dieser Konfiguration. so far...
Datum: 18.12.2007 14:06
Datum: 18.12.2007 21:46
Hallo Max, den thread hatte ich mir schon mal durchgelesen. Ich hatte zunächst auch das Problem "Connection to Target System lost", aber mit den (hoffentlich) richtigen Einstellungen für Monitor, Target und Initialisierungsregistern (auch auf die Waitstates achten!) habe ich das in Griff bekommen. Leider scheinen meine Timer nicht initialisiert zu werden (alle Register sind auf Restet-Wert) - daher kein Ausgang....aber leider auch nicht wenn ich ToggleBit, T3OE und DP3.3 manuell setze. Hat keiner sonst einen Schimmer? Wäre echt super!
Datum: 18.12.2007 23:12
Hatte damals ebenfalls probleme mit den timern im debbuging modus (u3V). Woran es lag habe ich leider nie genau kappiert, aber wenn ich nicht im debbuging modus war, und vom flash bootete hatte ich damit nie probleme... habe mit einer älteren Dave version gearbeitet, ist mir nicht ganz klar wofür PSW_IEN steht (Interrupt enable?, PWM-Generator?) Aber wenn du einem pin ne spezielle funktion gibst, kanst du diesen normalerweise im debbugingmodus nicht mehr von hand verstellen..., tippte daher auf einen initialisierungsfehler (wobei was ich hier sehe, soweit passen sollte)
Datum: 19.12.2007 03:30
Hi David. Flash: Ich habs auch schon mal als H86 geflashed - ging leider auch nicht. Aber ich probiere es nochmal. PSW: Steht für Prozessor-Status Wort. Eigentlich sind darin die Interrupt/PEC Level des derzeitig ausgeführten Programmes drinn. PSW_IEN spiel hier eigentlich keine Rolle. Das Bit sperrt oder gibt global alle Interrupts frei (außer NMI = Non Maskerable Interrupts) Debugg-Modus: Das könnte sein, allerdings erlaubt mir uVison, das setzen von Bits im Debug-Modus (Peripherals). Weiss nicht genau was das bewirkt - nen Pulsausgang jedoch leider nicht...
Antwort schreiben
Die Angabe einer Email-Adresse ist freiwillig. Wenn Sie automatisch per Email über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
- Suchfunktion und Betreffsuche benutzen - vielleicht gibt es schon einen ähnlichen Beitrag
- Aussagekräftigen Betreff wählen
- Im Betreff angeben um welchen Controllertyp es geht (AVR, PIC, ...)
- Groß- und Kleinschreibung verwenden
- Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang
- JPEG-Dateien (.jpg) nur für Fotos und Scans verwenden
- Schaltpläne, Screenshots usw. als PNG oder GIF anhängen
Formatierung (mehr Informationen...)
- [c]C-Code[/c]
- [avrasm]AVR-Assembler-Code[/avrasm]
- [pre]vorformatierter Text (z.B. Code in anderen Sprachen)[/pre]
- [math]Formel in LaTeX-Syntax[/math]
- [[Titel]] - Link zu Artikel