aboutsummaryrefslogtreecommitdiff
path: root/driver_fw/include/global.h
blob: df07598bae6f97130a037434396cbcadf6bf8813 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#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__ */