RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用新的計算引擎(CE)代碼圖像編譯儀表代碼

星星科技指導(dǎo)員 ? 來源:ADI ? 作者:ADI ? 2023-06-13 14:50 ? 次閱讀

本應(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ù)映像。

wKgaomSIFyOADiM8AAB_hxnswh0406.png

圖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)的示例。

wKgZomSIEcCAfpkVAAAUUO8HVq4909.gif

當我們打開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è)面板中的“文件”下。

wKgaomSIEcKAORI7AACEnlxi9xE281.gif

圖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。

wKgZomSIF0aAfZZrAAFZ-hY9hHs623.png

圖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。

wKgZomSIF1OAbo5vAAEuWeQm6PM580.png

圖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的物理位置:

wKgaomSIEceAD2gpAAB-GOn3JOE050.gif

圖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

wKgZomSIEcuAOD8pAAByMlWpzBw232.gif

圖6.代碼空間、CE_LCTN指針和 Keil BL51 鏈接器之間的關(guān)系。

Signum 仿真器中閃存區(qū)域0xCFD0到0xD05F的代碼窗口如圖 7 所示。位置 0xCFFE 處的條目05x8E1512(0 十進制)對應(yīng)于 。CE 代碼映像本身從位置 0xD000 開始。NumCeCode

wKgaomSIEc2AWfOOAABqTsR0tKs186.gif

圖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):

wKgZomSIEdGASTFgAAC9CgUY5iI149.gif

圖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

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2550

    文章

    51035

    瀏覽量

    753063
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5336

    瀏覽量

    120230
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1623

    瀏覽量

    49108
收藏 人收藏

    評論

    相關(guān)推薦

    如何編寫有利于編譯器優(yōu)化的代碼

    對于嵌入式系統(tǒng),最終代碼的體積和效率取決于由編譯器生成的可執(zhí)行代碼,而非開發(fā)人員編寫的源代碼;但是源代碼的優(yōu)化,可以幫助
    發(fā)表于 11-09 10:31 ?1406次閱讀
    如何編寫有利于<b class='flag-5'>編譯</b>器優(yōu)化的<b class='flag-5'>代碼</b>

    matlab圖像處理源代碼

    matlab圖像處理源代碼
    發(fā)表于 06-18 14:36 ?173次下載
    matlab<b class='flag-5'>圖像</b>處理源<b class='flag-5'>代碼</b>

    一種用于反編譯代碼與源代碼的比較算法

    現(xiàn)有反編譯器產(chǎn)生的代碼與對應(yīng)的源代碼之間存在差異,找到并理解差異有助于改進并完善反編譯器的設(shè)計。該文給出一種適用于C 語言反編譯
    發(fā)表于 03-21 15:08 ?10次下載

    C編譯器的設(shè)計文檔與源代碼

    C-編譯器的設(shè)計文檔與源代碼:本壓縮包包含了C-編譯器的設(shè)計文檔與源代碼,供學(xué)習(xí)參考。  整體框架. 3 詞法分析. 3᠙
    發(fā)表于 02-09 11:13 ?45次下載

    編譯代碼與源代碼的比較算法

    編譯代碼與源代碼
    發(fā)表于 02-09 15:19 ?10次下載

    iftop源代碼編譯安裝

    iftop源代碼編譯安裝
    發(fā)表于 04-03 23:39 ?15次下載
    iftop源<b class='flag-5'>代碼</b><b class='flag-5'>編譯</b>安裝

    Android源代碼編譯

    Android源代碼編譯
    發(fā)表于 10-24 09:30 ?5次下載
    Android源<b class='flag-5'>代碼</b><b class='flag-5'>編譯</b>

    CubeMX版本編譯代碼的教程

    用的CubeMX版本是4.20.0如下圖,用的Keil5編譯代碼,編譯結(jié)果0 Error(s),0 Warning(s)。
    的頭像 發(fā)表于 10-10 10:32 ?4282次閱讀
    CubeMX版本<b class='flag-5'>編譯</b><b class='flag-5'>代碼</b>的教程

    ARM代碼編譯鏈接的工作流程

    ARM處理器在市面上到處都是ARM7、ARM9、Cortex-M、Cortex-R、Cortex-A包含的種類繁多,今天我們就來了解一下ARM代碼編譯鏈接的工作流程,以及過程中需要的相關(guān)概念信息
    的頭像 發(fā)表于 12-22 16:57 ?2153次閱讀

    如何編寫有利于編譯器優(yōu)化的代碼

    對于嵌入式系統(tǒng),最終代碼的體積和效率取決于由編譯器生成的可執(zhí)行代碼,而非開發(fā)人員編寫的源代碼;但是源代碼的優(yōu)化,可以幫助
    的頭像 發(fā)表于 03-29 15:58 ?1483次閱讀
    如何編寫有利于<b class='flag-5'>編譯</b>器優(yōu)化的<b class='flag-5'>代碼</b>

    使用新的計算引擎 (CE) 代碼映像編譯儀表代碼

    發(fā)表于 11-17 12:42 ?0次下載
    使用新的<b class='flag-5'>計算</b><b class='flag-5'>引擎</b> (<b class='flag-5'>CE</b>) <b class='flag-5'>代碼</b>映像<b class='flag-5'>編譯</b><b class='flag-5'>儀表</b><b class='flag-5'>代碼</b>

    履約核心引擎代碼化原理與實踐

    基于此,京東供應(yīng)鏈研發(fā)部自研了一套,面向業(yè)務(wù)角色的海納低代碼規(guī)則引擎平臺,產(chǎn)品定位是面向業(yè)務(wù)、研發(fā)多角色一體化的零低代碼開發(fā)平臺,這其中規(guī)則引擎是其最核心的部分之一。
    的頭像 發(fā)表于 04-11 09:55 ?623次閱讀

    OpenCV圖像識別C++代碼

    安裝OpenCV庫 首先,您需要在您的計算機上安裝OpenCV庫。您可以從OpenCV官網(wǎng)下載預(yù)編譯的庫或從源代碼編譯。安裝完成后,確保將OpenCV的頭文件和庫文件添加到您的項目中。
    的頭像 發(fā)表于 07-16 10:42 ?1967次閱讀

    ida反編譯出來代碼能直接用嗎

    IDA反編譯出來的代碼通常 不能直接使用 ,這主要基于以下幾個方面的原因: 一、代碼的不完整性 IDA反編譯生成的代碼可能缺少原始源
    的頭像 發(fā)表于 09-02 10:55 ?641次閱讀

    java反編譯代碼可以修改么

    Java反編譯是一種將編譯后的Java字節(jié)碼(.class文件)轉(zhuǎn)換回源代碼的過程。反編譯后的代碼可以進行修改,但是需要注意,反
    的頭像 發(fā)表于 09-02 11:00 ?638次閱讀
    RM新时代网站-首页