teensy_hal.h 4.23 KB
Newer Older
Dave Hylands's avatar
Dave Hylands committed
1
#include <mk20dx128.h>
2
#include "hal_ftm.h"
Dave Hylands's avatar
Dave Hylands committed
3
4
5
6
7
8

#ifdef  USE_FULL_ASSERT
  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
  void assert_failed(uint8_t* file, uint32_t line);
#else
  #define assert_param(expr) ((void)0)
9
#endif /* USE_FULL_ASSERT */
Dave Hylands's avatar
Dave Hylands committed
10

11
#define HAL_NVIC_EnableIRQ(irq)    NVIC_ENABLE_IRQ(irq)
Dave Hylands's avatar
Dave Hylands committed
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79

#define GPIOA   ((GPIO_TypeDef *)&GPIOA_PDOR)
#define GPIOB   ((GPIO_TypeDef *)&GPIOB_PDOR)
#define GPIOC   ((GPIO_TypeDef *)&GPIOC_PDOR)
#define GPIOD   ((GPIO_TypeDef *)&GPIOD_PDOR)
#define GPIOE   ((GPIO_TypeDef *)&GPIOE_PDOR)
#define GPIOZ   ((GPIO_TypeDef *)NULL)

#define I2C0    ((I2C_TypeDef *)0x40066000)
#define I2C1    ((I2C_TypeDef *)0x40067000)

#undef  SPI0
#define SPI0    ((SPI_TypeDef *)0x4002C000)
#define SPI1    ((SPI_TypeDef *)0x4002D000)

#define UART0   ((UART_TypeDef *)&UART0_BDH)
#define UART1   ((UART_TypeDef *)&UART1_BDH)
#define UART2   ((UART_TypeDef *)&UART2_BDH)

typedef struct {
    uint32_t dummy;
} I2C_TypeDef;

typedef struct {
    uint32_t dummy;
} UART_TypeDef;

typedef struct {
    uint32_t dummy;
} SPI_TypeDef;

typedef struct {
    volatile    uint32_t    PDOR;   // Output register
    volatile    uint32_t    PSOR;   // Set output register
    volatile    uint32_t    PCOR;   // Clear output register
    volatile    uint32_t    PTOR;   // Toggle output register
    volatile    uint32_t    PDIR;   // Data Input register
    volatile    uint32_t    PDDR;   // Data Direction register
} GPIO_TypeDef;

#define GPIO_OUTPUT_TYPE    ((uint32_t)0x00000010)  // Indicates OD

#define GPIO_MODE_INPUT     ((uint32_t)0x00000000)
#define GPIO_MODE_OUTPUT_PP ((uint32_t)0x00000001)
#define GPIO_MODE_OUTPUT_OD ((uint32_t)0x00000011)
#define GPIO_MODE_AF_PP     ((uint32_t)0x00000002)
#define GPIO_MODE_AF_OD     ((uint32_t)0x00000012)
#define GPIO_MODE_ANALOG    ((uint32_t)0x00000003)

#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT)              ||\
                            ((MODE) == GPIO_MODE_OUTPUT_PP)          ||\
                            ((MODE) == GPIO_MODE_OUTPUT_OD)          ||\
                            ((MODE) == GPIO_MODE_AF_PP)              ||\
                            ((MODE) == GPIO_MODE_AF_OD)              ||\
                            ((MODE) == GPIO_MODE_ANALOG))

#define GPIO_NOPULL         ((uint32_t)0)
#define GPIO_PULLUP         ((uint32_t)1)
#define GPIO_PULLDOWN       ((uint32_t)2)

#define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \
                            ((PULL) == GPIO_PULLDOWN))

#define  GPIO_SPEED_LOW         ((uint32_t)0)
#define  GPIO_SPEED_MEDIUM      ((uint32_t)1)
#define  GPIO_SPEED_FAST        ((uint32_t)2)
#define  GPIO_SPEED_HIGH        ((uint32_t)3)

80
#define IS_GPIO_AF(af)      ((af) >= 0 && (af) <= 7)
Dave Hylands's avatar
Dave Hylands committed
81
82
83
84
85
86
87
88
89
90

typedef struct {
    uint32_t    Pin;
    uint32_t    Mode;
    uint32_t    Pull;
    uint32_t    Speed;
    uint32_t    Alternate;
} GPIO_InitTypeDef;

#define GPIO_PORT_TO_PORT_NUM(GPIOx) \
91
    ((&GPIOx->PDOR - &GPIOA_PDOR) / (&GPIOB_PDOR - &GPIOA_PDOR))
Dave Hylands's avatar
Dave Hylands committed
92
93

#define GPIO_PIN_TO_PORT_PCR(GPIOx, pin) \
94
    (&PORTA_PCR0 + (GPIO_PORT_TO_PORT_NUM(GPIOx) * 0x400) + (pin))
Dave Hylands's avatar
Dave Hylands committed
95

96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#define GPIO_AF2_I2C0   2
#define GPIO_AF2_I2C1   2
#define GPIO_AF2_SPI0   2
#define GPIO_AF3_FTM0   3
#define GPIO_AF3_FTM1   3
#define GPIO_AF3_FTM2   3
#define GPIO_AF3_UART0  3
#define GPIO_AF3_UART1  3
#define GPIO_AF3_UART2  3
#define GPIO_AF4_FTM0   4
#define GPIO_AF6_FTM1   6
#define GPIO_AF6_FTM2   6
#define GPIO_AF6_I2C1   6
#define GPIO_AF7_FTM1   7

111
__attribute__(( always_inline )) static inline void __WFI(void) {
Dave Hylands's avatar
Dave Hylands committed
112
113
114
115
116
  __asm volatile ("wfi");
}

uint32_t HAL_GetTick(void);
void     HAL_Delay(uint32_t Delay);
117
void mp_hal_set_interrupt_char(int c);
Dave Hylands's avatar
Dave Hylands committed
118

119
120
void mp_hal_gpio_clock_enable(GPIO_TypeDef *gpio);

121
122
123
124
125
int mp_hal_stdin_rx_chr(void);
void mp_hal_stdout_tx_str(const char *str);
void mp_hal_stdout_tx_strn(const char *str, uint32_t len);
void mp_hal_stdout_tx_strn_cooked(const char *str, uint32_t len);

Dave Hylands's avatar
Dave Hylands committed
126
127
void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *init);

128
129
130
#define GPIO_read_pin(gpio, pin)        (((gpio)->PDIR >> (pin)) & 1)
#define GPIO_set_pin(gpio, pin_mask)    (((gpio)->PSOR) = (pin_mask))
#define GPIO_clear_pin(gpio, pin_mask)  (((gpio)->PCOR) = (pin_mask))
131
#define GPIO_read_output_pin(gpio, pin) (((gpio)->PDOR >> (pin)) & 1)