EDN China > 技术文章 > 测试与测量 > 通用测试仪器 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

MAXQ3120电表参考设计的定制功能

来源:Maxim公司?? 2007年01月04日 ?? 收藏0

?解决的方法是采用一个全局标志位:EEPROMOpPending。当这个标志位为低时,任务轮实质上是一个无限循环过程,反复调用系统中的每一个任务。当标志位为高时,任务轮被调用时执行一次并返回,并不调用寄存器管理器。这样有什么帮助吗?

  当寄存器管理器需要执行一个耗时很长的功能时,它启动这个功能并通过轮询来确定其是否完成。在轮询期间,寄存器管理器将EEPROMOpPending置为高,并递归调用任务轮。下面的代码给出了一个实际例子:

  
01: uint8 ReadEEPROM(uint16 Address, uint8 Length, uint8 *pData)
02: {
03: int i;
04: g_MessageBoard.EEPROMOpPending = 1;
05: for(i=0; i06: {
07: if(i>0)SpinTaskWheel();
08: eeprom_address = Address++;
09: while(eeprom_read_byte())
10: S

pinTaskWheel();
11: *pData++ = eeprom_data;
12: } // for
13: g_MessageBoard.EEPROMOpPending = 0;
14: return 1;
15: }

  在上面的第4行,EEPROMOpPending标志位被置为高。在第7和10行中,SpinTaskWheel被调用。如果EEPROM标志位为高时调用任务轮,则SpinTaskWheel函数运行一次,并在不调用寄存器管理器的情况下返回。这样,即使由于寄存器管理器等候EEPROM完成操作而停止下来,电表的其它部分仍可持续正常运行。

  哪些任务知晓这些寄存器?

??????? 只有两个任务知道寄存器号:寄存器管理器和消息译码器。这些程序中,通常只需要对寄存器管理器进行修改。消息译码器识别出与口令管理和其它监控功能有关的寄存器,并且必须在采用正常处理规则之前获取这些信息。因此,要构建自己的寄存器,只需要熟悉寄存器管理器。 三类寄存器

??????? 通常,有三类寄存器:只读、读写和具有额外功能的读写寄存器。只读寄存器的一个例子是B611,RMS Volts、phase A。主机向这个寄存器写数据是不能执行的;实际上,如果电表收到写数据会将其丢弃。而且,多数只读寄存器都不在EEPROM中:通常,在线计算这些寄存器的结果,并根据需要报告结果。

  读写寄存器的一个例子是C032,Meter Number (电表号)。写入数值不会对电表操作产生任何影响,而且可以随时提取该数据。最后,一个具有额外功能的读写寄存器例子是C030,Meter Constant, active (有效电表常数)。当这个寄存器被写入数据时,寄存器管理器不仅要更新EEPROM,同时也要更新DSP程序使用的电表常数。

  哪些任务需要寄存器信息?

??????? 下表列出了需要寄存器信息的任务。

  需要寄存器信息的任务
?

  通常,你主要考虑添加可通过消息译码器访问的寄存器。你可以增加用于显示的寄存器(或者用于其它任务的寄存器,但是依据惯例,你会主要考虑那些可通过通信端口检索的寄存器)。

  读写寄存器

??????? 首先考虑第一种情况,即存储和读取无额外功能的读写寄存器。为了添加一个存储于EEPROM内的寄存器,你必须添加两处信息:MAXQ3120RD.h文件和寄存器管理器中的ProcessRegisterNumber程序。

  MAXQ3120RD.h包含一个由typedef定义的名为EEPROM_DATA的数据类型。这个定义并没有被真正实例化;而仅仅是作为模板,用于定义数据如何存入EEPROM。在EEPROM_DATA定义的下面,还定义了两个宏,用来返回两个值,分别是结构中某成员的偏移地址和某成员占用的字节数。定义新寄存器的第一步,是在结构中添加成员(最好是在尾部),从而为寄存器分配EEPROM存储空间。

  下一步是定义寄存器号。这需要编辑寄存器管理器中定义的RegParmTable结构。这个表包含了电表中定义的每个寄存器,并按编号排序。每个成员包括:

  


?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

电表? 定制功能? EM?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈