Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/stat.h>
- #include <fcntl.h>
- #include <time.h>
- #include <stdint.h>
- #define DEFAULT_DELAY 1
- uint32_t m_nStart; //DEBUG Stopwatch start cycle counter value
- uint32_t m_nStop; //DEBUG Stopwatch stop cycle counter value
- #define DEMCR_TRCENA 0x01000000
- /* Core Debug registers */
- #define DEMCR (*((volatile uint32_t *)0xE000EDFC))
- #define DWT_CTRL (*(volatile uint32_t *)0xE0001000)
- #define CYCCNTENA (1<<0)
- #define DWT_CYCCNT ((volatile uint32_t *)0xE0001004)
- #define CPU_CYCLES *DWT_CYCCNT
- #define STOPWATCH_START { m_nStart = CPU_CYCLES; }/*DWT_CYCCNT;}*/
- #define STOPWATCH_STOP { m_nStop = CPU_CYCLES; }
- static inline void stopwatch_reset(void)
- {
- /* Enable DWT */
- DEMCR |= DEMCR_TRCENA;
- *DWT_CYCCNT = 0;
- /* Enable CPU cycle counter */
- DWT_CTRL |= CYCCNTENA;
- }
- static inline uint32_t stopwatch_getticks()
- {
- return CPU_CYCLES;
- }
- static inline void stopwatch_delay(uint32_t ticks)
- {
- stopwatch_reset();
- while(1)
- {
- if (stopwatch_getticks() >= ticks)
- break;
- }
- }
- uint32_t CalcNanosecondsFromStopwatch(uint32_t nStart, uint32_t nStop)
- {
- uint32_t nTemp;
- uint32_t n;
- uint32_t SystemCoreClock = 180000000;
- nTemp = nStop - nStart;
- nTemp *= 1000; // Scale cycles by 1000.
- n = SystemCoreClock / 1000000; // Convert Hz to MHz. SystemCoreClock = 168000000
- nTemp = nTemp / n; // nanosec = (Cycles * 1000) / (Cycles/microsec)
- return nTemp;
- }
- int main( int argc, char **argv )
- {
- int btn; //User Button status
- int ld = 1; /*LED value*/
- long int diff;
- int delay = DEFAULT_DELAY; // Initial value for the delay
- int timeDiff = 0;
- STOPWATCH_START;
- printf("Try...\n\n");
- STOPWATCH_STOP;
- timeDiff = CalcNanosecondsFromStopwatch(m_nStart, m_nStop);
- printf("My function took %d nanoseconds\n", timeDiff);
- return( 0 );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement