21#define SYSTEM_CLOCK 10000000
27#define HWREG32(addr) (*((volatile uint32_t *)(addr)))
33#define nop() __asm__ volatile("nop")
38#define DEBUG_ADDR 0x00000100
43#define UART_BASE_ADDR 0x00000200
47#define UART_CTRL_OFFSET 0x00
51#define UART_BAUD_OFFSET 0x04
55#define UART_STATUS_OFFSET 0x08
59#define UART_TX_OFFSET 0x0C
63#define UART_RX_OFFSET 0x10
68#define TIME_BASE_ADDR 0x00000300
72#define TIME_MS_L_OFFSET 0x00
76#define TIME_MS_H_OFFSET 0x04
80#define TIME_MIK_L_OFFSET 0x08
84#define TIME_MIK_H_OFFSET 0x0C
88#define SYS_CLK_OFFSET 0x10
93#define PWM_BASE_ADDR 0x00000400
97#define PWM_PERIOD_OFFSET 0x00
101#define PWM_DUTY_OFFSET 0x04
105#define PWM_COUNTER_OFFSET 0x08
109#define PWM_CTRL_OFFSET 0x0C
114#define GPIO_BASE_ADDR 0x00000800
118#define GPIO_DIR_OFFSET 0x0000
122#define GPIO_IN_OFFSET 0x0004
126#define GPIO_OUT_OFFSET 0x0008
130#define GPIO_OUT_STEP 0x04
134#define GPIO_PIN_COUNT 8
139#define DEFAULT_TIMEOUT 10
150void *
memcpy(
void *dest,
const void *src, uint32_t n);
160void *
memset(
void *dest, int32_t c, uint32_t n);
170void *
memmove(
void *dest,
const void *src, uint32_t n);
179uint32_t
strlen(
const char *s);
188int32_t
strcmp(
const char *s1,
const char *s2);
198int32_t
strncmp(
const char *s1,
const char *s2, uint32_t n);
207char *
strcpy(
char *dest,
const char *src);
216void int_to_str(int32_t num,
int base,
char *str);
359int32_t
uart_write_buffer(
const uint8_t *buffer, uint32_t length, uint32_t timeout_ms);
386int32_t
uart_read_buffer(uint8_t *buf, uint32_t length, uint32_t timeout_ms);
469void delay(uint32_t ms);
void pwm_set_mode(uint8_t enable_pwm)
Aktiviert oder deaktiviert den PWM-Modus.
uint32_t uart_is_busy(void)
Prüft, ob die UART beschäftigt ist.
uint32_t pwm_get_mode(void)
Liest den aktuellen PWM-Modus.
void pwm_set_50_percent_mode(uint8_t enable)
Aktiviert oder deaktiviert den 50%-Modus des PWM.
void gpio_set_direction(uint8_t pin, uint8_t direction)
Setzt die Richtung eines GPIO-Pins.
uint32_t uart_tx_empty(void)
Prüft, ob der UART-Sende-Puffer leer ist.
int32_t uart_read_buffer(uint8_t *buf, uint32_t length, uint32_t timeout_ms)
Liest einen Puffer von Bytes von der UART-Schnittstelle.
void gpio_write_pin(uint8_t pin, uint8_t value)
Schreibt einen Wert auf einen GPIO-Pin.
uint32_t get_sys_clk(void)
Liest die Systemtaktfrequenz.
int32_t uart_write_buffer(const uint8_t *buffer, uint32_t length, uint32_t timeout_ms)
Sendet einen Puffer von Bytes über die UART-Schnittstelle.
void int_to_str(int32_t num, int base, char *str)
Konvertiert eine Ganzzahl in einen String.
char uart_getchar(uint32_t timeout_ms)
Liest ein Zeichen von der UART-Schnittstelle.
uint8_t gpio_read_direction(uint8_t pin)
Liest die Richtung eines GPIO-Pins.
int32_t parse_int_multi(const char *str, const char **next)
Parst eine Ganzzahl aus einem String und gibt den Zeiger auf das nächste Zeichen zurück.
int32_t uart_read_byte(uint8_t *data, uint32_t timeout_ms)
Liest ein Byte von der UART-Schnittstelle.
uint32_t uart_rx_full(void)
Prüft, ob der UART-Empfangspuffer voll ist.
uint32_t uart_rx_empty(void)
Prüft, ob der UART-Empfangspuffer leer ist.
uint8_t gpio_read_all_pins(void)
Liest alle GPIO-Pins.
int32_t parse_integer(const char *str)
Parst einen String in eine Ganzzahl.
int32_t uart_wait_rx_data(uint32_t timeout_ms)
Wartet darauf, dass Daten im Empfangspuffer vorhanden sind, bis zu einer Zeitüberschreitung.
void delay_micro(uint32_t microsec)
Verzögert die Ausführung um eine bestimmte Anzahl an Mikrosekunden.
void uart_set_baud(baud_sel_t baud)
Setzt die Baudrate der UART-Schnittstelle.
int32_t uart_putchar(char c, uint32_t timeout_ms)
Sendet ein Zeichen über die UART-Schnittstelle.
uint32_t pwm_get_duty(void)
Liest das aktuelle PWM-Duty-Cycle.
uint32_t uart_get_status(void)
Liest den Status der UART-Schnittstelle.
void pwm_set_period(uint32_t period)
Setzt die PWM-Periode.
uint64_t millis_long(void)
Liest einen langen Millisekunden-Zähler.
void pwm_set_pre_counter(uint16_t pre_counter)
Setzt den Pre-Counter für PWM.
void debug_write(uint32_t value)
Schreibt einen Wert in das Debug-Register.
void micros_reset(void)
Setzt den Mikrosekunden-Zähler zurück.
void uart_putchar_default_timeout(char c)
Sendet ein Zeichen über die UART-Schnittstelle mit voreingestelltem Timeout.
void delay(uint32_t ms)
Verzögert die Ausführung um eine bestimmte Anzahl an Millisekunden.
void uart_print(const char *s)
Gibt einen String über die UART aus.
void pwm_set_control(uint32_t control)
Setzt den PWM-Kontrollwert.
int32_t strcmp(const char *s1, const char *s2)
Vergleicht zwei Strings.
void pwm_set_duty(uint32_t duty)
Setzt das PWM-Duty-Cycle.
void * memcpy(void *dest, const void *src, uint32_t n)
Kopiert n Bytes von src nach dest.
void millis_reset(void)
Setzt den Millisekunden-Zähler zurück.
void uart_disable(void)
Deaktiviert die UART-Schnittstelle.
void uart_send_uint32(uint32_t value, uint32_t timeout_ms)
Sendet einen 32-Bit-Wert über die UART-Schnittstelle.
uint32_t uart_is_ready(void)
Prüft, ob die UART bereit ist.
uint32_t uart_tx_full(void)
Prüft, ob der UART-Sende-Puffer voll ist.
uint32_t pwm_get_counter(void)
Liest den aktuellen PWM-Zählerstand.
void * memset(void *dest, int32_t c, uint32_t n)
Setzt n Bytes im Zielpuffer auf den Wert c.
int32_t uart_wait_tx_full(uint32_t timeout_ms)
Wartet darauf, dass der Sende-Puffer voll wird, bis zu einer Zeitüberschreitung.
int32_t strncmp(const char *s1, const char *s2, uint32_t n)
Vergleicht maximal n Zeichen zweier Strings.
void * memmove(void *dest, const void *src, uint32_t n)
Kopiert n Bytes von src nach dest, wobei sich überlappende Speicherbereiche korrekt behandelt werden.
char * strcpy(char *dest, const char *src)
Kopiert einen String von src nach dest.
void uart_print_uint(uint32_t num, int32_t base)
Gibt eine positive Ganzzahl in einem bestimmten Zahlensystem über die UART aus.
int32_t uart_write_byte(uint8_t data, uint32_t timeout_ms)
Sendet ein Byte über die UART-Schnittstelle.
uint32_t millis(void)
Liest den aktuellen Millisekunden-Zähler (32-Bit).
uint64_t micros_long(void)
Liest einen langen Mikrosekunden-Zähler.
uint8_t gpio_read_pin(uint8_t pin)
Liest den Zustand eines bestimmten GPIO-Pins.
uint32_t pwm_get_control(void)
Liest den aktuellen PWM-Kontrollwert.
uint32_t strlen(const char *s)
Bestimmt die Länge eines Strings.
void uart_print_int(int32_t num)
Gibt eine Ganzzahl über die UART aus.
uint32_t pwm_get_period(void)
Liest die aktuelle PWM-Periode.
uint32_t micros(void)
Liest den aktuellen Mikrosekunden-Zähler (32-Bit).
uint32_t pwm_get_pre_counter(void)
Liest den aktuellen Pre-Counter für PWM.
void uart_enable(void)
Aktiviert die UART-Schnittstelle.