/* * @Author: CTW * @Date: 2025-11-07 14:37:14 * @FilePath: \PhoenixSMGT_Testproject\Drivers\AD85050\Drv_AD85020B.h * @note: 从 STM32 HAL 库移植到 AT32F403A。 * 同时保留两套 I2C 实现(硬件 I2C1 / 软件 GPIO 模拟),用宏切换。 */ #ifndef __DRV_AD85020B_H #define __DRV_AD85020B_H #include #include "at32f403a_407.h" /* ================= I2C 实现选择 ================= 1 = 硬件 I2C1(默认,走官方 i2c_application 库,PB6=SCL/PB7=SDA) 0 = 软件 I2C(GPIO 位翻转,不依赖硬件 I2C 外设) 两套实现都保留在 Drv_AD85020B.c 里,改这个宏即可切换 */ #define AD85020B_I2C_USE_HW 1 /* I2C 引脚:PB6 = SCL,PB7 = SDA */ #define AD85020B_I2C_PORT GPIOB #define AD85020B_SCL_PIN GPIO_PINS_6 #define AD85020B_SDA_PIN GPIO_PINS_7 /* 器件 7 位地址:SA0=0、SA1=0 → 0x30 硬件 I2C:官方库 i2c_memory_write/read 期望 8 位格式地址(=7位<<1),传 0x60 软件 I2C:字节 = 7位<<1 | R/W,写 0x60 / 读 0x61 */ #define AD85020B_I2C_ADDR 0x30 /* 7 位地址 */ #define AD85020B_I2C_ADDR_W 0x60 /* 写地址(8 位格式) */ #define AD85020B_I2C_ADDR_R 0x61 /* 读地址(8 位格式) */ /* 硬件 I2C 轮询超时 */ #define AD85020B_I2C_TIMEOUT 1000 /* 寄存器地址(文档直接提取) */ #define AD85020B_REG_SCTL6 0x1A // 软件复位寄存器 #define AD85020B_REG_SCTL1 0x00 // 输入格式配置 #define AD85020B_REG_SCTL2 0x01 // 采样率配置 #define AD85020B_REG_SCTL3 0x02 // 静音控制 #define AD85020B_REG_MVOL 0x03 // 主音量控制 #define AD85020B_REG_HEADPHONEVOL 0x87 // 耳机音量控制 /* 软件复位配置:SCTL6寄存器BIT5=SW_RSTB,0=复位,1=正常 */ #define AD85020B_SW_RESET 0x50 // BIT5=0(0x50二进制1010000,BIT5=0) #define AD85020B_SW_NORMAL 0x70 // BIT5=1(复位后恢复正常) /* 返回值类型 */ typedef enum { AD85020B_OK = 0, AD85020B_ERROR = 1, AD85020B_TIMEOUT = 2 } AD85020B_StatusTypeDef; /* 函数声明(两模式共用接口,内部按 AD85020B_I2C_USE_HW 分发) */ void AD85020B_I2C_Init(void); AD85020B_StatusTypeDef AD85020B_I2C_Write(uint8_t reg, uint8_t data); AD85020B_StatusTypeDef AD85020B_I2C_Read(uint8_t reg, uint8_t *data); AD85020B_StatusTypeDef AD85020B_Init(void); #endif