560 lines
24 KiB
C
560 lines
24 KiB
C
/*************************************************************************!
|
||
* 技术讨论:QQ群 123763203
|
||
* 官网 :www.navota.com
|
||
*
|
||
* @file bos.h
|
||
* @brief 位操作存储模块(BOS)函数库
|
||
* @author Navota
|
||
* @date 2017-1-1
|
||
***************************************************************************/
|
||
/******************************************************************************
|
||
******************************************************************************/
|
||
|
||
#ifndef __BOS_H
|
||
#define __BOS_H
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
/******************************************************************************
|
||
*
|
||
* BOS 操作码(opcode)
|
||
*
|
||
*******************************************************************************/
|
||
|
||
#define BOS_OPCODE_AND 1 /*!< AND 操作码 */
|
||
#define BOS_OPCODE_OR 2 /*!< OR 操作码 */
|
||
#define BOS_OPCODE_XOR 3 /*!< XOR 操作码 */
|
||
#define BOS_OPCODE_BITFIELD 4 /*!< 位字段操作码 */
|
||
|
||
#define BOS_OPCODE_BIT_CLEAR 2 /*!< 位清零操作码 */
|
||
#define BOS_OPCODE_BIT_SET 3 /*!< 置位操作码 */
|
||
|
||
|
||
/******************************************************************************
|
||
*
|
||
* BOS宏定义,用来生成BOS硬件编码地址
|
||
*
|
||
*******************************************************************************/
|
||
|
||
/******************************************************************************
|
||
* 宏定义,用于生成逻辑与硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作逻辑与操作地址(32位硬件编码地址)
|
||
*
|
||
* @param[in] ADDR 32位地址.
|
||
*
|
||
* @return hardcoded 32位地址.
|
||
*
|
||
*
|
||
*****************************************************************************/
|
||
#define BOS_AND(ADDR) (*(volatile uint32_t *)(((uint32_t)ADDR) | (BOS_OPCODE_AND<<26)))
|
||
|
||
/******************************************************************************
|
||
* 宏定义,用于生成逻辑或硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作逻辑或操作地址(32位硬件编码地址)
|
||
*
|
||
* @param[in] ADDR 32位地址.
|
||
*
|
||
* @return hardcoded 32位地址.
|
||
*
|
||
*****************************************************************************/
|
||
|
||
#define BOS_OR(ADDR) (*(volatile uint32_t *)(((uint32_t)ADDR) | (BOS_OPCODE_OR<<26)))
|
||
|
||
|
||
/******************************************************************************
|
||
* 宏定义,用于生成逻辑异或硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作逻辑或操作地址(32位硬件编码地址)
|
||
*
|
||
* @param[in] ADDR 32位地址.
|
||
*
|
||
* @return hardcoded 32位地址.
|
||
*
|
||
*****************************************************************************/
|
||
|
||
#define BOS_XOR(ADDR) (*(volatile uint32_t *)(((uint32_t)ADDR) | (BOS_OPCODE_XOR<<26)))
|
||
|
||
#if !defined(BOS_SANITY_CHECK)
|
||
/*!
|
||
* @brief This is fastest way for BOS without sanity check.
|
||
*/
|
||
/******************************************************************************
|
||
* 宏定义,用于生成一位加载-清零(LAC1)硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作:1位加载清零操作地址(32位硬件编码地址)
|
||
*
|
||
* @param[in] ADDR 32位地址
|
||
* @param[in] bit 要清零的位, 0-based.
|
||
*
|
||
* @return hardcoded 32-bit address.
|
||
*
|
||
*****************************************************************************/
|
||
|
||
#define BOS_BIT_CLEAR(ADDR,bit) (*(volatile uint32_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BIT_CLEAR <<26) \
|
||
| ((bit)<<21)))
|
||
|
||
/******************************************************************************
|
||
* 宏定义,用于生成一位加载-置位(LAS1)硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作:1位加载置位操作地址(32位硬件编码地址)
|
||
*
|
||
* @param[in] ADDR 32位地址.
|
||
* @param[in] bit 要置1的位, 0-based.
|
||
*
|
||
* @return hardcoded 32-bit address.
|
||
*
|
||
*****************************************************************************/
|
||
#define BOS_BIT_SET(ADDR,bit) (*(volatile uint32_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BIT_SET <<26) \
|
||
| ((bit)<<21)))
|
||
|
||
/******************************************************************************
|
||
*宏定义,用于生成位操作存储字段插入(BFI)硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作存储字段插入硬件编码地址 (32位硬件编码地址).
|
||
*
|
||
* @param[in] ADDR 32位地址
|
||
* @param[in] bit 插入字段的起始位, 0-based.
|
||
* @param[in] width 插入字段的宽度, 1-based.
|
||
*
|
||
* @return hardcoded 32-bit address.
|
||
*
|
||
*****************************************************************************/
|
||
#define BOS_BITFIELD_INSERT(ADDR,bit,width) (*(volatile uint32_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BITFIELD <<26) \
|
||
| ((bit)<<23) | ((width-1))<<19))
|
||
|
||
|
||
/******************************************************************************
|
||
* *宏定义,用于生位操作存储加载无符号字段提取(UBFX)硬件编码地址 .
|
||
*
|
||
*******************************************************************************/
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 用于生位操作存储加载无符号字段提取(UBFX)操作地址 (32位硬件编码地址).
|
||
*
|
||
* @param[in] ADDR 32位地址.
|
||
* @param[in] bit 读取起始位, 0-based.
|
||
* @param[in] width 读取字段宽度, 1-based.
|
||
*
|
||
* @return hardcoded 32-bit address.
|
||
*
|
||
*****************************************************************************/
|
||
|
||
#define BOS_BITFIELD_EXTRACT(ADDR,bit,width) (*(volatile uint32_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BITFIELD <<26) \
|
||
| ((bit)<<23) | ((width-1))<<19))
|
||
#else
|
||
/*!
|
||
* @brief This is slow way for BOS as it has sanity check.
|
||
*/
|
||
/******************************************************************************
|
||
* 宏定义,用于生成一位加载-清零(LAC1)地址.
|
||
*
|
||
*******************************************************************************/
|
||
#define BOS_BIT_CLEAR(ADDR,bit) (*(volatile uint32_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BIT_CLEAR <<26) \
|
||
| ((bit & 0x1F)<<21))) /*!< 位清零操作 */
|
||
|
||
/*****************************************************************************
|
||
* 宏定义,用于生成一位加载-置位(LAS1)硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
#define BOS_BIT_SET(ADDR,bit) (*(volatile uint32_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BIT_SET <<26) \
|
||
| ((bit & 0x1F)<<21))) /*!< 置位操作 */
|
||
|
||
/******************************************************************************
|
||
*宏定义,用于生成位操作存储字段插入(BFI)硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
#define BOS_BITFIELD_INSERT(ADDR,bit,width) (*(volatile uint32_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BITFIELD <<26) \
|
||
| ((bit & 0x1F)<<23) | ((width-1) & 0xF)<<19)) /*!< 字段插入操作 */
|
||
|
||
|
||
/******************************************************************************
|
||
*宏定义,用于生位操作存储加载无符号字段提取(UBFX)硬件编码地址
|
||
*
|
||
*******************************************************************************/
|
||
#define BOS_BITFIELD_EXTRACT(ADDR,bit,width) (*(volatile uint32_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BITFIELD <<26) \
|
||
| ((bit & 0x1F)<<23) | ((width-1) & 0xF)<<19)) /*!< 字段提取操作 */
|
||
#endif
|
||
/******************************************************************************
|
||
* BOS宏定义,用来生成BOS硬件编码地址(8位地址)
|
||
*
|
||
*******************************************************************************/
|
||
|
||
/******************************************************************************
|
||
* 宏定义,用于生成逻辑或硬件编码地址.(8位地址)
|
||
*
|
||
*******************************************************************************/
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作逻辑与(AND)操作地址(32位硬件编码地址),对8位数据进行与操作
|
||
*
|
||
* @param[in] ADDR 32位地址.
|
||
*
|
||
* @return hardcoded 32-bit address.
|
||
*
|
||
*****************************************************************************/
|
||
|
||
#define BOS_AND_8b(ADDR) (*(volatile uint8_t *)(((uint32_t)ADDR) | (BOS_OPCODE_AND<<26)))
|
||
|
||
/******************************************************************************
|
||
* 宏定义,用于生成逻辑或硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作逻辑或(OR)操作地址(32位硬件编码地址),对8位数据进行或操作.
|
||
*
|
||
* @param[in] ADDR 32位地址.
|
||
*
|
||
* @return hardcoded 32位地址.
|
||
*
|
||
*****************************************************************************/
|
||
|
||
#define BOS_OR_8b(ADDR) (*(volatile uint8_t *)(((uint32_t)ADDR) | (BOS_OPCODE_OR<<26)))
|
||
|
||
/******************************************************************************
|
||
* 宏定义,用于生成逻辑异或硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作逻辑异或(XOR)操作地址(32位硬件编码地址),对8位数据进行异或操作..
|
||
*
|
||
* @param[in] ADDR 32位地址.
|
||
*
|
||
* @return hardcoded 32位地址.
|
||
*
|
||
*****************************************************************************/
|
||
|
||
#define BOS_XOR_8b(ADDR) (*(volatile uint8_t *)(((uint32_t)ADDR) | (BOS_OPCODE_XOR<<26)))
|
||
|
||
#if !defined(BOS_SANITY_CHECK)
|
||
/*!
|
||
* @brief This is fastest way for BOS without sanity check.
|
||
*/
|
||
/******************************************************************************
|
||
* 宏定义用于生成 1位加载清零(LAC1)硬件编码地址
|
||
*
|
||
*******************************************************************************/
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作:1位加载清零操作地址(32位硬件编码地址)用于8位数据操作.
|
||
*
|
||
* @param[in] ADDR 32位地址
|
||
* @param[in] bit 要清零的位, 0-based.
|
||
*
|
||
* @return hardcoded 32位地址.
|
||
*
|
||
*****************************************************************************/
|
||
#define BOS_BIT_CLEAR_8b(ADDR,bit) (*(volatile uint8_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BIT_CLEAR <<26) \
|
||
| ((bit)<<21)))
|
||
|
||
/******************************************************************************
|
||
* 宏定义用于生成 1位加载置1(LAS1)硬件编码地址
|
||
*
|
||
*******************************************************************************/
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作1位加载置1(LAS1)操作码(32位硬件编码地址)用于8位数据操作
|
||
*
|
||
* @param[in] ADDR 32位地址
|
||
* @param[in] bit 要置1的位, 0-based.
|
||
*
|
||
* @return hardcoded 32位地址.
|
||
*
|
||
*****************************************************************************/
|
||
|
||
#define BOS_BIT_SET_8b(ADDR,bit) (*(volatile uint8_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BIT_SET <<26) \
|
||
| ((bit)<<21)))
|
||
|
||
/******************************************************************************
|
||
*宏定义,用于生成位操作存储字段插入(BFI)硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作存储字段插入硬件编码地址 (32位硬件编码地址).用于8位数据操作
|
||
*
|
||
* @param[in] ADDR 32位地址
|
||
* @param[in] bit 插入字段的起始位, 0-based.
|
||
* @param[in] width 插入字段的宽度, 1-based.
|
||
*
|
||
* @return hardcoded 32位地址.
|
||
*
|
||
*****************************************************************************/
|
||
|
||
#define BOS_BITFIELD_INSERT_8b(ADDR,bit,width) (*(volatile uint8_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BITFIELD <<26) \
|
||
| ((bit)<<23) | ((width-1))<<19))
|
||
/******************************************************************************
|
||
*宏定义,用于生位操作存储加载无符号字段提取(UBFX)硬件编码地址 .
|
||
*
|
||
*******************************************************************************/
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 用于生位操作存储加载无符号字段提取(UBFX)操作地址 (32位硬件编码地址).用于8位操作
|
||
*
|
||
* @param[in] ADDR 32位地址.
|
||
* @param[in] bit 读取起始位, 0-based.
|
||
* @param[in] width 读取字段宽度, 1-based.
|
||
*
|
||
* @return hardcoded 32-bit address.
|
||
*
|
||
*****************************************************************************/
|
||
#define BOS_BITFIELD_EXTRACT_8b(ADDR,bit,width) (*(volatile uint8_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BITFIELD <<26) \
|
||
| ((bit<<23) | ((width-1))<<19))
|
||
#else
|
||
/*!
|
||
* @brief This is slow way for BOS as it has sanity check.
|
||
*/
|
||
/******************************************************************************
|
||
* 宏定义,用于生成一位加载-清零(LAC1)地址.
|
||
*
|
||
*******************************************************************************/
|
||
#define BOS_BIT_CLEAR_8b(ADDR,bit) (*(volatile uint8_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BIT_CLEAR <<26) \
|
||
| ((bit & 0x1F)<<21))) /*!< 位清零操作,8位模式*/
|
||
|
||
/******************************************************************************
|
||
* 宏定义,用于生成一位加载-置位(LAS1)硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
#define BOS_BIT_SET_8b(ADDR,bit) (*(volatile uint8_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BIT_SET <<26) \
|
||
| ((bit & 0x1F)<<21))) /*!< 位置1操作,8位模式*/
|
||
|
||
/******************************************************************************
|
||
* 宏定义,用于生成位操作存储字段插入(BFI)硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
#define BOS_BITFIELD_INSERT_8b(ADDR,bit,width) (*(volatile uint8_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BITFIELD <<26) \
|
||
| ((bit & 0x1F)<<23) | ((width-1) & 0xF)<<19)) /*!< 字段插入操作,8位模式 */
|
||
|
||
/******************************************************************************
|
||
*宏定义,用于生位操作存储加载无符号字段提取(UBFX)硬件编码地址
|
||
*******************************************************************************/
|
||
|
||
#define BOS_BITFIELD_EXTRACT_8b(ADDR,bit,width) (*(volatile uint8_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BITFIELD <<26) \
|
||
| ((bit & 0x1F)<<23) | ((width-1) & 0xF)<<19)) /*!< 字段提取操作,8位 */
|
||
#endif
|
||
|
||
|
||
/******************************************************************************
|
||
* BOS宏定义,用来生成BOS硬件编码地址(16位地址)
|
||
*
|
||
*******************************************************************************/
|
||
|
||
/******************************************************************************
|
||
* 宏定义,用于生成逻辑或硬件编码地址.(16位地址)
|
||
*
|
||
*******************************************************************************/
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作逻辑与(AND)操作地址(32位硬件编码地址),对8位数据进行与操作
|
||
*
|
||
* @param[in] ADDR 32位地址.
|
||
*
|
||
* @return hardcoded 32-bit address.
|
||
*
|
||
*****************************************************************************/
|
||
|
||
#define BOS_AND_16b(ADDR) (*(volatile uint16_t *)(((uint32_t)ADDR) | (BOS_OPCODE_AND<<26)))
|
||
|
||
/******************************************************************************
|
||
* 宏定义,用于生成逻辑或硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作逻辑或(OR)操作地址(32位硬件编码地址),对8位数据进行或操作.
|
||
*
|
||
* @param[in] ADDR 32位地址.
|
||
*
|
||
* @return hardcoded 32位地址.
|
||
*
|
||
*****************************************************************************/
|
||
|
||
#define BOS_OR_16b(ADDR) (*(volatile uint16_t *)(((uint32_t)ADDR) | (BOS_OPCODE_OR<<26)))
|
||
|
||
|
||
/******************************************************************************
|
||
* 宏定义,用于生成逻辑异或硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作逻辑异或(XOR)操作地址(32位硬件编码地址),对8位数据进行异或操作..
|
||
*
|
||
* @param[in] ADDR 32位地址.
|
||
*
|
||
* @return hardcoded 32位地址.
|
||
*
|
||
***************************************************************************/
|
||
|
||
#define BOS_XOR_16b(ADDR) (*(volatile uint16_t *)(((uint32_t)ADDR) | (BOS_OPCODE_XOR<<26)))
|
||
|
||
|
||
#if !defined(BOS_SANITY_CHECK)
|
||
/*!
|
||
* @brief This is fastest way for BOS without sanity check.
|
||
*/
|
||
|
||
/******************************************************************************
|
||
* 宏定义用于生成 1位加载清零(LAC1)硬件编码地址
|
||
*
|
||
*******************************************************************************/
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作:1位加载清零操作地址(32位硬件编码地址)用于16位数据操作.
|
||
*
|
||
* @param[in] ADDR 32位地址
|
||
* @param[in] bit 要清零的位, 0-based.
|
||
*
|
||
* @return hardcoded 32位地址.
|
||
*
|
||
****************************************************************************/
|
||
|
||
#define BOS_BIT_CLEAR_16b(ADDR,bit) (*(volatile uint16_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BIT_CLEAR <<26) \
|
||
| ((bit)<<21)))
|
||
|
||
/******************************************************************************
|
||
* 宏定义用于生成 1位加载置1(LAS1)硬件编码地址
|
||
*
|
||
*******************************************************************************/
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作1位加载置1(LAS1)操作码(32位硬件编码地址)用于8位数据操作
|
||
*
|
||
* @param[in] ADDR 32位地址
|
||
* @param[in] bit 要置1的位, 0-based.
|
||
*
|
||
* @return hardcoded 32位地址.
|
||
*
|
||
*****************************************************************************/
|
||
#define BOS_BIT_SET_16b(ADDR,bit) (*(volatile uint16_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BIT_SET <<26) \
|
||
| ((bit)<<21)))
|
||
|
||
/******************************************************************************
|
||
*宏定义,用于生成位操作存储字段插入(BFI)硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 生成BOS位操作存储字段插入硬件编码地址 (32位硬件编码地址).用于16位数据操作
|
||
*
|
||
* @param[in] ADDR 32位地址
|
||
* @param[in] bit 插入字段的起始位, 0-based.
|
||
* @param[in] width 插入字段的宽度, 1-based.
|
||
*
|
||
* @return hardcoded 32位地址.
|
||
*
|
||
*****************************************************************************/
|
||
|
||
#define BOS_BITFIELD_INSERT_16b(ADDR,bit,width) (*(volatile uint16_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BITFIELD <<26) \
|
||
| ((bit)<<23) | ((width-1))<<19))
|
||
|
||
/******************************************************************************
|
||
*宏定义,用于生位操作存储加载无符号字段提取(UBFX)硬件编码地址 .
|
||
*
|
||
*******************************************************************************/
|
||
/*****************************************************************************//*!
|
||
*
|
||
* @brief 用于生位操作存储加载无符号字段提取(UBFX)操作地址 (32位硬件编码地址).用于16位操作
|
||
*
|
||
* @param[in] ADDR 32位地址.
|
||
* @param[in] bit 读取起始位, 0-based.
|
||
* @param[in] width 读取字段宽度, 1-based.
|
||
*
|
||
* @return hardcoded 32-bit address.
|
||
*
|
||
*****************************************************************************/
|
||
|
||
#define BOS_BITFIELD_EXTRACT_16b(ADDR,bit,width) (*(volatile uint16_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BITFIELD <<26) \
|
||
| ((bit)<<23) | ((width-1))<<19))
|
||
#else
|
||
/*!
|
||
* @brief This is slow way for BOS as it has sanity check.
|
||
*/
|
||
/******************************************************************************
|
||
* 宏定义,用于生成一位加载-清零(LAC1)地址.
|
||
*
|
||
*******************************************************************************/
|
||
#define BOS_BIT_CLEAR_16b(ADDR,bit) (*(volatile uint16_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BIT_CLEAR <<26) \
|
||
| ((bit & 0x1F)<<21))) /*!< 位清零操作,16位模式*/
|
||
|
||
/******************************************************************************
|
||
* 宏定义,用于生成一位加载-置位(LAS1)硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
#define BOS_BIT_SET_16b(ADDR,bit) (*(volatile uint16_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BIT_SET <<26) \
|
||
| ((bit & 0x1F)<<21))) /*!< 位置1操作,16位模式*/
|
||
|
||
/******************************************************************************
|
||
* 宏定义,用于生成位操作存储字段插入(BFI)硬件编码地址.
|
||
*
|
||
*******************************************************************************/
|
||
#define BOS_BITFIELD_INSERT_16b(ADDR,bit,width) (*(volatile uint16_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BITFIELD <<26) \
|
||
| ((bit & 0x1F)<<23) | ((width-1) & 0xF)<<19)) /*!< 字段插入操作,16位模式 */
|
||
|
||
/******************************************************************************
|
||
*宏定义,用于生位操作存储加载无符号字段提取(UBFX)硬件编码地址
|
||
*******************************************************************************/
|
||
#define BOS_BITFIELD_EXTRACT_16b(ADDR,bit,width) (*(volatile uint16_t *)(((uint32_t)ADDR) \
|
||
| (BOS_OPCODE_BITFIELD <<26) \
|
||
| ((bit & 0x1F)<<23) | ((width-1) & 0xF)<<19)) /*!< 字段提取操作,16位 */
|
||
#endif
|
||
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif
|
||
#endif
|
||
|
||
|