64 lines
3.1 KiB
C
64 lines
3.1 KiB
C
#ifndef __COMMON_H
|
|
#define __COMMON_H
|
|
|
|
/**
|
|
* @brief Memory access macro
|
|
*/
|
|
#define BL_RD_WORD(addr) (*((volatile uint32_t *)(uintptr_t)(addr)))
|
|
#define BL_WR_WORD(addr, val) ((*(volatile uint32_t *)(uintptr_t)(addr)) = (val))
|
|
#define BL_RD_SHORT(addr) (*((volatile uint16_t *)(uintptr_t)(addr)))
|
|
#define BL_WR_SHORT(addr, val) ((*(volatile uint16_t *)(uintptr_t)(addr)) = (val))
|
|
#define BL_RD_BYTE(addr) (*((volatile uint8_t *)(uintptr_t)(addr)))
|
|
#define BL_WR_BYTE(addr, val) ((*(volatile uint8_t *)(uintptr_t)(addr)) = (val))
|
|
#define BL_RDWD_FRM_BYTEP(p) ((p[3] << 24) | (p[2] << 16) | (p[1] << 8) | (p[0]))
|
|
|
|
#define BL_WRWD_TO_BYTEP(p, val) \
|
|
{ \
|
|
p[0] = val & 0xff; \
|
|
p[1] = (val >> 8) & 0xff; \
|
|
p[2] = (val >> 16) & 0xff; \
|
|
p[3] = (val >> 24) & 0xff; \
|
|
}
|
|
/**
|
|
* @brief Register access macro
|
|
*/
|
|
#define BL_RD_REG16(addr, regname) BL_RD_SHORT(addr + regname##_OFFSET)
|
|
#define BL_WR_REG16(addr, regname, val) BL_WR_SHORT(addr + regname##_OFFSET, val)
|
|
#define BL_RD_REG(addr, regname) BL_RD_WORD(addr + regname##_OFFSET)
|
|
#define BL_WR_REG(addr, regname, val) BL_WR_WORD(addr + regname##_OFFSET, val)
|
|
#define BL_SET_REG_BIT(val, bitname) ((val) | (1U << bitname##_POS))
|
|
#define BL_CLR_REG_BIT(val, bitname) ((val)&bitname##_UMSK)
|
|
#define BL_GET_REG_BITS_VAL(val, bitname) (((val)&bitname##_MSK) >> bitname##_POS)
|
|
#define BL_SET_REG_BITS_VAL(val, bitname, bitval) (((val)&bitname##_UMSK) | ((uint32_t)(bitval) << bitname##_POS))
|
|
#define BL_IS_REG_BIT_SET(val, bitname) (((val) & (1U << (bitname##_POS))) != 0)
|
|
#define BL_DRV_DUMMY \
|
|
{ \
|
|
__ASM volatile("nop"); \
|
|
__ASM volatile("nop"); \
|
|
__ASM volatile("nop"); \
|
|
__ASM volatile("nop"); \
|
|
}
|
|
|
|
/* Std driver attribute macro*/
|
|
#ifndef BFLB_USE_CUSTOM_LD_SECTIONS
|
|
//#define ATTR_UNI_SYMBOL
|
|
#define ATTR_STRINGIFY(x) #x
|
|
#define ATTR_TOSTRING(x) ATTR_STRINGIFY(x)
|
|
#define ATTR_UNI_SYMBOL __FILE__ ATTR_TOSTRING(__LINE__)
|
|
#define ATTR_CLOCK_SECTION __attribute__((section(".sclock_rlt_code." ATTR_UNI_SYMBOL)))
|
|
#define ATTR_CLOCK_CONST_SECTION __attribute__((section(".sclock_rlt_const." ATTR_UNI_SYMBOL)))
|
|
#define ATTR_TCM_SECTION __attribute__((section(".tcm_code." ATTR_UNI_SYMBOL)))
|
|
#define ATTR_TCM_CONST_SECTION __attribute__((section(".tcm_const." ATTR_UNI_SYMBOL)))
|
|
#define ATTR_DTCM_SECTION __attribute__((section(".tcm_data")))
|
|
#define ATTR_HSRAM_SECTION __attribute__((section(".hsram_code")))
|
|
#define ATTR_DMA_RAM_SECTION __attribute__((section(".system_ram")))
|
|
#define ATTR_HBN_RAM_SECTION __attribute__((section(".hbn_ram_code")))
|
|
#define ATTR_HBN_RAM_CONST_SECTION __attribute__((section(".hbn_ram_data")))
|
|
#define ATTR_EALIGN(x) __attribute__((aligned(x)))
|
|
#define ATTR_FALLTHROUGH() __attribute__((fallthrough))
|
|
#define ATTR_USED __attribute__((__used__))
|
|
#else
|
|
#include "bl_ld_sections.h"
|
|
#endif /* BFLB_USE_CUSTOM_LD_SECTIONS */
|
|
#endif
|