#ifndef __GLOBAL_H__ #define __GLOBAL_H__ #include <stdbool.h> #include <stdint.h> #include <sys/types.h> #include <assert.h> #include <string.h> /* The IRQ header must be included before stm32_device.h since ST defines a bunch of messy macros there. */ #include <stm32_irqs.h> /* Header generated from stm32***_startup.s in Makefile */ #include <stm32g0xx.h> #include <core_cm0plus.h> #define COUNT_OF(x) ((sizeof(x)/sizeof(0[x])) / ((size_t)(!(sizeof(x) % sizeof(0[x]))))) #define AFRL(pin, val) ((val) << ((pin)*4)) #define AFRH(pin, val) ((val) << (((pin)-8)*4)) #define AF(pin) (2<<(2*(pin))) #define OUT(pin) (1<<(2*(pin))) #define IN(pin) (0) #define ANALOG(pin) (3<<(2*(pin))) #define CLEAR(pin) (~(3<<(2*(pin)))) #define PULLUP(pin) (1<<(2*pin)) #define PULLDOWN(pin) (2<<(2*pin)) #define BSRR_CLEAR(pin) ((1<<pin)<<16) #define BSRR_SET(pin) (1<<pin) #define BSRR_VALUE(pin, value) ((((!(value))<<pin)<<16) | ((!!(value))<<pin)) #ifndef SYSTICK_INTERVAL_US #define SYSTICK_INTERVAL_US 1000 #endif /* SYSTICK_INTERVAL_US */ enum ErrorCode { ERR_SUCCESS = 0, ERR_TIMEOUT, ERR_PHYSICAL_LAYER, ERR_FRAMING, ERR_PROTOCOL, ERR_DMA, ERR_BUSY, ERR_BUFFER_OVERFLOW, ERR_RX_OVERRUN, ERR_TX_OVERRUN, }; typedef enum ErrorCode ErrorCode; void delay_us(int duration_us); extern volatile uint64_t sys_time_us; #endif /* __GLOBAL_H__ */