]> git.zerfleddert.de Git - proxmark3-svn/blobdiff - armsrc/util.c
Jump to the correct physical address in Flash. (The comment was wrong, it never used...
[proxmark3-svn] / armsrc / util.c
index 5af09f8868315538e4734e7de35d6f9e218a020d..8a3da63a898f5dae60299ef4f8502c50dd0c56b7 100644 (file)
@@ -86,7 +86,7 @@ void LED(int led, int ms)
        if (led & LED_RED2)\r
                LED_D_OFF();\r
 }\r
-       \r
+\r
 \r
 // Determine if a button is double clicked, single clicked,\r
 // not clicked, or held down (for ms || 1sec)\r
@@ -107,14 +107,14 @@ int BUTTON_CLICKED(int ms)
        PWM_CH_MODE(0) = PWM_CH_MODE_PRESCALER(10);\r
        PWM_CH_DUTY_CYCLE(0) = 0;\r
        PWM_CH_PERIOD(0) = 0xffff;\r
-       \r
+\r
        WORD start = (WORD)PWM_CH_COUNTER(0);\r
-       \r
+\r
        int letoff = 0;\r
        for(;;)\r
        {\r
                WORD now = (WORD)PWM_CH_COUNTER(0);\r
-               \r
+\r
                // We haven't let off the button yet\r
                if (!letoff)\r
                {\r
@@ -163,20 +163,20 @@ int BUTTON_HELD(int ms)
        // If we're not even pressed, forget about it!\r
        if (!BUTTON_PRESS())\r
                return BUTTON_NO_CLICK;\r
-       \r
+\r
        // Borrow a PWM unit for my real-time clock\r
        PWM_ENABLE = PWM_CHANNEL(0);\r
        // 48 MHz / 1024 gives 46.875 kHz\r
        PWM_CH_MODE(0) = PWM_CH_MODE_PRESCALER(10);\r
        PWM_CH_DUTY_CYCLE(0) = 0;\r
        PWM_CH_PERIOD(0) = 0xffff;\r
-       \r
+\r
        WORD start = (WORD)PWM_CH_COUNTER(0);\r
-       \r
+\r
        for(;;)\r
        {\r
                WORD now = (WORD)PWM_CH_COUNTER(0);\r
-               \r
+\r
                // As soon as our button let go, we didn't hold long enough\r
                if (!BUTTON_PRESS())\r
                        return BUTTON_SINGLE_CLICK;\r
@@ -185,7 +185,7 @@ int BUTTON_HELD(int ms)
                else\r
                        if (now == (WORD)(start + ticks))\r
                                return BUTTON_HOLD;\r
-               \r
+\r
                WDT_HIT();\r
        }\r
 \r
@@ -193,31 +193,11 @@ int BUTTON_HELD(int ms)
        return BUTTON_ERROR;\r
 }\r
 \r
+// attempt at high resolution microsecond timer\r
+// beware: timer counts in 21.3uS increments (1024/48Mhz)\r
 void SpinDelayUs(int us)\r
 {\r
        int ticks = (48*us) >> 10;\r
-       \r
-       // Borrow a PWM unit for my real-time clock\r
-       PWM_ENABLE = PWM_CHANNEL(0);\r
-       // 48 MHz / 1024 gives 46.875 kHz\r
-       PWM_CH_MODE(0) = PWM_CH_MODE_PRESCALER(10);\r
-       PWM_CH_DUTY_CYCLE(0) = 0;\r
-       PWM_CH_PERIOD(0) = 0xffff;\r
-       \r
-       WORD start = (WORD)PWM_CH_COUNTER(0);\r
-       \r
-       for(;;) {\r
-               WORD now = (WORD)PWM_CH_COUNTER(0);\r
-               if(now == (WORD)(start + ticks)) {\r
-                       return;\r
-               }\r
-               WDT_HIT();\r
-       }\r
-}\r
-\r
-void SpinDelay(int ms)\r
-{\r
-       int ticks = (48000*ms) >> 10;\r
 \r
        // Borrow a PWM unit for my real-time clock\r
        PWM_ENABLE = PWM_CHANNEL(0);\r
@@ -228,8 +208,7 @@ void SpinDelay(int ms)
 \r
        WORD start = (WORD)PWM_CH_COUNTER(0);\r
 \r
-       for(;;)\r
-       {\r
+       for(;;) {\r
                WORD now = (WORD)PWM_CH_COUNTER(0);\r
                if (now == (WORD)(start + ticks))\r
                        return;\r
@@ -237,3 +216,9 @@ void SpinDelay(int ms)
                WDT_HIT();\r
        }\r
 }\r
+\r
+void SpinDelay(int ms)\r
+{\r
+  // convert to uS and call microsecond delay function\r
+       SpinDelayUs(ms*1000);\r
+}\r
Impressum, Datenschutz