12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- #ifndef IO_H
- #define IO_H
- #include "iodev.h"
- static inline void con_write(uint8_t c)
- {
- CONSOLE = c;
- }
- static inline void con_set_baudrate(uint32_t b)
- {
- uint32_t bauddiv = (CON_BAUD_BASE + (b >> 1))/b;
- CON_BAUDDIV = bauddiv ? bauddiv - 1 : 0;
- }
- static inline void set_led(uint8_t leds)
- {
- LED = leds;
- }
- 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 ((int32_t)l < 0) ? h1 : h0;
- }
- static inline void udelay(uint32_t us)
- {
- uint32_t cycles = us * (CPU_CLK_HZ / 1000000);
- uint32_t start = rdtime();
- while (rdtime() - start < cycles)
- /* wait */;
- }
- #endif /* IO_H */
|