微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 基于GUI软件配置UCD3138数字电源PMBUS命令

基于GUI软件配置UCD3138数字电源PMBUS命令

时间:05-25 来源:电子发烧友网 点击:

器中的浮点型数据格式

  ◎ 定义结构体和联合体

  如下, 定义了结构体FLOAT_ELEMENTS , 用以保存上文提到的浮点型数据。还定义了联合体FLOAT_OPEN,成员包括浮点型数据"all"和结构体类型数据"bit",用以保存转换完毕的浮点型数据。

  struct FLOAT_ELEMENTS {

  Uint32 SIGN:1;

  Uint32 EXPONENT:8;

  Uint32 MANTISSA:23;

  };

  union FLOAT_OPEN {

  float all;

  struct FLOAT_ELEMENTS bit;

  Uint32 word;

  };

  ◎ 转换函数linear11_to_float()

  该函数完成将来自GUI 的Linear Data Format 格式的数据转换为浮点型数据,并作为返回值返回。包含的关键代码如下。

  定义变量,包括整型"mantissa"和"exponent"及结构体变量"final"。

  int16 mantissa, exponent;

  union FLOAT_OPEN final;

  下面代码完成对输入参数的分析,并扩展到16 位。如果输入参数的尾数是负值,前5 位补1;如果是正值,前5 位补0。

  if(linear11 & 0x0400)// if mantissa is negative

  { mantissa = linear11 | 0xfc00; //put it in there at minimum mantissa }

  else

  { mantissa = linear11 & 0x07FF; }

  下面代码首先是将mantissa 左移16 位(16+16=32),以使其数据长度符合单精度浮点型数据的长度,然后exponent 减去16,保证了原始数据的大小没有变化。

  final.all = ((int32)mantissa) 《《 16; //set it up for minimum exponent.

  exponent = (linear11 》》 11) - 16; //get exponent to match shifted value

  下面代码首先判断单精度浮点型的指数是否为负。如果是负,则改写其为零,原因是对应的"输出过流保护点"不会出现负值;如果是正,则将指数信息放置在单精度浮点型数据的指数位置。

  if((final.bit.EXPONENT + exponent) 《 0)//if it‘s so low it will wrap

  { final.bit.EXPONENT = 0; }

  else

  { final.bit.EXPONENT = final.bit.EXPONENT + exponent; }

  上述操作完毕后,final.all 中就保存了转换后的浮点型数据,因此可以作为返回值返回。

  return final.all;

  2.4 操作流程图

  上述所有操作的流程图见图7。

  

  图 7:UCD3138 接收信息流程图

  3 删除GUI 信息栏

  

  图 8:删除GUI 中的信息栏

  此时重新编译软件并下载到UCD3138 后,GUI 中将不再会出现该信息栏,见图4。但UCD3138 软件中依然保留有对该PMBUS 命令的接收、转换和处理等函数,亦需要删除,在此不再赘述。

  4 小结

  通过上文两个实例的分析可知,用户在GUI 软件中可以灵活的添加或删除PMBUS 命令对应的信息栏,提高了GUI 的灵活性。该操作主要包括PMBUS 命令的使能或屏蔽及UCD3138 软件添加或删除相应处理函数等两大部分。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top