Gast
#1122146
Hallo, ich benutze zu Programmierung den ADuC7020 mit ARM7 TDMI Kern. Da ich ziemliche Probleme mit dem Ausreichen der Rechenzeit für meine Anwendung hatte und für mich erstaunlich war, wie lange übersetzter c Code benötigte, habe ich einen Versuch gemacht, mit inline Assembler Befehlen Daten vom SPI Empfangsregister zu lesen, zwischenzuspeichern und wieder auf das SPI Senderegister zu legen. Um die Zeit zu messen die das benötigt lasse ich einen Portpin toggeln. Folgende (inline) assembler Codezeilen machen dies. Hinter die Befehle, also direkt hinter dem Kommentarzeichen "//" habe ich die Anzahl der Zyklen, die sich meiner Meinung nach nach dem ARM technical reference manual für ARM7 TDMI Chapter 6 ergeben geschrieben. __asm("str r5,[R4,#0x24]"); //2 set port bit P0.4 to high __asm("ldr r0,[r1,#0x04]"); //3 cycles //store contents of SPIRX //(contents of datas locted on adress r1+0x04 = 0xFFFF0A04) into r0 __asm("strh r0,[r2,#0x00]");//2 __asm("str r0,[r1,#0x08]"); //2 //store datas in r0 onto SPITX //(datas on adress r1 +0x08) __asm("str r5,[R4,#0x28]"); //2/ /set port bit P0.4 to low der Controller Arbeitet im ARM Mode und die ECLK mit der der Kern getaktet wird beträgt 41,78 MHz (höchst mögliche Taktrate) Rechnerisch ergibt sich, wenn man voraussetzt, dass ECLK und Instruction Cycle clk die gleiche Frequenz haben für die Befehle folgende Zeit: (2+3+2+2+2)*1/(41,78 MHz) )=263nsec Am Portpin messe ich allerdings eine Zeit für die Befehle von etwa 500nsec Woran liegt der große Unteschied zwischen errechnetem und gemessnen Wert?? Habe ich die Angaben zu den instruction cycles im technical reference manual für ARM 7 TDMI falsch interpretiert? Leider finde ich im ARM technical reference manual nirgends die Stelle wo steht in welchem Vehältnis ECLK und instruction cycle clock stehen. Weiss das jemand oder hat jemand eine Idee wo ich das nachlesen kann?? Hat Jemand Erfahrung mit diesem Mikrocontroller oder diesem Kern bzgl. Rechnezeitoptimierung gemacht? Danke für eure Hilfe! Gruß Samuel