本應用筆記介紹如何修改演示代碼或電表應用代碼,以便編譯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
審核編輯:郭婷
-
傳感器
+關注
關注
2557文章
51729瀏覽量
758804 -
寄存器
+關注
關注
31文章
5390瀏覽量
121896 -
編譯器
+關注
關注
1文章
1645瀏覽量
49463
發布評論請先 登錄
相關推薦
如何編寫有利于編譯器優化的代碼

評論