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:
1 | #include "MAIN.H"
|
2 |
|
3 | void MAIN_vInit(void)
|
4 | {
|
5 | GPT1_vInit();
|
6 | PSW_IEN = 1;
|
7 | }
|
8 |
|
9 | void main(void)
|
10 | {
|
11 | MAIN_vInit();
|
12 | while(1) {};
|
13 | }
|
und meine GPT1-Initialisierung gpt1.c:
1 | #include "MAIN.H"
|
2 |
|
3 | void GPT1_vInit(void)
|
4 | {
|
5 | T3CON = 0x0201; // load timer 3 control register
|
6 | T3 = 0x0000; // load timer 3 register
|
7 |
|
8 | T2CON = 0x0025; // load timer 2 control register
|
9 | T2 = 0xC000; // load timer 2 register
|
10 |
|
11 | T4CON = 0x0026; // load timer 4 control register
|
12 | T4 = 0x4000; // load timer 4 register
|
13 |
|
14 | P3 = (P3 & ~(uword)0x0008) | 0x0008; //set data register
|
15 | DP3 = (DP3 & ~(uword)0x0008) | 0x0008; //set direction register
|
16 |
|
17 | T3CON_T3R = 1; // timer 3 run bit is set
|
18 |
|
19 | }
|
Fuer Anregungen, Tips, Kritiken bin ich sehr dankbar. Langsam weiss
alleine nicht mehr weiter.
LG Maze