Gast
#1759145
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!!!!