Ich bin gerade dabei ein Projekt auf das Discovery Board zu portieren. Nun benoetige ich eine Funktion die eine Anzahl von Mikrosekunden wartet. Ich habe bisher nichts fertiges gefunden. Gibt es da was? Danke fuer eure Hilfe!
Nicht ganz... etwas müsstest Du rechnen. Es gibt den cycle-counter an Adresse 0xE0001000, 0xE0001004. Der wird mit jedem ALU Takt inkrementiert. An 0xE0001000 habe ich Bits 0 und 12 auf '1' geknipst, um ihn zu aktivieren. Und an 0xE000EDFC Bit 24 auf '1'. Solltest Du alles im CortexM3 Core Manual von ARM nachlesen können.
Hallo, wigo schrieb: > Ich habe bisher nichts fertiges gefunden. Gibt es da was?´ Als Anlage findest du die Dateien systick.h und systick.c starten: #include "systick.h" int main(void) { SystemInit(); systickInit(1000); //1000 ticks per second .......... In der systick.c findest du einen Hinweis!! // TODO: nasty constant for timing. This value correct for STM32F4 at 72MHz #define COUNTS_PER_MICROSECOND 22 Ich kann dir gerade nicht sagen, ob ich das mit 168Mhz oder 72Mhz verwendet habe! Eventuell COUNTS_PER_MICROSECOND 22 anpassen. Bitte testen! Gruß G.G.
Für meine delay_ms() benutz ich den Systick, das kann zwar um 1 ms schwanken, aber das reicht mir meistens aus. Für die delay_us() kommt es mir meistens nicht auf die exakte Verzögerung an, da benutz einfach nur eine kleine Schleife, die runterzählt. Die Schleifendurchläufe hab ich mir mit einem Logic Analyzer angenähert, aber die können durchaus um 25%-50% schwanken Bei 168 MHz ergibt das bei mir:
1 | void time_waitMs(uint32_t delayMs) { |
2 | uint32_t end = time_getMS() + delayMs + 1; |
3 | while(end > time_getMS()) { |
4 | }
|
5 | }
|
6 | |
7 | void time_waitUs(uint16_t delay) { |
8 | // determined by trial and error...
|
9 | uint8_t temp; |
10 | while (delay) { |
11 | temp = 12; |
12 | while(temp) { |
13 | temp--; |
14 | }
|
15 | delay--; |
16 | }
|
17 | }
|
18 | |
19 | void time_waitNs(uint16_t delay) { |
20 | // determined by trial and error...
|
21 | delay = delay >> 6; |
22 | while (delay) { |
23 | delay--; |
24 | }
|
25 | }
|
Danke. Ich habe den ersten Vorschlag umgesetzt da bei mir kuerzere Toleranzen nach oben weniger Stromverbrauch bedeuten. Details zur Implementierung findet ihr hier: http://forums.arm.com/index.php?/topic/13949-cycle-count-in-cortex-m3/page__view__findpost__p__33194
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.