添加一些关于midi播放的项目
This commit is contained in:
@@ -0,0 +1,559 @@
|
||||
/*************************************************************************!
|
||||
* 技术讨论: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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user