Servus, Nachdem mein MSP439F169 für meine Applikation nun zu langsam geworden ist, wollte ich mein komplettes Projekt nun auf den neuen MSP430F2417 mit 16 MHz Main-Clock laufen lassen. Das Portieren hat auch super geklappt; Keine Probleme mit Register oder Bezeichungen. Einziges Problem: Ich habe auf dem MSP430F169 eine Assemler-Funktion zum genauen Ausführen von Zeit-Intervallen genutzt. Sobald ich diese Funktion nun auf dem 2417 benutze, stürzt das Programm beim Verlassen der Funktion komplett ab. Der Code: Header: #ifndef __SUPPORT_H #define __SUPPORT_H void DelayCycles(unsigned int Count); #endif Source: ;----------------------------------------------------------------------- --- ; Name: support.asm ;----------------------------------------------------------------------- --- .cdecls C,LIST,"msp430x241x.h" ;----------------------------------------------------------------------- --- ; Exported Symbols ;----------------------------------------------------------------------- --- .def DelayCycles ;----------------------------------------------------------------------- --- ; Implementation ;----------------------------------------------------------------------- --- .text ;----------------------------------------------------------------------- --- ; DelayCycles ; ; Delays the program flow by the given number of cycles (R12). The parameter ; MUST be >= 20 (decimal). ; ; IN: R12 ;----------------------------------------------------------------------- --- DelayCycles ; call #DelayCycles (5 cyc) push R12 ; Save R12 (3 cyc) sub.w #17,R12 ; Adjust cycle count (2 cyc) clrc ; Clear carry bit (1 cyc) rrc.w R12 ; Divide by 2 (1 cyc) rra.w R12 ; Divide by 2 (1 cyc) Delay2 nop ; (1 cyc) dec.w R12 ; (1 cyc) jnz Delay2 ; (2 cyc) pop R12 ; Restore R12 (2 cyc) ret ; (2 cyc) ;----------------------------------------------------------------------- --- .end Da ich die Funktion nicht selber geschrieben, Assembler nie gelernt habe, aber trotzdem so genau zählen muss, wollte ich nun mal kurz nachfragen, ob hier jemand weiß, wo mein Problem liegen könnte. Für eine Antwort jeglicher Art sage ich schon mal DANKE!!!!
Also beim IAR Compiler für den MSP430 gibts die Funktion __delay_cycles schon fixfertig und Du musst nicht selber in Assembler hantieren. Vielleicht gibts ja sowas auch beim Compiler den Du verwendest. Definiert ist die Funktion übrigens in folgender Datei: intrinsics.h
Johnny B. schrieb: > Also beim IAR Compiler für den MSP430 gibts die Funktion __delay_cycles > schon fixfertig Nette Idee!!!!!! Aber leider scheint es diese Funktion beim CCE-Compiler nicht zu geben :( Oder kann mir jemand das Gegenteil zeigen? (Wäre toll!!!!!) Das scheint auch der Grund zu sein, warum der Urheber der Funktion diese neu schreiben musste! Aber trotzdem danke für die Antwort!!!!!
Habs gerade mit dem CCE getestet, geht auch. Wahrscheinlich musst Du auf die aktuellste Version updaten, dann steht das __delay_cycles() zur Verfügung. Allerdings kann ich kein .h oder .c File finden wo das definiert ist, keine Ahnung wie das genau funktioniert. Jedenfalls gehts. ;-)
In der Tat!!!!! Vielen Dank für den Tip! Läuft einwandfrei!!!!
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.