本应用笔记介绍如何修改演示代码或电表应用代码,以便编译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
诺基亚2020年推出DSS技术方案,支持DSS的5G FDD终端设备也将上市
基于图像处理烤烟鲜烟叶含水率的诊断研究
2020机器人大赛即将在北京拉开帷幕
智能废物处理解决方案可助力实现循环经济
单片机设计产品的六大步骤说明
使用新的计算引擎(CE)代码图像编译仪表代码
企业上云一张网 华为将在分析师大会上亮出哪些大招
卖身在即?特斯拉押注中国市场
垃圾分类时代来临,如何选择一款实用的垃圾处理器?
JAE推出用于全尺寸SD卡座的SG50系列连接器
苹果遭老员工吐槽:这个公司正在摧毁设计!
一名软件测试工程师的加班经历
MTP/MPO光纤连接器的分类以及用途
板载电源设计(热插拔/LDO/滤波电容/升压电路)
必胜客为了吸引NFL球迷的注意,推出了特别版互动式AR披萨包装盒
工信部:今年将加快6G网络布局
村田适用于车载以太网BroadR-Reach®的静噪元件
宽带卫星通信浅析
AI和HPC制造相当困难且昂贵 定制SoC的黄金时代即将来临
诺华资本凭产业深度布局获誉“年度最佳产业投资机构奖”