1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- #ifndef IO_H
- #define IO_H
- #include <stdint.h>
- #include <stdarg.h>
- #include <stdbool.h>
- #include "ioregs.h"
- static inline void pause(void)
- {
- /* Placeholder for anything that might want to be done while waiting */
- }
- static inline void set_led(uint8_t leds)
- {
- SYS_LED = leds;
- }
- static inline __attribute__((noreturn)) void reset(void)
- {
- while (1)
- SYS_RESET = 1;
- }
- extern const uint32_t time_zero;
- static inline uint32_t rdtime(void)
- {
- uint32_t t;
- asm volatile("rdtime %0" : "=r" (t));
- return t;
- }
- static inline uint64_t rdtimeq(void)
- {
- uint32_t l, h1, h0;
- asm volatile("rdtimeh %0; rdtime %1; %rdtimeh %2"
- : "=r" (h1), "=r" (l), "=r" (h0));
- return ((uint64_t)(((int32_t)l < 0) ? h1 : h0) << 32) + l;
- }
- static inline void udelay(uint32_t us)
- {
- uint32_t cycles = us * (CPU_HZ / 1000000);
- uint32_t start = rdtime();
- while (rdtime() - start < cycles)
- pause();
- }
- static inline void i2c_set_speed(unsigned int khz)
- {
- I2C_DIVISOR = ((CPU_HZ/4000)-1)/khz;
- }
- #endif /* IO_H */
|