26void *
memcpy(
void *dest,
const void *src, uint32_t n)
28 unsigned char *d = (
unsigned char *)dest;
29 const unsigned char *s = (
const unsigned char *)src;
37void *
memset(
void *dest, int32_t c, uint32_t n)
39 unsigned char *d = (
unsigned char *)dest;
42 *d++ = (
unsigned char)c;
47void *
memmove(
void *dest,
const void *src, uint32_t n)
49 unsigned char *d = (
unsigned char *)dest;
50 const unsigned char *s = (
const unsigned char *)src;
86int32_t
strcmp(
const char *s1,
const char *s2)
88 while (*s1 && (*s1 == *s2))
93 return (
int)((
unsigned char)*s1 - (
unsigned char)*s2);
96int32_t
strncmp(
const char *s1,
const char *s2, uint32_t n)
98 while (n && *s1 && (*s1 == *s2))
110 return (
int)((
unsigned char)*s1 - (
unsigned char)*s2);
117 while ((*d++ = *src++))
128 if (base < 2 || base > 16)
141 if (num < 0 && base == 10)
148 int rem = num % base;
149 temp[i++] = (rem > 9) ? (rem - 10) +
'A' : rem +
'0';
160 str[j++] = temp[--i];
181 if (*str <
'0' || *str >
'9')
186 while (*str >=
'0' && *str <=
'9')
188 result = result * 10 + (*str -
'0');
192 while (*str ==
' ' || *str ==
'\n')
202 return result * sign;
221 if (*str <
'0' || *str >
'9')
226 while (*str >=
'0' && *str <=
'9')
228 result = result * 10 + (*str -
'0');
237 return result * sign;
315 uint32_t start_time =
millis();
319 if ((
millis() - start_time) >= timeout_ms)
330 uint32_t start_time =
millis();
334 if ((
millis() - start_time) >= timeout_ms)
371 if (buffer == NULL || length == 0)
376 for (uint32_t i = 0; i < length; i++)
416 for (uint32_t i = 0; i < length; i++)
430 buffer[0] = (value >> 24) & 0xFF;
431 buffer[1] = (value >> 16) & 0xFF;
432 buffer[2] = (value >> 8) & 0xFF;
433 buffer[3] = value & 0xFF;
442 if (base < 2 || base > 16)
456 uint32_t digit = num % base;
457 buffer[i++] = (digit < 10) ? (
'0' + digit) : (
'A' + (digit - 10));
504 uint32_t high1, high2, low;
511 }
while (high1 != high2);
513 return (((uint64_t)high1) << 32) | low;
528 uint32_t high1, high2, low;
535 }
while (high1 != high2);
537 return (((uint64_t)high1) << 32) | low;
547 uint32_t start_time =
millis();
548 while ((
millis() - start_time) < ms)
556 uint32_t start_time =
micros();
557 while ((
micros() - start_time) < microsec)
627 ctrl = (ctrl & 0x0000FFFF) | (((uint32_t)pre_counter) << 16);
634 return (pwm_ctrl >> 16);
684 return (dir >> pin) & 0x01;
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.
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.
Headerdatei der WGRHAL-Bibliothek.
#define GPIO_OUT_OFFSET
Offset für das GPIO-Ausgangsregister.
#define GPIO_PIN_COUNT
Anzahl der verfügbaren GPIO-Pins.
#define HWREG32(addr)
Makro zur Adressierung von speicherabgebildeten Registern.
#define TIME_MS_H_OFFSET
Offset für die höheren 32-Bit des Millisekundenzählers.
#define UART_RX_OFFSET
Offset für das UART-Empfangsregister.
#define PWM_BASE_ADDR
Basisadresse für PWM-Funktionen.
#define GPIO_BASE_ADDR
Basisadresse für GPIO-Funktionen.
#define UART_BASE_ADDR
Basisadresse für den UART.
#define GPIO_DIR_OFFSET
Offset für das GPIO-Richtungsregister.
#define GPIO_OUT_STEP
Schrittweite zwischen den Ausgangsregistern der einzelnen Pins.
#define DEBUG_ADDR
Basisadresse für das Debug-Register.
#define GPIO_IN_OFFSET
Offset für das GPIO-Eingangsregister.
#define PWM_PERIOD_OFFSET
Offset für das PWM-Periode-Register.
#define nop()
Nop-Operation.
#define TIME_MIK_L_OFFSET
Offset für die niederwertigen 32-Bit des Mikrosekundenzählers.
#define TIME_MS_L_OFFSET
Offset für die niederwertigen 32-Bit des Millisekundenzählers.
#define TIME_MIK_H_OFFSET
Offset für die höheren 32-Bit des Mikrosekundenzählers.
#define UART_CTRL_OFFSET
Offset für das UART-Steuerregister.
#define PWM_COUNTER_OFFSET
Offset für das PWM-Zählerregister.
#define UART_BAUD_OFFSET
Offset für das UART-Baudratenregister.
#define DEFAULT_TIMEOUT
Standard-Zeitüberschreitung in Millisekunden.
#define UART_STATUS_OFFSET
Offset für das UART-Statusregister.
#define SYS_CLK_OFFSET
Offset für den Systemtakt.
#define PWM_CTRL_OFFSET
Offset für das PWM-Steuerregister.
#define PWM_DUTY_OFFSET
Offset für das PWM-Duty-Cycle-Register.
#define UART_TX_OFFSET
Offset für das UART-Sende-Register.
#define TIME_BASE_ADDR
Basisadresse für Zeitfunktionen.