用户工具

站点工具


icore4t_8

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
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>​
icore4t_8.1582102822.txt.gz · 最后更改: 2020/02/19 17:00 由 zgf