本應(yīng)用筆記介紹如何修改演示代碼或電表應(yīng)用代碼,以便編譯71M6531/71M6532和71M6533/71M6534和71M6541/71M6542/71M6543系列電表IC的新計算引擎(CE)代碼圖像并將其鏈接。
介紹
背景
71M6531/71M6532 和 71M6533/71M6534 和 71M6541/71M6542/71M6543 系列電能計量 IC 設(shè)計用于計算引擎 (CE) 代碼,可適應(yīng)手頭的應(yīng)用。 在某些情況下,Maxim需要并提供特殊的CE代碼,以支持不同的傳感器類型或功能,如濾波或諧波分析。
由于CE代碼在閃存和XRAM中占用不同的空間,因此根據(jù)應(yīng)用的不同,需要幾個步驟來容納特定的CE代碼映像。這是通過修改儀表代碼(演示代碼或儀表應(yīng)用代碼)源和 Keil 編譯器設(shè)置 (Keil μVision 4) 來完成的。??
本應(yīng)用筆記討論了將新的CE代碼映像成功集成到儀表代碼中的必要步驟。在執(zhí)行本應(yīng)用筆記中描述的任務(wù)時,Keil μVision 和 Signum Systems? WEMU51 等工具的一般知識很有幫助。建議閱讀 71M653x 和/或 71M654x IC 的軟件用戶指南 (SUG)。
儀表代碼和CE代碼之間的通用接口
如何交付 CE 代碼和 CE 數(shù)據(jù)文件
客戶無法使用 CE 的源代碼。CE 代碼作為代碼映像提供,該映像鏈接到測量儀代碼閃存映像,然后解釋為 CE 操作代碼,并由 CE 在運行時執(zhí)行。執(zhí)行時,CE 代碼需要初始化 XRAM (CE RAM) 中的某些寄存器。例如,未校準(默認)儀表的校準系數(shù)設(shè)置為0x4000,通常WRATE的標準值也是CE數(shù)據(jù)圖像的一部分。交付給客戶的 CE 代碼文件如下:
CE 代碼圖像(例如 CE34B07G_ce.c):此代碼適用于 71M6534 或 71M6533,其版本為 B07G。
CE 數(shù)據(jù)映像(例如 CE34B07G_dat.c):此數(shù)據(jù)集適用于 07M71 或 6534M71 的代碼版本 B6533G。
CE 文件以前導(dǎo)字符“CE”命名,后跟指定儀表片上系統(tǒng) (SoC) 系列的兩位數(shù)字,例如 “34” 表示 71M6533 和 71M6534,或“41” 表示 71M6541 和 71M6542。下一個字母通常指定代碼兼容的芯片版本(A、B、C、...)。修訂字母后面的兩位數(shù)字是代碼類型。當開發(fā)具有明顯不同功能的新代碼時,將為這兩個數(shù)字選擇一個新數(shù)字。任何特性或功能都不能直接從兩位數(shù)字派生出來。通常,與CE代碼一起提供的應(yīng)用筆記描述了特定代碼類型的特性和用法。兩位數(shù)字后面的字母是特定代碼類型的修訂代碼。例如,修訂版“D”包含修訂版“C”中問題的修復(fù)。當同一代碼類型的多個修訂版可用時,應(yīng)使用最新版本。
典型 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 };
兩個字節(jié)(16 位)組合形成一個 CE 操作碼。0xFFFF 是 STOP 指令的操作代碼。
典型CE數(shù)據(jù)圖像的一部分如下所示:
// 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 數(shù)據(jù)以 4 字節(jié)(32 位)字進行組織。這些是定點數(shù)據(jù),可以是CE處理的任何類型的數(shù)據(jù),例如校準系數(shù),常數(shù),中間結(jié)果或輸出數(shù)據(jù)。
請注意從數(shù)據(jù)字段的第 0 行開始的 40x0/00x5 字節(jié)組合(以黃色顯示)。這些是位于CE數(shù)據(jù)寄存器0x0010及以上的校準系數(shù)的默認設(shè)置。這些值實際上被解釋為0x00004000。啟動時,需要將 CE 數(shù)據(jù)映像的基本部分復(fù)制到 XRAM,從地址 0x0000 開始,以便 CE 代碼具有有效的數(shù)據(jù)。這是通過儀表代碼完成的。CE 數(shù)據(jù)映像末尾的數(shù)據(jù)0x00,并且儀表代碼可能會通過不將零數(shù)據(jù)復(fù)制到 CE RAM 而采取快捷方式。
請注意,某些 CE 代碼在數(shù)據(jù)映像末尾具有非零數(shù)據(jù),并且不能對這些代碼使用快捷方式。下面顯示了此類代碼的示例(請注意以黃色標記的非零字節(jié)嵌入在零字節(jié)中):
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 閃存的產(chǎn)品,閃存范圍從 0000x0 到 64xFFFF,對于 0KB 產(chǎn)品,閃存范圍從 1x128FFFF,對于 0KB 產(chǎn)品,閃存范圍從 3x256FFFF。CE 代碼映像由鏈接器放置在 1KB 邊界 (0x0400) 上的此范圍內(nèi)的某個位置,然后由 CE 在運行時使用 I/O RAM 中的指針找到。 乘以 1024 (0x0400) 得到 CE 代碼的閃存位置。將CE代碼放置在閃存的頂端是有利的,這樣它可以在不影響其他代碼的情況下增加大小。對于大尺寸的 CE 代碼,必須移動到低 1KB 或 2KB 的地址,因為該特定 CE 代碼的末尾可能會超過代碼庫的結(jié)束地址。CE_LCTNCE_LCTNCE_LCTN
有時儀表代碼的默認設(shè)置不起作用,因為CE代碼太大。計量代碼的默認值已經(jīng)有 25% 的額外空間,特別是為了允許一些增長。但是,非常大的CE代碼可能需要超過25%的額外空間。
代碼的大小在常量中指定,常量是 CE 代碼映像的一部分。 是代碼中 CE 指令的實際數(shù)量。生成文件時,它將插入到 _ce.c 代碼文件中。例如,對于許多標準 1950M71x CE 代碼,是 653。由于 CE 代碼由 16 位字構(gòu)成,這使得代碼的總長度為 2 × 1950 = 3900 字節(jié)。復(fù)雜的 CE 代碼通常較大,例如 CE34A20,它有 2235 個單詞或 4470 個字節(jié)。NumCeCodeNumCeCodeNumCeCode
71M653x 和 71M654x IC 的內(nèi)存
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 輸出和校準系數(shù),然后是 CE 寄存器和傳遞變量(有關(guān)確切的 CE 寄存器位置,請參見數(shù)據(jù)手冊)。在此之上,CE 代碼將 XRAM 空間用于內(nèi)部變量。重要的是,MPU 和 CE 使用 XRAM 之間沒有重疊。MPU 應(yīng)占用朝上地址的 XRAM。
CE 代碼在常量中聲明其 XRAM 使用情況,常量以 32 位字測量。例如,320 個 32 位字將產(chǎn)生 1280 字節(jié) (0x500)。NumCeData
在運行時,即當儀表代碼啟動時,MPU 將 CE 數(shù)據(jù)圖像中的常量復(fù)制到 XRAM,作為初始化的一部分。 是為此復(fù)制操作指定的源地址。請注意,聲明為 ,這意味著數(shù)據(jù)圖像被視為代碼,因此由鏈接器放置在閃存中。MPU 代碼可以在鏈接器放置它的位置找到 CE 數(shù)據(jù)圖像。CeDataCeDataconst unsigned char code
基本上,CE數(shù)據(jù)圖像可以位于閃存中的任何位置。但是,1KB邊界(0x0400)被重新推薦,因為MPU代碼可能希望在閃存中更新圖像,例如,當用戶想要將校準和其他參數(shù)存儲在EEPROM中而不是閃存中時。擦除整個閃存頁面非常簡單,這是在將CE參數(shù)寫入非零閃存之前必須發(fā)生的情況。CE數(shù)據(jù)映像不跨越頁面邊界是有利的:當CE數(shù)據(jù)映像更新到閃存時,當映像在閃存頁邊界內(nèi)時,讀/寫操作更簡單(有關(guān)詳細信息,請參閱測量儀SoC的數(shù)據(jù)手冊)。
常規(guī)內(nèi)存映射
圖 1 顯示了一般內(nèi)存映射:閃存包含 MPU 的代碼以及 CE 的代碼和數(shù)據(jù)映像。對于CE數(shù)據(jù)圖像,有一個非零部分和一個零部分。在運行時,MPU 和 CE 都在閃存外運行。當 MPU 代碼啟動時,它會將 CE 數(shù)據(jù)映像復(fù)制到 XRAM 中,該映像在 CE 和 MPU 之間共享。
MPU 代碼可以選擇僅復(fù)制 CE 數(shù)據(jù)映像的非零部分或復(fù)制整個 CE 數(shù)據(jù)映像。
圖1.常規(guī)內(nèi)存映射。
Keil 編譯器設(shè)置
使用新的 CE 代碼需要將代碼和數(shù)據(jù)文件(例如 CE34B07G_ce.c 和 CE34B07G_dat.c)復(fù)制到代碼文件夾環(huán)境的 CE 文件夾中。演示代碼源由Maxim以固定文件夾結(jié)構(gòu)提供??蛻羰褂玫膬x表應(yīng)用代碼可能具有類似的結(jié)構(gòu)。下面顯示了 71M6533 演示代碼文件夾結(jié)構(gòu)的示例。
當我們打開CE文件夾時,我們看到作為演示代碼的一部分提供的CE代碼和CE數(shù)據(jù)圖像的集合。請注意,代碼構(gòu)建通常只使用一個 CE 代碼映像和一個數(shù)據(jù)映像。我們必須讓Keil μVision環(huán)境知道要使用哪些CE代碼圖像。這是通過在Keil μVision 4圖形用戶界面(GUI)的左側(cè)面板(項目面板)中選擇CE組,右鍵單擊,然后選擇“管理組件”來完成的。如圖 2 所示,選擇“組”下的“CE”條目后,可用的 CE 文件將顯示在右側(cè)面板中的“文件”下。
圖2.“項目組件”選項卡。
按“添加文件”按鈕將打開一個對話框,允許瀏覽到CE代碼和數(shù)據(jù)映像的物理位置,以進行選擇并包含在代碼構(gòu)建中。之后,必須單擊瀏覽對話框的“關(guān)閉”按鈕。不需要的CE文件應(yīng)通過選擇其文件名并按“文件”下右側(cè)面板中的刪除按鈕來刪除。
注意:此操作僅從 Keil 項目中刪除文件。刪除的文件仍實際存在于硬盤驅(qū)動器上。
必須調(diào)整Keil PK51環(huán)境中“目標選項”中的另一個選項卡以適應(yīng)要合并的CE代碼:“目標”選項卡有一個區(qū)域,需要定義CE代碼所需的RAM空間。此條目允許 Keil PK51 編譯器/鏈接器定義 80515 MPU 的 XRAM 變量和堆棧中的位置。下面的圖 3 顯示了在“開始”窗口中0x06A4和“大小”窗口中0x096C的條目。條目0x06A4在 XRAM 空間中保留 0x06A4 或 1700 個十進制字節(jié),即從 0x0000 到 0x06A3 的范圍,用于 CE RAM 使用,并為 MPU 保留從 0x06A4 到 0x0FFF(對于 4KB RAM 大小)的區(qū)域。條目0x06A4對應(yīng)于乘以 4,因為每個 CE 寄存器/字相當于四個字節(jié)?!按笮 毕碌臈l目是最大可用 XRAM 大小(本例中為 4KB 或 0x1000)與“開始”下給出的地址之間的差異。NumCeData
請注意,對于所有 71M653x IC 和 71M654xG IC,檢查“代碼庫”并正確選擇庫數(shù),即 8 個用于 256KB 閃存,4 個用于 128KB。
圖3.“目標”選項卡。
Keil 編譯器中的設(shè)置的一個好處是,一旦保存項目,它們就會反映在 Keil 項目文件(*.uv2、*.uvproj)中。這意味著復(fù)制 Keil 項目文件可保證正確應(yīng)用設(shè)置,并且不需要手動重新輸入。
CE代碼是為模擬前端(AFE)的特定設(shè)置生成的,即采樣頻率、有限脈沖響應(yīng)(FIR)濾波器長度、采樣通道的數(shù)量和順序以及其他參數(shù)的組合。在某些情況下,MPU 時鐘也必須進行調(diào)整。使用AFE設(shè)置而不是指定設(shè)置操作CE代碼會導(dǎo)致故障。
CE代碼通常帶有自己的應(yīng)用說明或AFE所需設(shè)置的簡要說明。應(yīng)用筆記或說明中指定的設(shè)置必須通過MPU源代碼中的相應(yīng)更改來實現(xiàn)。
請注意,如果 Wh、VARh、VnSQSUM_X、InSQSUM_X 或其他計量參數(shù)的 LSB 已使用新的 CE 代碼進行更改,則必須在源代碼中調(diào)整 LSB 值。
閃存操作和 CE 代碼
根據(jù)設(shè)計,閃存上的 MPU 代碼操作需要禁用 CE。這是通過清除CE_E位(I/O RAM 地址 3x0 處的第 2000 位)來實現(xiàn)的。清除該位后,需要完整CE代碼運行的延遲(例如,396Hz碼采樣為2520μs,458Hz碼采樣為2184μs),以使CE在開始任何閃存操作之前遇到STOP命令。
71M653x 系列電能計量 IC
CE 租賃代碼
對于 71M653x 演示代碼(截至修訂版 4p7b),main.c 中的指令加載十進制 31,結(jié)果為 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 代碼開始的地址,即第一條指令。請注意,占用兩個字節(jié),這些字節(jié)不是代碼本身的一部分。這意味著,當使用 Keil PK51 的鏈接器設(shè)置放置 CE 代碼圖像時,圖像位置為 - 2。NumCeCodeCE_LCTN
CE 時鐘速率和代碼長度
71M653x電能計量IC可以以標準的4.915MHz速率或9.3804MHz的雙時鐘速率(設(shè)置位時)運行CE。采樣頻率(幀速率)、可執(zhí)行CE代碼周期和CE時鐘速率的值不能任意,因為CE必須在為多路復(fù)用器幀分配的時隙內(nèi)完成一次代碼運行。CE_10MHZ
典型的幀持續(xù)時間為396.729μs(采樣頻率為2520.62Hz),在4.9152MHz CE時鐘速率(每條指令203ns)下,1950 CE指令適合一幀。所有超過 1950 條指令(或超過 3.8KB 代碼大小)的 CE 代碼必須以 9.8304MHz(每條指令 101.5ns)的 CE 時鐘速率運行,這允許在一個幀中最多包含 3900 條指令(相當于 7.6KB CE 代碼大?。?/p>
包括零線電流采樣的典型多相CE代碼的工作頻率為2184.53Hz或457.76μs。這些代碼允許以2255.4MHz CE時鐘速率執(zhí)行9152條指令。
單相碼可以具有更快的幀速率,例如3276.8Hz,每幀305.176μs。這些代碼在 1500.4MHz 時僅適合 9152 條指令,在 3000.9MHz 時僅適合 8304 條指令。
了解采樣頻率(幀速率)、CE代碼周期和CE時鐘速率之間的關(guān)系有助于用戶理解如何設(shè)置位,如果給定CE代碼的應(yīng)用筆記中尚未提及。CE_10MHZ
如果設(shè)置了CE_10MHZ位,則還必須設(shè)置M40MHZ位。這意味著必須調(diào)整MPU時鐘速率,因此波特率和定時器常數(shù)也應(yīng)全部調(diào)整。
凱爾設(shè)置
圖 4 中“BL51 雜項”選項卡(在 Keil PK51 環(huán)境中可通過“目標選項”訪問)中顯示的條目為 CE 代碼映像 (CE0A34A_CE 分配了20xDFFE上方的空間。C在本例中)。請注意,使用的是 BANK3,它將代碼放置在閃存位置0x1DFFE。
圖4.BL51 雜項選項卡。
CE 數(shù)據(jù)映像通常放置在比 1024 字節(jié)高 0 字節(jié)的位置,在0xEFFE處,導(dǎo)致使用 BANK1 進行3x0EFFE。在上圖中,已選擇CE數(shù)據(jù)圖像從1x200F0(1x1F2FE + <>)開始。
參見圖5,并參考數(shù)據(jù)手冊中的表38,了解BANK 3的物理位置:
圖5.71M653X組切換臺。
歐共體日期
應(yīng)用于的相同空間注意事項適用于 如果 × 4 大于 1024,則代碼映像必須在閃存中向下移動 1KB。在這種情況下,還必須遞減,以避免閃存中CE代碼和CE數(shù)據(jù)重疊。NumCeCodeNumCeData:NumCeDataCE_LCTN
在運行時,CE 數(shù)據(jù)映像中的常量將作為初始化的一部分復(fù)制到 XRAM。ce_30.c 中的以下代碼執(zhí)行復(fù)制操作:
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)。請注意,復(fù)制例程使用最小值 和 。這是因為只需要使用 復(fù)制 CE 代碼映像的下半部分,這是用于將基本數(shù)據(jù)從閃存中的 CE 數(shù)據(jù)映像復(fù)制到 XRAM 中的 CE 數(shù)據(jù)區(qū)域的計數(shù)。數(shù)據(jù)區(qū)域的其余部分(即最大為完整大?。┎粫粡?fù)制,并且在剛剛清除為零時應(yīng)該可以正常工作。此部分復(fù)制操作的目的是減少 CE 數(shù)據(jù)表消耗的閃存大小。CE 編程人員通常會在 中移動所有特殊的起始值(非零值)。CE_DATA_SIZECE_DATA_SIZENumCeDataCE_DATA_SIZENumCeDataCE_DATA_SIZE
注意: 某些 CE 代碼在其 CE 數(shù)據(jù)映像的末尾具有非零 CE 數(shù)據(jù)。這些必須由 MPU 復(fù)制。在這種情況下,使用 和 的最小值不是建議的過程,復(fù)制例程應(yīng)使用× 4。CE_DATA_SIZENumCeDataNumCeData
如果需要更大的CE XRAM使用,則需要更改。CE_DATA_SIZE
具有較大 XRAM 分配的 CE 代碼需要以下更改:
Keil PK51環(huán)境中可通過“目標選項”訪問的“目標”選項卡必須指定CE代碼所需的XRAM空間。
CE_DATA_SIZE需要更新 (CE653x.h)。
MPU 代碼中的硬件初始化
I/O RAM 的初始化是使用 defaults.c 中的結(jié)構(gòu)完成的。此結(jié)構(gòu)由多個段組成,這些段處理從與0x2000(I/O RAM 的基址)的給定偏移量開始的多個 I/O 地址。從數(shù)據(jù)手冊的固件接口部分獲取 I/O RAM 圖有助于破譯條目。大多數(shù)條目都是硬編碼的,例如0x34地址 0x2001,它以 0x34 或 52 十進制初始化。結(jié)合(兩位,設(shè)置為零,導(dǎo)致數(shù)值為 42),每個累積間隔的結(jié)果樣本數(shù)為 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 };
調(diào)整儀表代碼和Keil設(shè)置以適應(yīng)更大或更小的CE代碼和數(shù)據(jù)
大小大于用于現(xiàn)有構(gòu)建的大小(如中所述)的 CE 代碼需要進行以下調(diào)整:NumCeCode
向下調(diào)整CE_LCTN_ADR
Keil PK51 環(huán)境中可通過“目標選項”訪問的“目標”選項卡必須指定 CE 代碼所需的閃存空間。此條目必須與 的新選擇 相對應(yīng)。CE_LCTN_ADR
具有更大或更小的 XRAM 分配的 CE 代碼需要以下更改:
Keil PK51環(huán)境中可通過“目標選項”訪問的“目標”選項卡必須指定CE代碼所需的XRAM空間。
Keil PK51 環(huán)境中可通過“目標選項”訪問的“BL51 雜項”選項卡必須指定閃存中的位置。
CE_DATA_SIZE需要在源代碼 (CE653x.H) 中更新。
應(yīng)檢查 CE 代碼是否存在超出 的數(shù)據(jù)。CE_DATA_SIZE
如果 CE 數(shù)據(jù)超出 0x04FF,則在 XRAM 中以 meter.c 為單位移動結(jié)構(gòu)的位置。totals
將代碼下載到 71M653x 閃存
以10MHz頻率運行CE的CE代碼要求在使用ADM3 ICE下載代碼時設(shè)置I/O RAM地址0x2000位(位51)。下載代碼之前的正常過程是只清除 0x2000 處的整個字節(jié),這會清除過程中的位(位 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 字節(jié)(0x0BD0 字節(jié))。在71M654x IC中,閃存中CE代碼的位置編碼為I/O RAM 地址0x2109()。CE_LCTN
圖 6 顯示了代碼空間、指針和 Keil BL51 鏈接器選項卡中的條目之間的關(guān)系。CE_LCTN
圖6.代碼空間、CE_LCTN指針和 Keil BL51 鏈接器之間的關(guān)系。
Signum 仿真器中閃存區(qū)域0xCFD0到0xD05F的代碼窗口如圖 7 所示。位置 0xCFFE 處的條目05x8E1512(0 十進制)對應(yīng)于 。CE 代碼映像本身從位置 0xD000 開始。NumCeCode
圖7.簽名模擬器中的“代碼”窗口。
CE 數(shù)據(jù)映像
在 71M654x 演示代碼中,CE 數(shù)據(jù)圖像通過 Main.c() 中的例程復(fù)制到 XRAM 中:
// Set CE RAM to default. memcpy((uint8x_t*)CE_DATA_BASE, CeData, (4 * NumCeData));
與 71M653x 演示代碼相反,71M654x 演示代碼不基于 和 的最小值進行復(fù)制操作。71M654x 演示代碼將 定義的整個數(shù)據(jù)映像復(fù)制到 XRAM 中。CE_DATA_SIZENumCeDataNumCeData
調(diào)整 I/O 內(nèi)存位置
為了建立CE代碼的環(huán)境,I/O RAM條目控制多路復(fù)用器設(shè)置、FIR長度、增益控制、輸入引腳配置(單端/差分)、時鐘選擇等。如有必要,必須檢查和更改。
在 71M654x 演示代碼中,I/O RAM 寄存器由名為 的結(jié)構(gòu)控制。此結(jié)構(gòu)可以在 main.c 中找到,并且不包含命名元素,這意味著必須從 I/O RAM 地址0x2100開始手動計算字節(jié),以確定其含義。io_ram_table[]
下一頁上的列表顯示了典型代碼的默認條目及其含義。該結(jié)構(gòu)在開頭包含四個字節(jié),用于確定起始地址 (0x2100) 和條目長度 (0x0013)。
請注意,設(shè)置為 0x03,這會將 CE 代碼映像放在閃存中的0x0C00。這是Maxim 71M654x演示代碼的典型特征。在閃存的較低范圍內(nèi)分配一個位置,使代碼與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
調(diào)整儀表代碼和Keil設(shè)置以適應(yīng)更大的CE代碼和數(shù)據(jù)
大小大于用于現(xiàn)有構(gòu)建的大?。ㄈ缰兴觯┑?CE 代碼需要進行以下調(diào)整:NumCeCode
調(diào)整 main.c 中的源代碼,字節(jié)在 0x2109。CE_LCTN
Keil PK51 環(huán)境中可通過“目標選項”訪問的“目標”選項卡必須指定 CE 代碼所需的閃存空間。此條目必須與 的新選擇 相對應(yīng)。CE_LCTN
71M653x 代碼中使用的結(jié)構(gòu)已重命名為 71M654x 代碼,這是結(jié)構(gòu)的一部分。設(shè)置為 0x2800,這是 I/O RAM 中 NV-RAM 數(shù)據(jù)字段的開頭。totalsreg_datanvm_sreg_data
具有較大 XRAM 分配的 CE 代碼需要以下更改:
Keil PK51環(huán)境中可通過“目標選項”訪問的“目標”選項卡必須指定CE代碼所需的XRAM空間。
CE_DATA_SIZE需要在源代碼 (CE654x.H) 中更新。
應(yīng)檢查 CE 代碼是否存在超出 的數(shù)據(jù)。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保留用于保存關(guān)鍵CE參數(shù),如校準系數(shù)、、等。使用 ]U 命令。WRATECECONFIG
閃光地址0xF800保留用于保存關(guān)鍵MPU參數(shù),即用戶可以用“)”關(guān)鍵字輸入的參數(shù),例如當用戶輸入“)3=+2080”將IMAX值設(shè)置為208A時。
必須注意不要將CE代碼或數(shù)據(jù)映像與這些固定的閃存位置重疊。
故障 排除
使用上面詳述的技術(shù)生成的代碼圖像最初可能并不總是有效。下面列出了一些故障排除提示。
對測量儀或演示代碼進行故障排除的好方法包括以下步驟:
將ADM51仿真器連接到目標并啟動WEMU51應(yīng)用程序。
擦除目標閃存。
使用模擬器的 SET 命令清除 XRAM 空間。例如,命令 SET /MDATA 0 3FF 0 用零填充從 0 到 0x3FF 的 XRAM 內(nèi)存。
使用 WEMU51 中的“文件 – 加載”命令將生成的代碼圖像加載到閃存中。
在程序窗口中檢查CE代碼圖像的位置(圖像是否已加載到預(yù)期位置?,映像是否完整?有重疊嗎?
在程序窗口中檢查CE數(shù)據(jù)圖像的位置(圖像是否已加載到預(yù)期位置?圖像是否完整?有重疊嗎?
單擊 RES,然后在 WEMU51 用戶界面中單擊 Go。允許代碼運行 1 到 2 秒,然后單擊 STOP 按鈕停止代碼執(zhí)行。
在數(shù)據(jù)窗口中檢查0x0000附近的 XRAM。代碼現(xiàn)在應(yīng)該已將 CE 數(shù)據(jù)映像復(fù)制到 XRAM??拷?x0000的地址會被ADC樣本覆蓋,但0x0010及以上的地址應(yīng)反映CE數(shù)據(jù)鏡像。檢查是否已復(fù)制完整的數(shù)據(jù)圖像,即從0x0000到或至少到)。NumCeDataCE_DATA_SIZE
檢查 I/O RAM,即從 0x2000 (71M653x) 或 0x2000 和 0x2100 (71M654x) 開始的地址。檢查 CE 代碼位置的指針是否已正確初始化 ()。CE_LCTN
檢查控制AFE的I/O RAM 寄存器,例如、、多路復(fù)用器插槽分配、、、 以及用于模擬引腳差分/單端操作的控制寄存器。所有設(shè)置必須與CE代碼應(yīng)用說明中指定的設(shè)置相對應(yīng)。MUX_DIVSUM_PREFIR_LENPRE_E
審核編輯:郭婷
-
傳感器
+關(guān)注
關(guān)注
2550文章
51035瀏覽量
753063 -
寄存器
+關(guān)注
關(guān)注
31文章
5336瀏覽量
120230 -
編譯器
+關(guān)注
關(guān)注
1文章
1623瀏覽量
49108
發(fā)布評論請先 登錄
相關(guān)推薦
評論