Hallo! Ich habe dieses Programm hier das für den MC9S12D64 geschrieben wurde! //-------------------------------------------------------------- #include <stdio.h> #include "hcs12dp256.h" //-------------------------------------------------------------- #pragma interrupt_handler isrOC2 void isrOC2(void) { TFLG1 = 0x04; // clear OC2 Intr Flag TC2 += 31250u; // 1 interrupt every 31250 timer ticks (0.5s) PTH ^= 0x80; // toggle LED } //-------------------------------------------------------------- void main(void) { // install OC2 pseudo vector in RAM // (if running with TwinPEEKs monitor) *((unsigned char *)0x3fe2) = 0x06; // JMP opcode *((void (**)(void))0x3fe3) = isrOC2; // make PTH[7] an Output to drive the LED DDRH |= 0x80; // Timer Setup TSCR1 = 0x80; // Timer enable TSCR2 = 0x07; // Prescaler = 128 (1 timer tick every 16μs) TCTL2 = 0x00; // TC2 disconnected from Pin TIOS |= 0x04; // TC2 is Output Compare TIE |= 0x04; // TC2 Interrupt enable // enable Interrupts asm("cli"); // loop endless (and let the interrupt work) while(1) ; } //============================================================== Ich habe es für meinen MC68HC912DG128A folgendermaßen umgeschrieben: //-------------------------------------------------------------- #include <stdio.h> #include "mc912d128.h" //-------------------------------------------------------------- #pragma interrupt_handler isrOC2 void isrOC2(void) { TFLG1 = 0x04; // clear OC2 Intr Flag TC2 += 31250u; // 1 interrupt every 31250 timer ticks (0.5s) DDRH ^= 0x80; // toggle LED } //-------------------------------------------------------------- void main(void) { // install OC2 pseudo vector in RAM // (if running with TwinPEEKs monitor) *((unsigned char *)0x3fe2) = 0x06; // JMP opcode *((void (**)(void))0x3fe3) = isrOC2; // make PTH[7] an Output to drive the LED DDRH |= 0x80; // Timer Setup TSCR1 = 0x80; // Timer enable TSCR2 = 0x07; // Prescaler = 128 (1 timer tick every 16ìs) TCTL2 = 0x00; // TC2 disconnected from Pin TIOS |= 0x04; // TC2 is Output Compare TIE |= 0x04; // TC2 Interrupt enable // enable Interrupts asm("cli"); // loop endless (and let the interrupt work) while(1) ; } //============================================================== Doch ich bekomme immer noch Fehlermeldungen! !E C:\Programme\iccv712\EIGENE~1\blink2.c(20): undeclared identifier `TSCR1' !E C:\Programme\iccv712\EIGENE~1\blink2.c(21): undeclared identifier `TSCR2' !E C:\Programme\iccv712\EIGENE~1\blink2.c(24): undeclared identifier `TIE' C:\Programme\iccv712\bin\imakew.exe: Error code 1 In meiner Include-Datei habe ich auch gesehen, dass diese Befehle TSCR1,TSCR2,TIE nicht enthalten sind! Doch wie bekomme ich nun das Programm zum laufen? THX!
Weiß denn niemand was??? Help I need help! ;)
Hab jetzt das Programm verändert -> anderes Bsp das gehen soll! Ist aber bis auf ein paar Ausnahmen dem obigen sehr ähnlich! Nun bekomme ich keine Fehlermeldungen mehr, aber nach dem Laden auf den Controller blinkt das Licht nicht wie es soll???? :( //-------------------------------------------------------------- #include <stdio.h> #include "mc912d128.h" //-------------------------------------------------------------- void _HC12Setup(void) { COPCTL = 0x08; // disable Watchdog } //-------------------------------------------------------------- #pragma interrupt_handler isrOC2 void isrOC2(void) { TFLG1 = 0x04; // clear OC2 Intr Flag TC2 += 31250u; // 1 interrupt every 31250 timer ticks (0.5s) PORTH ^= 0x80; // toggle LED } //-------------------------------------------------------------- void main(void) { // install OC2 pseudo vector in RAM // (if running with TwinPEEKs monitor) *((unsigned char *)0x07e2) = 0x06; // JMP opcode *((void (**)(void))0x07e3) = isrOC2; // make PTH[7] an Output to drive the LED DDRH |= 0x80; // Timer Setup TSCR = 0x80; // Timer enable TMSK2 = 0x07; // Prescaler = 128 (1 timer tick every 16ìs) TCTL2 = 0x00; // TC2 disconnected from Pin TIOS |= 0x04; // TC2 is Output Compare TMSK1 |= 0x04; // TC2 Interrupt enable // enable Interrupts asm("cli"); // loop endless (and let the interrupt work) while(1) ; } //============================================================== Warum???? Wo steckt der Fehler? THX!
Link: Use the "Custom" Linker Setting with the following options: // Program Memory = 0x8000 // Data Memory = 0x0200 // Stack Pointer = 0x0700 Wenn ich das beim Kompilieren ändere, dann geht die Lampe nach dem Laden des Programms aus aber blinkt nicht ???
1 | // install OC2 pseudo vector in RAM
|
2 | // (if running with TwinPEEKs monitor)
|
3 | *((unsigned char *)0x07e2) = 0x06; // JMP opcode |
4 | *((void (**)(void))0x07e3) = isrOC2; |
Laut 912DG128A RM ist dieser Bereich nicht vergeben, dort ist also kein RAM. Im card12v11 Manual Seite 12 ( http://elmicro.com/files/elmicro/card12v11_manual_de.pdf )liegen die Vektoren 0x3F00- 0x3FFF, also am Ende des RAM welches von 0x2000 - 0x4000 geht. D.h. folgendes ist korrekt.
1 | // install OC2 pseudo vector in RAM
|
2 | // (if running with TwinPEEKs monitor)
|
3 | *((unsigned char *)0x3FE2) = 0x06; // JMP opcode |
4 | *((void (**)(void))0x3FE3) = isrOC2; |
Der Linker muss natürlich auch korrekt bedatet werden. Data Memory und Stackpointer müssen geändert werden.
Karl L. schrieb: >
1 | > // install OC2 pseudo vector in RAM |
2 | > // (if running with TwinPEEKs monitor) |
3 | > *((unsigned char *)0x07e2) = 0x06; // JMP opcode |
4 | > *((void (**)(void))0x07e3) = isrOC2; |
5 | >
|
> > Laut 912DG128A RM ist dieser Bereich nicht vergeben, dort ist also kein > RAM. > Im card12v11 Manual Seite 12 ( > http://elmicro.com/files/elmicro/card12v11_manual_de.pdf )liegen die > Vektoren 0x3F00- 0x3FFF, also am Ende des RAM welches von 0x2000 - > 0x4000 geht. > > D.h. folgendes ist korrekt. > >
1 | > // install OC2 pseudo vector in RAM |
2 | > // (if running with TwinPEEKs monitor) |
3 | > *((unsigned char *)0x3FE2) = 0x06; // JMP opcode |
4 | > *((void (**)(void))0x3FE3) = isrOC2; |
5 | >
|
> > Der Linker muss natürlich auch korrekt bedatet werden. Data Memory und > Stackpointer müssen geändert werden. Du bist mein Held für heute!!!! DANKE! ;) Ich muss sagen, ist wirklich komplex dieser Controller... ein kleiner Fehler und schon geht gar nix mehr! :)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.