这里会显示出您选择的修订版和当前版本之间的差别。
| 后一修订版 | 前一修订版 | ||
|
icore4t_8 [2020/02/19 17:00] zgf 创建 |
icore4t_8 [2022/03/22 10:39] (当前版本) sean |
||
|---|---|---|---|
| 行 2: | 行 2: | ||
| |技术支持电话|**0379-69926675-801**||| | |技术支持电话|**0379-69926675-801**||| | ||
| |技术支持邮件|Gingko@vip.163.com||| | |技术支持邮件|Gingko@vip.163.com||| | ||
| - | |技术论坛|http://www.eeschool.org||| | ||
| ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ^ 版本 ^ 日期 ^ 作者 ^ 修改内容 ^ | ||
| | V1.0 | 2019-02-19 | gingko | 初次建立 | | | V1.0 | 2019-02-19 | gingko | 初次建立 | | ||
| 行 101: | 行 100: | ||
| * 所有 DC-DC 和 LDO 都有负载监测和限流功能,当负载电流超过其驱动能力时,各输出电压都会下降,以保护内部电路。 4 个 DC-DC 输出电压低于设定电压的 85%时,AXP152 自动关机。 | * 所有 DC-DC 和 LDO 都有负载监测和限流功能,当负载电流超过其驱动能力时,各输出电压都会下降,以保护内部电路。 4 个 DC-DC 输出电压低于设定电压的 85%时,AXP152 自动关机。 | ||
| 管脚定义: | 管脚定义: | ||
| - | + | {{ :icore4t:icore4t_arm_hal_8_1.png?direct |}} | |
| 原理图如下所示: | 原理图如下所示: | ||
| - | + | {{ :icore4t:icore4t_arm_hal_8_2.png?direct |}} | |
| === 2.AXP152读写时序图 === | === 2.AXP152读写时序图 === | ||
| - | |||
| 单次读写: | 单次读写: | ||
| - | + | {{ :icore4t:icore4t_arm_hal_8_3.png?direct |}} | |
| - | 多次读写: | + | 多次读写: |
| - | + | {{ :icore4t:icore4t_arm_hal_8_4.png?direct |}} | |
| === 3.AXP152部分寄存器介绍 === | === 3.AXP152部分寄存器介绍 === | ||
| - | + | {{ :icore4t:icore4t_arm_hal_8_5.png?direct |}} | |
| - | + | {{ :icore4t:icore4t_arm_hal_8_6.png?direct |}} | |
| - | + | {{ :icore4t:icore4t_arm_hal_8_7.png?direct |}} | |
| - | + | {{ :icore4t:icore4t_arm_hal_8_8.png?direct |}} | |
| - | + | {{ :icore4t:icore4t_arm_hal_8_9.png?direct |}} | |
| - | + | {{ :icore4t:icore4t_arm_hal_8_10.png?direct |}} | |
| - | + | {{ :icore4t:icore4t_arm_hal_8_11.png?direct |}} | |
| ==== 四、 实验程序 ==== | ==== 四、 实验程序 ==== | ||
| 行 124: | 行 122: | ||
| === 1. 主函数 === | === 1. 主函数 === | ||
| <code c> | <code c> | ||
| + | int main(void) | ||
| + | { | ||
| + | HAL_Init(); | ||
| + | SystemClock_Config(); | ||
| + | i2c.initialize(); | ||
| + | axp152.initialize(); | ||
| + | axp152.set_dcdc1(3500);//[ARM & FPGA BK1/2/6 &OTHER] | ||
| + | axp152.set_dcdc2(1200);//[FPGA INT & PLL D] | ||
| + | axp152.set_aldo1(2500);//[FPGA PLL A] | ||
| + | axp152.set_dcdc4(3300);//[POWER_OUTPUT] | ||
| + | axp152.set_dcdc3(3300);//[FPGA BK4][Adjustable] | ||
| + | axp152.set_aldo2(3300);//[FPGA BK3][Adjustable] | ||
| + | axp152.set_dldo1(3300);//[FPGA BK7][Adjustable] | ||
| + | axp152.set_dldo2(3300);//[FPGA BK5][Adjustable] | ||
| + | MX_GPIO_Init(); | ||
| + | while (1) | ||
| + | { | ||
| + | } | ||
| + | } | ||
| </code> | </code> | ||
| === 2. AXP152常量定义 === | === 2. AXP152常量定义 === | ||
| <code c> | <code c> | ||
| + | //定义常量的寄存器地址 | ||
| + | #define AXP152_CHIP_VERSION 0x03 | ||
| + | #define AXP152_DCDC1_VOLTAGE 0x26 //DC-DC1 电压设置寄存器 | ||
| + | #define AXP152_DCDC2_VOLTAGE 0x23 //DC-DC2 电压设置寄存器 | ||
| + | #define AXP152_DCDC3_VOLTAGE 0x27 //DC-DC3 电压设置寄存器 | ||
| + | #define AXP152_DCDC4_VOLTAGE 0x2B //DC-DC4 电压设置寄存器 | ||
| + | #define AXP152_DLDO1_VOLTAGE 0x29 //DLDO1 电压设置寄存器 | ||
| + | #define AXP152_DLDO2_VOLTAGE 0x2A //DLDO2 电压设置寄存器 | ||
| + | #define AXP152_ALDO1_ALD02_VOLTAGE 0x28 //ALDO1/2 电压设置寄存器 | ||
| + | #define AXP152_SHUTDOWN 0x32 //关机和关机时序控制寄存器 | ||
| + | |||
| + | #define AXP152_POWEROFF (1 << 7) | ||
| + | |||
| + | #define AXP152_I2C_ADDR 0x60 //I2C设备地址 | ||
| </code> | </code> | ||
| === 3.AXP152各路输出电压设定函数 === | === 3.AXP152各路输出电压设定函数 === | ||
| <code c> | <code c> | ||
| + | //axp152_mvolt_to_target 电压范围调整函数 | ||
| + | static unsigned char axp152_mvolt_to_target(int mvolt, int min, int max, int div) | ||
| + | { | ||
| + | if (mvolt < min) | ||
| + | mvolt = min; | ||
| + | else if (mvolt > max) | ||
| + | mvolt = max; | ||
| + | |||
| + | return (mvolt - min) / div; | ||
| + | |||
| + | //set_dcdc1 设定dcdc1输出电压 | ||
| + | int set_dcdc1(unsigned int mvolt) | ||
| + | { | ||
| + | unsigned char target = axp152_mvolt_to_target(mvolt, 1700, 3500, 100); | ||
| + | | ||
| + | if(mvolt >= 2400 || mvolt <= 2800)target = target - 2; | ||
| + | if(mvolt >= 3000 || mvolt <= 3500)target = target - 3; | ||
| + | |||
| + | return i2c.write_nbyte(AXP152_I2C_ADDR,AXP152_DCDC1_VOLTAGE,&target,1); | ||
| + | } | ||
| + | |||
| + | //set_dcdc2 设定dcdc2输出电压 | ||
| + | int set_dcdc2(unsigned int mvolt) | ||
| + | { | ||
| + | unsigned char target = axp152_mvolt_to_target(mvolt, 700, 2275, 25); | ||
| + | |||
| + | return i2c.write_nbyte(AXP152_I2C_ADDR,AXP152_DCDC2_VOLTAGE,&target,1); | ||
| + | } | ||
| + | |||
| + | //set_dcdc3 设定dcdc3输出电压 | ||
| + | int set_dcdc3(unsigned int mvolt) | ||
| + | { | ||
| + | unsigned char target = axp152_mvolt_to_target(mvolt, 700, 3500, 50); | ||
| + | |||
| + | return i2c.write_nbyte(AXP152_I2C_ADDR,AXP152_DCDC3_VOLTAGE,&target,1); | ||
| + | } | ||
| + | |||
| + | //set_dcdc4 设定dcdc4输出电压 | ||
| + | int set_dcdc4(unsigned int mvolt) | ||
| + | { | ||
| + | unsigned char target = axp152_mvolt_to_target(mvolt, 700, 3500, 25); | ||
| + | |||
| + | return i2c.write_nbyte(AXP152_I2C_ADDR,AXP152_DCDC4_VOLTAGE,&target,1); | ||
| + | } | ||
| + | |||
| + | //set_dldo1 设定dldo1输出电压 | ||
| + | int set_dldo1(unsigned int mvolt) | ||
| + | { | ||
| + | unsigned char target = axp152_mvolt_to_target(mvolt, 700, 3500, 100); | ||
| + | |||
| + | return i2c.write_nbyte(AXP152_I2C_ADDR,AXP152_DLDO1_VOLTAGE,&target,1); | ||
| + | } | ||
| + | |||
| + | //set_dldo2 设定dldo2输出电压 | ||
| + | int set_dldo2(unsigned int mvolt) | ||
| + | { | ||
| + | unsigned char target = axp152_mvolt_to_target(mvolt, 700, 3500, 100); | ||
| + | |||
| + | return i2c.write_nbyte(AXP152_I2C_ADDR,AXP152_DLDO2_VOLTAGE,&target,1); | ||
| + | } | ||
| + | |||
| + | //set_aldo1 设定aldo1输出电压 | ||
| + | int set_aldo1(unsigned int mvolt) | ||
| + | { | ||
| + | unsigned char data; | ||
| + | unsigned char target; | ||
| + | |||
| + | if(mvolt >= 1200 && mvolt <= 2000){ | ||
| + | target = axp152_mvolt_to_target(mvolt, 1200, 2000, 100); | ||
| + | }else if(mvolt == 2500){ | ||
| + | target = 0x09; | ||
| + | }else if(mvolt == 2700){ | ||
| + | target = 0x0A; | ||
| + | }else if(mvolt == 2800){ | ||
| + | target = 0x0B; | ||
| + | }else if(mvolt >= 3000 || mvolt <= 3300){ | ||
| + | target = axp152_mvolt_to_target(mvolt, 3000, 3300, 100); | ||
| + | target += 0x0C; | ||
| + | } | ||
| + | | ||
| + | i2c.read_nbyte(AXP152_I2C_ADDR,AXP152_ALDO1_ALD02_VOLTAGE,&data,1); | ||
| + | | ||
| + | data &= 0x0F; | ||
| + | | ||
| + | target = target << 4; | ||
| + | target &= 0xF0; | ||
| + | |||
| + | target = data | target; | ||
| + | | ||
| + | return i2c.write_nbyte(AXP152_I2C_ADDR,AXP152_ALDO1_ALD02_VOLTAGE,&target,1); | ||
| + | } | ||
| + | |||
| + | //set_aldo2 设定aldo2输出电压 | ||
| + | int set_aldo2(unsigned int mvolt) | ||
| + | { | ||
| + | unsigned char data; | ||
| + | unsigned char target; | ||
| + | |||
| + | if(mvolt >= 1200 && mvolt <= 2000){ | ||
| + | target = axp152_mvolt_to_target(mvolt, 1200, 2000, 100); | ||
| + | }else if(mvolt == 2500){ | ||
| + | target = 0x09; | ||
| + | }else if(mvolt == 2700){ | ||
| + | target = 0x0A; | ||
| + | }else if(mvolt == 2800){ | ||
| + | target = 0x0B; | ||
| + | }else if(mvolt >= 3000 || mvolt <= 3300){ | ||
| + | target = axp152_mvolt_to_target(mvolt, 3000, 3300, 100); | ||
| + | target += 0x0C; | ||
| + | } | ||
| + | |||
| + | i2c.read_nbyte(AXP152_I2C_ADDR,AXP152_ALDO1_ALD02_VOLTAGE,&data,1); | ||
| + | |||
| + | data &= 0xF0; | ||
| + | |||
| + | target = target & 0x0F; | ||
| + | |||
| + | target = data | target; | ||
| + | |||
| + | return i2c.write_nbyte(AXP152_I2C_ADDR,AXP152_ALDO1_ALD02_VOLTAGE,&target,1); | ||
| + | } | ||
| </code> | </code> | ||