| | |
| | | #ifndef __PAN_HAL_H__ |
| | | #define __PAN_HAL_H__ |
| | | |
| | | #include <stdint.h> |
| | | //#include "sdk_config.h" |
| | | |
| | | typedef enum { |
| | | HAL_SUCCESS, |
| | | HAL_INVALID_PARAMS, |
| | | HAL_IO_ERROR, |
| | | HAL_DEVICE_BUSY, |
| | | HAL_NO_MEM, |
| | | HAL_NO_HARDWARE_SOURCE, |
| | | HAL_UNKNOWN, |
| | | } HAL_Error; |
| | | |
| | | typedef enum { |
| | | HAL_OK = 0x00U, |
| | | HAL_ERROR = 0x01U, |
| | | HAL_BUSY = 0x02U, |
| | | HAL_TIMEOUT = 0x03U |
| | | } HAL_Status; |
| | | |
| | | #define HAL_TIME_FOREVER 0xFFFFFFFFU |
| | | #define HAL_ASSERT SYS_ASSERT |
| | | |
| | | extern uint32_t HAL_TimeConvMsToTick(uint32_t ms); |
| | | extern uint32_t HAL_TimeGetCurrTick(void); |
| | | extern void HAL_DelayMs(uint32_t ms); |
| | | extern void HAL_DriverInit(void); |
| | | extern void HAL_IoTimingTrackInit(void); |
| | | |
| | | #include "pan_hal_gpio.h" |
| | | #include "pan_hal_uart.h" |
| | | #include "pan_hal_dmac.h" |
| | |
| | | #include "pan_hal_timer.h" |
| | | #include "pan_hal_adc.h" |
| | | |
| | | typedef enum { |
| | | PAN_HAL_SUCCESS, |
| | | PAN_HAL_INVALID_PARAMS, |
| | | PAN_HAL_IO_ERROR, |
| | | PAN_HAL_DEVICE_BUSY, |
| | | PAN_HAL_NO_MEM, |
| | | PAN_HAL_NO_HARDWARE_SOURCE, |
| | | PAN_HAL_UNKNOWN, |
| | | } PanHalError; |
| | | /* IO Timing Track for IRQs of HAL Driver */ |
| | | #if CONFIG_IO_TIMING_TRACK |
| | | |
| | | #endif |
| | | // Define an alternative name of PDIOs to support keil configuration wizard of sdk config file |
| | | #define P0x00 P00 |
| | | #define P0x01 P01 |
| | | #define P0x02 P02 |
| | | #define P0x03 P03 |
| | | #define P0x04 P04 |
| | | #define P0x05 P05 |
| | | #define P0x06 P06 |
| | | #define P0x07 P07 |
| | | #define P0x10 P10 |
| | | #define P0x11 P11 |
| | | #define P0x12 P12 |
| | | #define P0x13 P13 |
| | | #define P0x14 P14 |
| | | #define P0x15 P15 |
| | | #define P0x16 P16 |
| | | #define P0x17 P17 |
| | | #define P0x20 P20 |
| | | #define P0x21 P21 |
| | | #define P0x22 P22 |
| | | #define P0x23 P23 |
| | | #define P0x24 P24 |
| | | #define P0x25 P25 |
| | | #define P0x26 P26 |
| | | #define P0x27 P27 |
| | | #define P0x30 P30 |
| | | #define P0x31 P31 |
| | | |
| | | __STATIC_FORCEINLINE void HAL_SetMfpGpio(uint8_t port, uint8_t bit) |
| | | { |
| | | (&SYS->P0_MFP)[port] = (&SYS->P0_MFP)[port] & ~(SYS_MFP_P00_Msk << bit); |
| | | } |
| | | |
| | | __STATIC_FORCEINLINE void HAL_GpioSetModeOutput(uint8_t port, uint8_t bit) |
| | | { |
| | | GPIO_SetMode((GPIO_T*)(P0_BASE + 0x40 * (port)), BIT0 << bit, GPIO_MODE_OUTPUT); |
| | | } |
| | | |
| | | __STATIC_FORCEINLINE void HAL_GpioToggle(uint8_t port, uint8_t bit) |
| | | { |
| | | GPIO_Toggle((GPIO_T*)(P0_BASE + 0x40 * (port)), BIT0 << bit); |
| | | } |
| | | |
| | | #define __GPIO_OUTPUT_INIT_PIN(pinId, initLevel) \ |
| | | do { \ |
| | | uint32_t port = pinId >> 4; \ |
| | | uint32_t bit = pinId & 0x0F; \ |
| | | HAL_SetMfpGpio(port, bit); \ |
| | | HAL_GpioSetModeOutput(port, bit); \ |
| | | GPIO_PIN_ADDR(port, bit) = initLevel; \ |
| | | } while (0) |
| | | |
| | | #define __PAN_COND_CODE_0x99(_flag, _if_0x99_code, _else_code) \ |
| | | __PAN_COND_CODE(_NNNNN##_flag, _if_0x99_code, _else_code) |
| | | |
| | | #define _NNNNN0x99 _ZZZZZ, |
| | | |
| | | /** |
| | | * @brief Like PAN_COND_CODE_1() except tests if _flag is 0x99. |
| | | * |
| | | * This is like PAN_COND_CODE_1(), except that it tests whether _flag |
| | | * expands to the integer literal 0x99. It expands to _if_0x99_code if |
| | | * so, and _else_code otherwise; both of these must be enclosed in |
| | | * parentheses. |
| | | * |
| | | * @param _flag evaluated flag |
| | | * @param _if_0x99_code result if _flag expands to 0x99; must be in parentheses |
| | | * @param _else_code result otherwise; must be in parentheses |
| | | * @see PAN_COND_CODE_1() |
| | | */ |
| | | #define PAN_COND_CODE_0x99(_flag, _if_0x99_code, _else_code) \ |
| | | __PAN_COND_CODE_0x99(_flag, _if_0x99_code, _else_code) |
| | | |
| | | /** |
| | | * @brief Init specified GPIO pin for IO Timing Track |
| | | */ |
| | | #define PAN_IO_TIMING_TRACK_INIT_PIN(_track_pin, _init_level) \ |
| | | PAN_COND_CODE_0x99(_track_pin, (), (__GPIO_OUTPUT_INIT_PIN(_track_pin, _init_level))) |
| | | |
| | | /** |
| | | * @brief Set level for specified IO timing track pin |
| | | */ |
| | | #define PAN_IO_TIMING_TRACK_LEVEL(_track_pin, _level) \ |
| | | PAN_COND_CODE_0x99(_track_pin, (), (PAN_CONCAT(P, _track_pin) = _level)) |
| | | |
| | | /** |
| | | * @brief Toggle specified IO timing track pin |
| | | */ |
| | | #define PAN_IO_TIMING_TRACK_TOGGLE(_track_pin) \ |
| | | PAN_COND_CODE_0x99(_track_pin, (), (do{uint32_t port = _track_pin >> 4; uint32_t bit = _track_pin & 0x0F; HAL_GpioToggle(port, bit);} while(0))) |
| | | |
| | | #else |
| | | |
| | | #define PAN_IO_TIMING_TRACK_INIT_PIN(...) |
| | | #define PAN_IO_TIMING_TRACK_LEVEL(...) |
| | | #define PAN_IO_TIMING_TRACK_TOGGLE(...) |
| | | |
| | | #endif // CONFIG_IO_TIMING_TRACK |
| | | |
| | | #endif // __PAN_HAL_H__ |