这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
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> |