1 #include <mk20dx128.h> 2 #include "hal_ftm.h" 3 4 #ifdef USE_FULL_ASSERT 5 #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__)) 6 void assert_failed(uint8_t *file, uint32_t line); 7 #else 8 #define assert_param(expr) ((void)0) 9 #endif /* USE_FULL_ASSERT */ 10 11 #define HAL_NVIC_EnableIRQ(irq) NVIC_ENABLE_IRQ(irq) 12 13 #define GPIOA ((GPIO_TypeDef *)&GPIOA_PDOR) 14 #define GPIOB ((GPIO_TypeDef *)&GPIOB_PDOR) 15 #define GPIOC ((GPIO_TypeDef *)&GPIOC_PDOR) 16 #define GPIOD ((GPIO_TypeDef *)&GPIOD_PDOR) 17 #define GPIOE ((GPIO_TypeDef *)&GPIOE_PDOR) 18 #define GPIOZ ((GPIO_TypeDef *)NULL) 19 20 #define I2C0 ((I2C_TypeDef *)0x40066000) 21 #define I2C1 ((I2C_TypeDef *)0x40067000) 22 23 #undef SPI0 24 #define SPI0 ((SPI_TypeDef *)0x4002C000) 25 #define SPI1 ((SPI_TypeDef *)0x4002D000) 26 27 #define UART0 ((UART_TypeDef *)&UART0_BDH) 28 #define UART1 ((UART_TypeDef *)&UART1_BDH) 29 #define UART2 ((UART_TypeDef *)&UART2_BDH) 30 31 typedef struct { 32 uint32_t dummy; 33 } I2C_TypeDef; 34 35 typedef struct { 36 uint32_t dummy; 37 } UART_TypeDef; 38 39 typedef struct { 40 uint32_t dummy; 41 } SPI_TypeDef; 42 43 typedef struct { 44 volatile uint32_t PDOR; // Output register 45 volatile uint32_t PSOR; // Set output register 46 volatile uint32_t PCOR; // Clear output register 47 volatile uint32_t PTOR; // Toggle output register 48 volatile uint32_t PDIR; // Data Input register 49 volatile uint32_t PDDR; // Data Direction register 50 } GPIO_TypeDef; 51 52 #define GPIO_OUTPUT_TYPE ((uint32_t)0x00000010) // Indicates OD 53 54 #define GPIO_MODE_INPUT ((uint32_t)0x00000000) 55 #define GPIO_MODE_OUTPUT_PP ((uint32_t)0x00000001) 56 #define GPIO_MODE_OUTPUT_OD ((uint32_t)0x00000011) 57 #define GPIO_MODE_AF_PP ((uint32_t)0x00000002) 58 #define GPIO_MODE_AF_OD ((uint32_t)0x00000012) 59 #define GPIO_MODE_ANALOG ((uint32_t)0x00000003) 60 #define GPIO_MODE_IT_RISING ((uint32_t)1) 61 #define GPIO_MODE_IT_FALLING ((uint32_t)2) 62 63 #define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) || \ 64 ((MODE) == GPIO_MODE_OUTPUT_PP) || \ 65 ((MODE) == GPIO_MODE_OUTPUT_OD) || \ 66 ((MODE) == GPIO_MODE_AF_PP) || \ 67 ((MODE) == GPIO_MODE_AF_OD) || \ 68 ((MODE) == GPIO_MODE_ANALOG)) 69 70 #define GPIO_NOPULL ((uint32_t)0) 71 #define GPIO_PULLUP ((uint32_t)1) 72 #define GPIO_PULLDOWN ((uint32_t)2) 73 74 #define IS_GPIO_PULL(PULL) (((PULL) == GPIO_NOPULL) || ((PULL) == GPIO_PULLUP) || \ 75 ((PULL) == GPIO_PULLDOWN)) 76 77 #define GPIO_SPEED_FREQ_LOW ((uint32_t)0) 78 #define GPIO_SPEED_FREQ_MEDIUM ((uint32_t)1) 79 #define GPIO_SPEED_FREQ_HIGH ((uint32_t)2) 80 #define GPIO_SPEED_FREQ_VERY_HIGH ((uint32_t)3) 81 82 #define IS_GPIO_AF(af) ((af) >= 0 && (af) <= 7) 83 84 typedef struct { 85 uint32_t Pin; 86 uint32_t Mode; 87 uint32_t Pull; 88 uint32_t Speed; 89 uint32_t Alternate; 90 } GPIO_InitTypeDef; 91 92 #define GPIO_PORT_TO_PORT_NUM(GPIOx) \ 93 ((&GPIOx->PDOR - &GPIOA_PDOR) / (&GPIOB_PDOR - &GPIOA_PDOR)) 94 95 #define GPIO_PIN_TO_PORT_PCR(GPIOx, pin) \ 96 (&PORTA_PCR0 + (GPIO_PORT_TO_PORT_NUM(GPIOx) * 0x400) + (pin)) 97 98 #define GPIO_AF2_I2C0 2 99 #define GPIO_AF2_I2C1 2 100 #define GPIO_AF2_SPI0 2 101 #define GPIO_AF3_FTM0 3 102 #define GPIO_AF3_FTM1 3 103 #define GPIO_AF3_FTM2 3 104 #define GPIO_AF3_UART0 3 105 #define GPIO_AF3_UART1 3 106 #define GPIO_AF3_UART2 3 107 #define GPIO_AF4_FTM0 4 108 #define GPIO_AF6_FTM1 6 109 #define GPIO_AF6_FTM2 6 110 #define GPIO_AF6_I2C1 6 111 #define GPIO_AF7_FTM1 7 112 __WFI(void)113__attribute__((always_inline)) static inline void __WFI(void) { 114 __asm volatile ("wfi"); 115 } 116 117 void mp_hal_set_interrupt_char(int c); 118 119 void mp_hal_gpio_clock_enable(GPIO_TypeDef *gpio); 120 121 void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *init); 122 123 struct _pin_obj_t; 124 #define mp_hal_pin_obj_t const struct _pin_obj_t * 125 #define mp_hal_pin_high(p) (((p)->gpio->PSOR) = (p)->pin_mask) 126 #define mp_hal_pin_low(p) (((p)->gpio->PCOR) = (p)->pin_mask) 127 #define mp_hal_pin_read(p) (((p)->gpio->PDIR >> (p)->pin) & 1) 128 #define mp_hal_pin_write(p, v) ((v) ? mp_hal_pin_high(p) : mp_hal_pin_low(p)) 129