本应用笔记介绍如何修改演示代码或电表应用代码,以便编译71M6531/71M6532和71M6533/71M6534和71M6541/71M6542/71M6543系列电表IC的新计算引擎(CE)代码图像并将其链接。
介绍
背景
71M6531/71M6532 和 71M6533/71M6534 和 71M6541/71M6542/71M6543 系列电能计量 IC 设计用于计算引擎 (CE) 代码,可适应手头的应用。 在某些情况下,Maxim需要并提供特殊的CE代码,以支持不同的传感器类型或功能,如滤波或谐波分析。
由于CE代码在闪存和XRAM中占用不同的空间,因此根据应用的不同,需要几个步骤来容纳特定的CE代码映像。这是通过修改仪表代码(演示代码或仪表应用代码)源和 Keil 编译器设置 (Keil μVision 4) 来完成的。®®
本应用笔记讨论了将新的CE代码映像成功集成到仪表代码中的必要步骤。在执行本应用笔记中描述的任务时,Keil μVision 和 Signum Systems™ WEMU51 等工具的一般知识很有帮助。建议阅读 71M653x 和/或 71M654x IC 的软件用户指南 (SUG)。
仪表代码和CE代码之间的通用接口
如何交付 CE 代码和 CE 数据文件
客户无法使用 CE 的源代码。CE 代码作为代码映像提供,该映像链接到测量仪代码闪存映像,然后解释为 CE 操作代码,并由 CE 在运行时执行。执行时,CE 代码需要初始化 XRAM (CE RAM) 中的某些寄存器。例如,未校准(默认)仪表的校准系数设置为0x4000,通常WRATE的标准值也是CE数据图像的一部分。交付给客户的 CE 代码文件如下:
CE 代码图像(例如 CE34B07G_ce.c):此代码适用于 71M6534 或 71M6533,其版本为 B07G。
CE 数据映像(例如 CE34B07G_dat.c):此数据集适用于 07M71 或 6534M71 的代码版本 B6533G。
CE 文件以前导字符“CE”命名,后跟指定仪表片上系统 (SoC) 系列的两位数字,例如 “34” 表示 71M6533 和 71M6534,或“41” 表示 71M6541 和 71M6542。下一个字母通常指定代码兼容的芯片版本(A、B、C、...)。修订字母后面的两位数字是代码类型。当开发具有明显不同功能的新代码时,将为这两个数字选择一个新数字。任何特性或功能都不能直接从两位数字派生出来。通常,与CE代码一起提供的应用笔记描述了特定代码类型的特性和用法。两位数字后面的字母是特定代码类型的修订代码。例如,修订版“D”包含修订版“C”中问题的修复。当同一代码类型的多个修订版可用时,应使用最新版本。
典型 CE 代码图像的一部分如下所示:
// File: ce34a02d_ce.c // // CE Program Image File (8051 C format) const short code NumCeCode=1280; // The number of words in the 'CeCode' array. const unsigned char code CeCode[]={ 0x20,0xe3, 0x74,0x45, 0xec,0xff, 0x8c,0x45, 0x20,0xe4, 0x74,0x46, 0xed,0xff, 0x8c,0x46, 0x20,0xe3, 0x74,0x45, 0xec,0xff, 0x8c,0x45, 0x20,0xe4, 0x74,0x46, 0xed,0xff, 0x8c,0x46, 0x20,0xe3, 0x74,0x45, 0xec,0xff, 0x8c,0x45, 0x20,0xe4, 0x74,0x46, 0xed,0xff, 0x8c,0x46, 0x20,0xe3, 0x74,0x45, 0xec,0xff, 0x8c,0x45, 0x20,0xe4, 0x74,0x46, 0xed,0xff, 0x8c,0x46, ... 0x8f,0x05, 0x21,0x03, 0x8f,0x03, 0x21,0x04, 0x8f,0x04, 0x21,0x05, 0x8f,0x05, 0x20,0x03, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff, 0xff,0xff };
两个字节(16 位)组合形成一个 CE 操作码。0xFFFF 是 STOP 指令的操作代码。
典型CE数据图像的一部分如下所示:
// File: ce34a02d_dat.c // // CE Data Image File (8051 C format) const short code NumCeData=268; // The number of words in the 'CeData' array. const unsigned char code CeData[]={ 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0xff,0xff,0xff,0xff, 0x00,0x00,0x40,0x00, 0x00,0x00,0x40,0x00, 0x00,0x00,0x40,0x00, 0x00,0x00,0x40,0x00, 0x00,0x00,0x40,0x00, 0x00,0x00,0x40,0x00, 0x00,0x00,0x40,0x00, 0x00,0x00,0x40,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x50,0x00, 0x00,0x00,0x00,0xab, 0x00,0x00,0x19,0x2c, 0x00,0x00,0x09,0xd8, 0x01,0x6d,0x24,0x90, 0xff,0xff,0xff,0xff, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff, 0x63,0x65,0x33,0x34, 0x61,0x30,0x32,0x64, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0c, 0x00,0x00,0x59,0xba, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x18,0x00, 0x00,0x00,0x09,0xd8, 0x00,0x00,0x00,0x00, 0xff,0xff,0xff,0xff, 0x00,0x00,0x40,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x20,0x00,0x00,0x00, 0x20,0x00,0x00,0x00, 0x60,0x00,0x00,0x00, 0x60,0x00,0x00,0x00, 0x00,0x00,0x80,0x00, 0x40,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, … 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00 };
CE 数据以 4 字节(32 位)字进行组织。这些是定点数据,可以是CE处理的任何类型的数据,例如校准系数,常数,中间结果或输出数据。
请注意从数据字段的第 0 行开始的 40x0/00x5 字节组合(以黄色显示)。这些是位于CE数据寄存器0x0010及以上的校准系数的默认设置。这些值实际上被解释为0x00004000。启动时,需要将 CE 数据映像的基本部分复制到 XRAM,从地址 0x0000 开始,以便 CE 代码具有有效的数据。这是通过仪表代码完成的。CE 数据映像末尾的数据0x00,并且仪表代码可能会通过不将零数据复制到 CE RAM 而采取快捷方式。
请注意,某些 CE 代码在数据映像末尾具有非零数据,并且不能对这些代码使用快捷方式。下面显示了此类代码的示例(请注意以黄色标记的非零字节嵌入在零字节中):
const short code NumCeData=414; // The number of words in the 'CeData' array. const unsigned char code CeData[]={ 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0xff,0xff,0xff,0xff, 0x00,0x00,0x40,0x00, 0x00,0x00,0x40,0x00, 0x00,0x00,0x40,0x00, 0x00,0x00,0x40,0x00, 0x00,0x00,0x40,0x00, 0x00,0x00,0x40,0x00, 0x00,0x00,0x40,0x00, 0x00,0x00,0x40,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x50,0x00, 0x00,0x00,0x00,0xe3, 0x00,0x00,0x19,0x2c, 0x00,0x00,0x08,0x88, 0x01,0x6d,0x24,0x90, 0xff,0xff,0xff,0xff, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0xff,0xff,0xff,0xff, 0x63,0x65,0x33,0x34, 0x61,0x32,0x30,0x62, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0c, 0x00,0x00,0x58,0xc1, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x18,0x00, 0x00,0x00,0x09,0xd8, 0x00,0x00,0x00,0x00, 0xff,0xff,0xff,0xff, 0x00,0x00,0x40,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x20,0x00,0x00,0x00, 0x20,0x00,0x00,0x00, 0x60,0x00,0x00,0x00, 0x60,0x00,0x00,0x00, 0xff,0xff,0xff,0xff, 0x00,0x00,0x80,0x00, 0x40,0x00,0x00,0x00, 0x00,0x00,0x00,0x50, 0x00,0x00,0x00,0x03, 0x03,0x35,0x92,0x44, 0x02,0xfe,0xcc,0xc8, 0x02,0xfe,0xcc,0xc8, 0x02,0xfe,0xcc,0xc8, 0x02,0xfe,0xcc,0xc8, 0x05,0x90,0x0e,0x98, 0x05,0x59,0x49,0x1c, 0x05,0x90,0x0e,0x98, 0x05,0x90,0x0e,0x98, 0x05,0x90,0x0e,0x98, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x0d, 0x12,0xe0, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0xff,0xff,0xff,0xff, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00, };
保留用于CE代码的71M653x和71M654x IC的闪存
对于具有 0KB 闪存的产品,闪存范围从 0000x0 到 64xFFFF,对于 0KB 产品,闪存范围从 1x128FFFF,对于 0KB 产品,闪存范围从 3x256FFFF。CE 代码映像由链接器放置在 1KB 边界 (0x0400) 上的此范围内的某个位置,然后由 CE 在运行时使用 I/O RAM 中的指针找到。 乘以 1024 (0x0400) 得到 CE 代码的闪存位置。将CE代码放置在闪存的顶端是有利的,这样它可以在不影响其他代码的情况下增加大小。对于大尺寸的 CE 代码,必须移动到低 1KB 或 2KB 的地址,因为该特定 CE 代码的末尾可能会超过代码库的结束地址。CE_LCTNCE_LCTNCE_LCTN
有时仪表代码的默认设置不起作用,因为CE代码太大。计量代码的默认值已经有 25% 的额外空间,特别是为了允许一些增长。但是,非常大的CE代码可能需要超过25%的额外空间。
代码的大小在常量中指定,常量是 CE 代码映像的一部分。 是代码中 CE 指令的实际数量。生成文件时,它将插入到 _ce.c 代码文件中。例如,对于许多标准 1950M71x CE 代码,是 653。由于 CE 代码由 16 位字构成,这使得代码的总长度为 2 × 1950 = 3900 字节。复杂的 CE 代码通常较大,例如 CE34A20,它有 2235 个单词或 4470 个字节。NumCeCodeNumCeCodeNumCeCode
71M653x 和 71M654x IC 的内存
CE 代码的 RAM 位于一般 XRAM 中,在所有 71M653x 和 71M654x IC 中,CE 和微处理单元 (MPU) 之间共享。
71M653x的XRAM范围从0x0000到0x0FFF(4KB)。71M654x 的 XRAM 范围介于 3KB(0x0000 至 0x0BFF)和 5KB(0x0000 至 0x13FF)之间,具体取决于零件类型。
在所有 71M653x 和 71M654x 器件中,从 0x0000 开始的最低 XRAM 位置保留用于 ADC 输出和校准系数,然后是 CE 寄存器和传递变量(有关确切的 CE 寄存器位置,请参见数据手册)。在此之上,CE 代码将 XRAM 空间用于内部变量。重要的是,MPU 和 CE 使用 XRAM 之间没有重叠。MPU 应占用朝上地址的 XRAM。
CE 代码在常量中声明其 XRAM 使用情况,常量以 32 位字测量。例如,320 个 32 位字将产生 1280 字节 (0x500)。NumCeData
在运行时,即当仪表代码启动时,MPU 将 CE 数据图像中的常量复制到 XRAM,作为初始化的一部分。 是为此复制操作指定的源地址。请注意,声明为 ,这意味着数据图像被视为代码,因此由链接器放置在闪存中。MPU 代码可以在链接器放置它的位置找到 CE 数据图像。CeDataCeDataconst unsigned char code
基本上,CE数据图像可以位于闪存中的任何位置。但是,1KB边界(0x0400)被重新推荐,因为MPU代码可能希望在闪存中更新图像,例如,当用户想要将校准和其他参数存储在EEPROM中而不是闪存中时。擦除整个闪存页面非常简单,这是在将CE参数写入非零闪存之前必须发生的情况。CE数据映像不跨越页面边界是有利的:当CE数据映像更新到闪存时,当映像在闪存页边界内时,读/写操作更简单(有关详细信息,请参阅测量仪SoC的数据手册)。
常规内存映射
图 1 显示了一般内存映射:闪存包含 MPU 的代码以及 CE 的代码和数据映像。对于CE数据图像,有一个非零部分和一个零部分。在运行时,MPU 和 CE 都在闪存外运行。当 MPU 代码启动时,它会将 CE 数据映像复制到 XRAM 中,该映像在 CE 和 MPU 之间共享。
MPU 代码可以选择仅复制 CE 数据映像的非零部分或复制整个 CE 数据映像。
图1.常规内存映射。
Keil 编译器设置
使用新的 CE 代码需要将代码和数据文件(例如 CE34B07G_ce.c 和 CE34B07G_dat.c)复制到代码文件夹环境的 CE 文件夹中。演示代码源由Maxim以固定文件夹结构提供。客户使用的仪表应用代码可能具有类似的结构。下面显示了 71M6533 演示代码文件夹结构的示例。
当我们打开CE文件夹时,我们看到作为演示代码的一部分提供的CE代码和CE数据图像的集合。请注意,代码构建通常只使用一个 CE 代码映像和一个数据映像。我们必须让Keil μVision环境知道要使用哪些CE代码图像。这是通过在Keil μVision 4图形用户界面(GUI)的左侧面板(项目面板)中选择CE组,右键单击,然后选择“管理组件”来完成的。如图 2 所示,选择“组”下的“CE”条目后,可用的 CE 文件将显示在右侧面板中的“文件”下。
图2.“项目组件”选项卡。
按“添加文件”按钮将打开一个对话框,允许浏览到CE代码和数据映像的物理位置,以进行选择并包含在代码构建中。之后,必须单击浏览对话框的“关闭”按钮。不需要的CE文件应通过选择其文件名并按“文件”下右侧面板中的删除按钮来删除。
注意:此操作仅从 Keil 项目中删除文件。删除的文件仍实际存在于硬盘驱动器上。
必须调整Keil PK51环境中“目标选项”中的另一个选项卡以适应要合并的CE代码:“目标”选项卡有一个区域,需要定义CE代码所需的RAM空间。此条目允许 Keil PK51 编译器/链接器定义 80515 MPU 的 XRAM 变量和堆栈中的位置。下面的图 3 显示了在“开始”窗口中0x06A4和“大小”窗口中0x096C的条目。条目0x06A4在 XRAM 空间中保留 0x06A4 或 1700 个十进制字节,即从 0x0000 到 0x06A3 的范围,用于 CE RAM 使用,并为 MPU 保留从 0x06A4 到 0x0FFF(对于 4KB RAM 大小)的区域。条目0x06A4对应于乘以 4,因为每个 CE 寄存器/字相当于四个字节。“大小”下的条目是最大可用 XRAM 大小(本例中为 4KB 或 0x1000)与“开始”下给出的地址之间的差异。NumCeData
请注意,对于所有 71M653x IC 和 71M654xG IC,检查“代码库”并正确选择库数,即 8 个用于 256KB 闪存,4 个用于 128KB。
图3.“目标”选项卡。
Keil 编译器中的设置的一个好处是,一旦保存项目,它们就会反映在 Keil 项目文件(*.uv2、*.uvproj)中。这意味着复制 Keil 项目文件可保证正确应用设置,并且不需要手动重新输入。
CE代码是为模拟前端(AFE)的特定设置生成的,即采样频率、有限脉冲响应(FIR)滤波器长度、采样通道的数量和顺序以及其他参数的组合。在某些情况下,MPU 时钟也必须进行调整。使用AFE设置而不是指定设置操作CE代码会导致故障。
CE代码通常带有自己的应用说明或AFE所需设置的简要说明。应用笔记或说明中指定的设置必须通过MPU源代码中的相应更改来实现。
请注意,如果 Wh、VARh、VnSQSUM_X、InSQSUM_X 或其他计量参数的 LSB 已使用新的 CE 代码进行更改,则必须在源代码中调整 LSB 值。
闪存操作和 CE 代码
根据设计,闪存上的 MPU 代码操作需要禁用 CE。这是通过清除CE_E位(I/O RAM 地址 3x0 处的第 2000 位)来实现的。清除该位后,需要完整CE代码运行的延迟(例如,396Hz码采样为2520μs,458Hz码采样为2184μs),以使CE在开始任何闪存操作之前遇到STOP命令。
71M653x 系列电能计量 IC
CE 租赁代码
对于 71M653x 演示代码(截至修订版 4p7b),main.c 中的指令加载十进制 31,结果为 0x400 * 31 = 0x7C00。稍后,指针在 ce_30.c 中重新加载,在 options.h 中定义为 0x78。这使得闪存中的最终CE位置0x78 * 0x400 = 0x1E000。如前所述,将CE代码放置在闪存的顶端是有利的,这样它可以在不影响其他代码的情况下增加大小。对于大尺寸的CE代码(即如果>512),必须指向低1KB或2KB的地址,即 必须递减 1 或 2。CE_LCTNCE_LCTN_ADRNumCeCodeCE_LCTNCE_LCTN
CE_LCTN指向 CE 代码开始的地址,即第一条指令。请注意,占用两个字节,这些字节不是代码本身的一部分。这意味着,当使用 Keil PK51 的链接器设置放置 CE 代码图像时,图像位置为 - 2。NumCeCodeCE_LCTN
CE 时钟速率和代码长度
71M653x电能计量IC可以以标准的4.915MHz速率或9.3804MHz的双时钟速率(设置位时)运行CE。采样频率(帧速率)、可执行CE代码周期和CE时钟速率的值不能任意,因为CE必须在为多路复用器帧分配的时隙内完成一次代码运行。CE_10MHZ
典型的帧持续时间为396.729μs(采样频率为2520.62Hz),在4.9152MHz CE时钟速率(每条指令203ns)下,1950 CE指令适合一帧。所有超过 1950 条指令(或超过 3.8KB 代码大小)的 CE 代码必须以 9.8304MHz(每条指令 101.5ns)的 CE 时钟速率运行,这允许在一个帧中最多包含 3900 条指令(相当于 7.6KB CE 代码大小)。
包括零线电流采样的典型多相CE代码的工作频率为2184.53Hz或457.76μs。这些代码允许以2255.4MHz CE时钟速率执行9152条指令。
单相码可以具有更快的帧速率,例如3276.8Hz,每帧305.176μs。这些代码在 1500.4MHz 时仅适合 9152 条指令,在 3000.9MHz 时仅适合 8304 条指令。
了解采样频率(帧速率)、CE代码周期和CE时钟速率之间的关系有助于用户理解如何设置位,如果给定CE代码的应用笔记中尚未提及。CE_10MHZ
如果设置了CE_10MHZ位,则还必须设置M40MHZ位。这意味着必须调整MPU时钟速率,因此波特率和定时器常数也应全部调整。
凯尔设置
图 4 中“BL51 杂项”选项卡(在 Keil PK51 环境中可通过“目标选项”访问)中显示的条目为 CE 代码映像 (CE0A34A_CE 分配了20xDFFE上方的空间。C在本例中)。请注意,使用的是 BANK3,它将代码放置在闪存位置0x1DFFE。
图4.BL51 杂项选项卡。
CE 数据映像通常放置在比 1024 字节高 0 字节的位置,在0xEFFE处,导致使用 BANK1 进行3x0EFFE。在上图中,已选择CE数据图像从1x200F0(1x1F2FE + <>)开始。
参见图5,并参考数据手册中的表38,了解BANK 3的物理位置:
图5.71M653X组切换台。
欧共体日期
应用于的相同空间注意事项适用于 如果 × 4 大于 1024,则代码映像必须在闪存中向下移动 1KB。在这种情况下,还必须递减,以避免闪存中CE代码和CE数据重叠。NumCeCodeNumCeData:NumCeDataCE_LCTN
在运行时,CE 数据映像中的常量将作为初始化的一部分复制到 XRAM。ce_30.c 中的以下代码执行复制操作:
FL_BANK = BANK_CE; memcpy_cer ( (int32x_t *) CE_DATA_BASE, (int32r_t *) CeData, min(CE_DATA_SIZE, NumCeData) ); FL_BANK = saved_bank; }
CE_DATA_BASE在 CE653x.h 中定义为0x0000。在此文件中,定义为 0x0140 32 位字 (= 0x0500)。请注意,复制例程使用最小值 和 。这是因为只需要使用 复制 CE 代码映像的下半部分,这是用于将基本数据从闪存中的 CE 数据映像复制到 XRAM 中的 CE 数据区域的计数。数据区域的其余部分(即最大为完整大小)不会被复制,并且在刚刚清除为零时应该可以正常工作。此部分复制操作的目的是减少 CE 数据表消耗的闪存大小。CE 编程人员通常会在 中移动所有特殊的起始值(非零值)。CE_DATA_SIZECE_DATA_SIZENumCeDataCE_DATA_SIZENumCeDataCE_DATA_SIZE
注意: 某些 CE 代码在其 CE 数据映像的末尾具有非零 CE 数据。这些必须由 MPU 复制。在这种情况下,使用 和 的最小值不是建议的过程,复制例程应使用× 4。CE_DATA_SIZENumCeDataNumCeData
如果需要更大的CE XRAM使用,则需要更改。CE_DATA_SIZE
具有较大 XRAM 分配的 CE 代码需要以下更改:
Keil PK51环境中可通过“目标选项”访问的“目标”选项卡必须指定CE代码所需的XRAM空间。
CE_DATA_SIZE需要更新 (CE653x.h)。
MPU 代码中的硬件初始化
I/O RAM 的初始化是使用 defaults.c 中的结构完成的。此结构由多个段组成,这些段处理从与0x2000(I/O RAM 的基址)的给定偏移量开始的多个 I/O 地址。从数据手册的固件接口部分获取 I/O RAM 图有助于破译条目。大多数条目都是硬编码的,例如0x34地址 0x2001,它以 0x34 或 52 十进制初始化。结合(两位,设置为零,导致数值为 42),每个累积间隔的结果样本数为 42 × 52 = 2184。uint8r_t_ri_defaults[ ]SUM_CYCLESPRE_SAMPS
某些条目派生自定义,例如 at 地址 0x2000,它是 的逻辑 OR,如 options.h 和 中定义,如 IO653X.h 中定义,或在地址 0x2004,在 OPTIONS_GBL.H 中定义。EQUATION | CE_10MHZEQUATIONCE_10MHZMPU_FREQ
后面的段,例如从I/O RAM地址0x2030开始的通用输入输出(GPIO)配置,对于CE功能并不那么重要。下面给出了 defaults.c 的示例:uint8r_t_ri_defaults[ ]
uint8r_t ri_defaults[] = { // 0 1 2 3 4 5 6 7 0x00, 0x10, // address and length EQUATION | CE_10MHZ, 0x34, // 2000-2001 0x03, // 2002 enable xfer_busy, RTC interrupt. 0x00, MPU_FREQ, CONFIG1_VAL, 0x00, // 2003..6 0x24, // 2007 enable PLL_OK 0x24 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2008-F. DIO Resources, etc. 0x11, 0x01, // address and length, index 18 0x40, // Default value for the analog clock adjustment 0x1C, 0x03, // address and length, index 21 0x04, 0x00, 0x00, // Default value for PREG and QREG 0x20, 0x0A, // address and length, index 26 0x00, 0x23, // 2020-1. all states, all on 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 2022-9 0x30, 0x2B, // address and length; LCD buffer/ DIO outputs // Clear segments visible on LCD or not DIOs; Leave DIOs as outputs 0x00, 0x00, // 2030..1=seg42,43 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, // 2030..7=seg44..49=dio24..29 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, // 2038..F=seg50-57=dio30..37 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, // 2040..7=58..65=dio38..45 0x00, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, // 2048..F=66..73=dio46..53 0x80, 0x80, 0x90, 0x90, 0x00, 0x00, 0x00, 0x00, // 2050..7=74..81=dio54..61 0x00, 0x00, 0x00, // 2058..A=dio40,41,blink19&18 0x60, 0x08, // address and length 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 2060-7. RTM. 0x70, 0x01, // address and length 0x00, // 2070 0x80, 0x02, // address and length 0x4B, 0x51, // 2080-1. 10ms Pulse_Width, Pulse_Interval. 0x90, 0x0B, // address and length 0x10, 0x32, 0x54, 0x76, 0x98, 0x00, // 2090 normal sequence 0x1A, 0x3B, 0x54, 0x76, 0x98, // Alt sequence reads temp, vbat and aux 0x9D, 0x01, // address and length 0x07, // 209D: 6 states 0xA7, 0x09, // address and length 0x00, // 20A7: boot size 0x31, 0x00, 0x00, // 20A8-A. CE5, WAKE, TMUX. 0x00, 0x22, 0x22, 0x00, 0x00, // 20AB..F; differential, diff. chop enabled 0xFD, 0x03, // address and length 0x00, 0x00, 0x00, // 20FD-F. TRIMSEL, TRIMX, TRIM. 0, 0 // ending record };
调整仪表代码和Keil设置以适应更大或更小的CE代码和数据
大小大于用于现有构建的大小(如中所述)的 CE 代码需要进行以下调整:NumCeCode
向下调整CE_LCTN_ADR
Keil PK51 环境中可通过“目标选项”访问的“目标”选项卡必须指定 CE 代码所需的闪存空间。此条目必须与 的新选择 相对应。CE_LCTN_ADR
具有更大或更小的 XRAM 分配的 CE 代码需要以下更改:
Keil PK51环境中可通过“目标选项”访问的“目标”选项卡必须指定CE代码所需的XRAM空间。
Keil PK51 环境中可通过“目标选项”访问的“BL51 杂项”选项卡必须指定闪存中的位置。
CE_DATA_SIZE需要在源代码 (CE653x.H) 中更新。
应检查 CE 代码是否存在超出 的数据。CE_DATA_SIZE
如果 CE 数据超出 0x04FF,则在 XRAM 中以 meter.c 为单位移动结构的位置。totals
将代码下载到 71M653x 闪存
以10MHz频率运行CE的CE代码要求在使用ADM3 ICE下载代码时设置I/O RAM地址0x2000位(位51)。下载代码之前的正常过程是只清除 0x2000 处的整个字节,这会清除过程中的位(位 4)。对于以10MHz运行CE的CE代码,在下载代码之前将0x08的值写入I/O RAM 地址0x2000会很有帮助,该代码保持位(位3)。CE10MHZCE_ECE10MHZ
71M654x 系列电能计量 IC
一般性评论
71M654x 代码的注意事项与 71M653x 代码非常相似。71M6543的典型CE代码如下所示。请注意,同一变量 用于指定代码的长度。NumCeCode
// File: ce43a22_ce.c // // CE Program Image File (8051 C format) const short code NumCeCode=1512; // The number of words in the 'CeCode' array. const unsigned char code CeCode[]={ 0xec,0xff, 0x20,0x48, 0x74,0xd8, 0x8c,0x48, 0x74,0xd8, 0x8c,0x48, 0x74,0xd8, 0x8c,0x48, 0x74,0xd8, 0x8c,0x48, 0x74,0xd8, 0x8c,0x48, 0x74,0xd8, 0x8c,0x48, 0xed,0xff, 0x20,0x4c, 0x74,0xd9, 0x8c,0x4c, 0x74,0xd9, 0x8c,0x4c, 0x74,0xd9, 0x8c,0x4c, 0x74,0xd9, 0x8c,0x4c, 0x74,0xd9, 0x8c,0x4c, 0x74,0xd9, 0x8c,0x4c, 0x20,0x5c, 0x8f,0x74, 0x20,0x5e, 0x8f,0x76, 0x20,0x60, 0x8f,0x78, 0x20,0x5d, 0x8f,0x7a, 0x20,0x5f, 0x8f,0x7b, 0x20,0x61, 0x8f,0x7c, 0x26,0x20, 0x8f,0x38, 0xf0,0x38, 0x20,0x5d, 0x68,0x5f, 0x69,0x61, 0x8f,0x38, 0x20,0xf9, 0x05,0xfa, 0x15,0xf9, 0x8f,0xf9, 0x20,0xfa, 0x05,0x38, 0x11,0xf9, 0x8f,0xfa, 0x20,0xb0, 0xd0,0x4f, 0xf0,0xf9, 0x2b,0x4f, 0x8f,0x38, 0x30,0x38, 0x81,0x38, 0x30,0x38, 0x86,0x38, 0x20,0x38, 0x00,0xb2, 0x87,0xb3, 0x8f,0xb2, 0xb7,0xb2, 0x20,0xb3, 0x00,0xb4, 0x8f,0x38,
在此示例中,指定的 1512 个单词长度等于 3024 字节(0x0BD0 字节)。在71M654x IC中,闪存中CE代码的位置编码为I/O RAM 地址0x2109()。CE_LCTN
图 6 显示了代码空间、指针和 Keil BL51 链接器选项卡中的条目之间的关系。CE_LCTN
图6.代码空间、CE_LCTN指针和 Keil BL51 链接器之间的关系。
Signum 仿真器中闪存区域0xCFD0到0xD05F的代码窗口如图 7 所示。位置 0xCFFE 处的条目05x8E1512(0 十进制)对应于 。CE 代码映像本身从位置 0xD000 开始。NumCeCode
图7.签名模拟器中的“代码”窗口。
CE 数据映像
在 71M654x 演示代码中,CE 数据图像通过 Main.c() 中的例程复制到 XRAM 中:
// Set CE RAM to default. memcpy((uint8x_t*)CE_DATA_BASE, CeData, (4 * NumCeData));
与 71M653x 演示代码相反,71M654x 演示代码不基于 和 的最小值进行复制操作。71M654x 演示代码将 定义的整个数据映像复制到 XRAM 中。CE_DATA_SIZENumCeDataNumCeData
调整 I/O 内存位置
为了建立CE代码的环境,I/O RAM条目控制多路复用器设置、FIR长度、增益控制、输入引脚配置(单端/差分)、时钟选择等。如有必要,必须检查和更改。
在 71M654x 演示代码中,I/O RAM 寄存器由名为 的结构控制。此结构可以在 main.c 中找到,并且不包含命名元素,这意味着必须从 I/O RAM 地址0x2100开始手动计算字节,以确定其含义。io_ram_table[]
下一页上的列表显示了典型代码的默认条目及其含义。该结构在开头包含四个字节,用于确定起始地址 (0x2100) 和条目长度 (0x0013)。
请注意,设置为 0x03,这会将 CE 代码映像放在闪存中的0x0C00。这是Maxim 71M654x演示代码的典型特征。在闪存的较低范围内分配一个位置,使代码与IC的32KB和64KB闪存尺寸变体兼容。CE_LCTN
const uint8r_t io_ram_table[] =
{
// Configuration without M6000 (Remote sensor)
// Wh = max(VA * IA); IA is shunt
0x21, 0x00, 0x00, 0x13, // address (0x2100) and length (0x13 = 19 bytes decimal)
0x01, 0x11, 0x11, 0x11, 0x12, 0xA0, 0x00, 0x09, // MUX_DIV=0, MUX10_SEL=1, MUX7_SEL=1, MUX6_SEL=1,
// MUX5_SEL=1, MUX4_SEL=1
// MUX3_SEL=1, MUX2_SEL=2, MUX1_SEL=A, MUX0SEL=0
// EQU=0, no chop, no RTM, CE_E=0, SUM_SAMPS[12:8]=9
0xD8, 0x03, 0x42, 0x5D, 0x3A, 0x00, 0x00, 0x01, // SUM_SAMPS[7:0]=0xD8 ? SUM_SAMPS = 2520 decimal
// CE_LCTN=3, PLS_MAXWDTH = 0x42, PLS_INTERVAL = 0x5D ? 93 decimal
// DIFFn_E = 1, FIR_LEN = 01, RTM
0x02, 0x03, 0x04, // RTM, last byte not used. There is no I/O RAM address 0x2112
#if POWER_CONTROL
0x22, 0x00, 0x00, 0x01, // address (0x2200) and length (0x01)
0x32, // Clocks: MCK=19.6608MHz, MPU=0.6644MHz, ADC=0.66MHz
#endif
0x21, 0x00, 0x00, 0x01, // address (0x2100) and length (0x01)
0x30, // set mux_div after ADC
调整仪表代码和Keil设置以适应更大的CE代码和数据
大小大于用于现有构建的大小(如中所述)的 CE 代码需要进行以下调整:NumCeCode
调整 main.c 中的源代码,字节在 0x2109。CE_LCTN
Keil PK51 环境中可通过“目标选项”访问的“目标”选项卡必须指定 CE 代码所需的闪存空间。此条目必须与 的新选择 相对应。CE_LCTN
71M653x 代码中使用的结构已重命名为 71M654x 代码,这是结构的一部分。设置为 0x2800,这是 I/O RAM 中 NV-RAM 数据字段的开头。totalsreg_datanvm_sreg_data
具有较大 XRAM 分配的 CE 代码需要以下更改:
Keil PK51环境中可通过“目标选项”访问的“目标”选项卡必须指定CE代码所需的XRAM空间。
CE_DATA_SIZE需要在源代码 (CE654x.H) 中更新。
应检查 CE 代码是否存在超出 的数据。CE_DATA_SIZE
请注意,与 71M654x 系列相比,71M653x 系列在闪存中分配代码空间的窗口看起来不同(参见图 8):
图8.BL51 在 Keil uVision 4 中定位窗口。
请注意,71M654x 演示代码中使用了其他固定闪存地址:
// Flash addresses. #define FLASH_CE_CAL 0xfc00 // Address of CE calibration. #define FLASH_MPU_CAL 0xf800 // Address of MPU calibration.
闪存地址0xFC00保留用于保存关键CE参数,如校准系数、、等。使用 ]U 命令。WRATECECONFIG
闪光地址0xF800保留用于保存关键MPU参数,即用户可以用“)”关键字输入的参数,例如当用户输入“)3=+2080”将IMAX值设置为208A时。
必须注意不要将CE代码或数据映像与这些固定的闪存位置重叠。
故障 排除
使用上面详述的技术生成的代码图像最初可能并不总是有效。下面列出了一些故障排除提示。
对测量仪或演示代码进行故障排除的好方法包括以下步骤:
将ADM51仿真器连接到目标并启动WEMU51应用程序。
擦除目标闪存。
使用模拟器的 SET 命令清除 XRAM 空间。例如,命令 SET /MDATA 0 3FF 0 用零填充从 0 到 0x3FF 的 XRAM 内存。
使用 WEMU51 中的“文件 – 加载”命令将生成的代码图像加载到闪存中。
在程序窗口中检查CE代码图像的位置(图像是否已加载到预期位置?,映像是否完整?有重叠吗?
在程序窗口中检查CE数据图像的位置(图像是否已加载到预期位置?图像是否完整?有重叠吗?
单击 RES,然后在 WEMU51 用户界面中单击 Go。允许代码运行 1 到 2 秒,然后单击 STOP 按钮停止代码执行。
在数据窗口中检查0x0000附近的 XRAM。代码现在应该已将 CE 数据映像复制到 XRAM。靠近0x0000的地址会被ADC样本覆盖,但0x0010及以上的地址应反映CE数据镜像。检查是否已复制完整的数据图像,即从0x0000到或至少到)。NumCeDataCE_DATA_SIZE
检查 I/O RAM,即从 0x2000 (71M653x) 或 0x2000 和 0x2100 (71M654x) 开始的地址。检查 CE 代码位置的指针是否已正确初始化 ()。CE_LCTN
检查控制AFE的I/O RAM 寄存器,例如、、多路复用器插槽分配、、、 以及用于模拟引脚差分/单端操作的控制寄存器。所有设置必须与CE代码应用说明中指定的设置相对应。MUX_DIVSUM_PREFIR_LENPRE_E
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !