色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

使用IAR的嵌入式工作臺(tái)調(diào)用實(shí)用程序ROM函數(shù)用于MAXQ

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

存儲(chǔ)在程序存儲(chǔ)器中的數(shù)據(jù)不能直接在MAXQ?微控制器上訪問。相反,IAR 嵌入式工作臺(tái)?用于調(diào)用 C 代碼中的特殊函數(shù),這些功能在微控制器的 ROM 中為此任務(wù)提供。本應(yīng)用筆記解釋了從應(yīng)用代碼調(diào)用ROM所需的步驟。

概述

程序員在使用微控制器時(shí),通常在應(yīng)用程序代碼中使用查找表。然而,由于MAXQ內(nèi)核的性質(zhì),應(yīng)用軟件不能直接從代碼空間讀取,因此不能直接訪問應(yīng)用代碼中定義的任何表。為了緩解這個(gè)問題,所有MAXQ微控制器都實(shí)現(xiàn)了所謂的“偽馮諾依曼”架構(gòu):開發(fā)人員可以在程序空間中存儲(chǔ)數(shù)據(jù)和表,但只能使用特殊的實(shí)用程序ROM例程。除了這些核心功能外,每個(gè)MAXQ微控制器的ROM都可以具有特定于該器件的例程。本應(yīng)用筆記描述了使用IAR嵌入式工作臺(tái)從代碼訪問這些實(shí)用程序ROM功能時(shí)必須采取的步驟。

指定函數(shù)地址和原型

使用 ROM 功能的第一步是確定這些功能的位置。MAXQ器件用戶指南補(bǔ)充列出了實(shí)用程序ROM用戶功能、地址、輸入和輸出。使用此信息查找要調(diào)用的函數(shù)的入口點(diǎn)。例如,下面的表1(MAXQ48補(bǔ)充的表2000)顯示flashWrite功能位于字地址08461h。

表 1.實(shí)用程序 ROM 用戶功能(適用于實(shí)用程序 ROM 版本 1.01)

功能編號(hào) 函數(shù)名稱 入口點(diǎn) 總結(jié)
0 閃寫 08461h 對(duì)單個(gè)字的閃存進(jìn)行編程
1 閃光擦除頁面 08467h 擦除(FFFFh 的程序)一個(gè) 256 字的閃存扇區(qū)。
2 frashEraseAll 08478h 擦除(程序到 FFFFh)所有閃存。
3 移動(dòng)DP0 08487h 在 DP[0] 處讀取一個(gè)字節(jié)/字
4 移動(dòng)DP0inc 0848安 在 DP[0] 處讀取一個(gè)字節(jié)/字,然后遞增 DP[0]。
5 移動(dòng)DP0dec 0848分 讀取 DP[0] 處的字節(jié)/字,然后遞減 DP[0]。
6 移動(dòng)DP1 08490h 在 DP[1] 處讀取一個(gè)字節(jié)/字。
7 移動(dòng)DP1inc 08493h 在 DP[1] 處讀取一個(gè)字節(jié)/字,然后遞增 DP[0]。
8 移動(dòng)DP1dec 08496h 讀取 DP[1] 處的字節(jié)/字,然后遞減 DP[0]。
9 移動(dòng)FB 08499h 讀取 BP[關(guān)閉] 處的字節(jié)/字。
10 移動(dòng)FPinc 0849通道 讀取 BP[Offs] 處的字節(jié)/字,然后遞增 Offs。
11 移動(dòng)FPdec 0849Fh 讀取 BP[Offs] 處的字節(jié)/字,然后遞減 Offs。
12 復(fù)制緩沖區(qū) 084A2h 將 LC[0] 值從 DP[0] 復(fù)制到 BP[關(guān)閉]。

現(xiàn)在,各種功能的入口點(diǎn)已經(jīng)知道,IAR嵌入式工作臺(tái)可以配置為使用這些地址。從“項(xiàng)目”菜單中選擇“選項(xiàng)”。在出現(xiàn)的對(duì)話框中,從“類別”列表中選擇“鏈接器”。單擊“額外選項(xiàng)”選項(xiàng)卡,并確保選中標(biāo)有“使用命令行選項(xiàng)”的框。在選項(xiàng)列表中,您必須為要使用的每個(gè)實(shí)用程序ROM功能添加一個(gè)項(xiàng)目;指定該函數(shù)的地址。這些選項(xiàng)應(yīng)具有以下格式: 《function_name》是將從應(yīng)用程序代碼調(diào)用的函數(shù)名稱。它不必與上表中給出的名稱匹配,但它必須是有效的 C 代碼函數(shù)名稱。《hexadecimal_byte_address》是 ROM 函數(shù)入口點(diǎn)的字節(jié)地址。由于該表列出了單詞地址,因此您需要將它們乘以 1 才能將它們轉(zhuǎn)換為字節(jié)地址。下面是一個(gè)MAXQ2000項(xiàng)目選項(xiàng)示例(圖《》),該項(xiàng)目使用三個(gè)ROM功能。

-D=

pYYBAGQBkCqAMm2kAABJ5ChWhcU511.gif

圖1.MAXQ2000項(xiàng)目示例使用三個(gè)ROM功能。

若要使這些函數(shù)可通過應(yīng)用程序代碼訪問,請(qǐng)使用在“選項(xiàng)”屏幕中指定的相同名稱為每個(gè)函數(shù)聲明原型。參數(shù)傳遞將在下一節(jié)中討論,因此現(xiàn)在聲明每個(gè)原型不接受任何參數(shù)且沒有返回值。

extern void utilFlashWrite(void);
extern void utilFlashErasePage(void);
extern void utilMoveDP0(void);

創(chuàng)建包裝函數(shù)

現(xiàn)在可以直接從應(yīng)用程序代碼調(diào)用 ROM 函數(shù)。但是,有一個(gè)警告。由于函數(shù)通常在與IAR編譯器使用的寄存器不同的寄存器中接受其輸入?yún)?shù),因此這些函數(shù)可能會(huì)破壞編譯器所依賴的寄存器。這些函數(shù)可能還需要在禁用中斷的情況下執(zhí)行。因此,您應(yīng)該創(chuàng)建一些幫助程序函數(shù)來處理這些問題。對(duì)于要調(diào)用的每個(gè) ROM 函數(shù),確定:它接受哪些輸入;它提供的輸出;以及它銷毀的寄存器。所有這些信息都可以在MAXQ器件的用戶指南補(bǔ)充中找到。

繼續(xù)上面的例子,可以看到MAXQ2000的flashErasePage函數(shù)有如下說明:

功能:閃存擦除頁面

摘要:擦除(程序到0FFFFh)265字的閃存頁。

輸入:A[0]:位于要擦除的頁面中的單詞地址。(頁碼是 A[0] 的高字節(jié)。

輸出:進(jìn)位:錯(cuò)誤時(shí)設(shè)置,成功時(shí)清除。

摧毀:PSF,LC[1],GR,AP,AP,APC

筆記:

如果看門狗復(fù)位功能處于活動(dòng)狀態(tài),則應(yīng)在調(diào)用此函數(shù)之前將其禁用。

從 flash 調(diào)用此函數(shù)時(shí),應(yīng)注意返回地址不在要擦除的頁面中。

使用此信息,您可以創(chuàng)建一個(gè)調(diào)用 flashErasePage 的幫助程序函數(shù)。除了實(shí)際調(diào)用實(shí)用程序 ROM 函數(shù)外,此幫助程序函數(shù)還需要執(zhí)行四個(gè)附加步驟:

配置 ROM 功能的輸入。

保存并恢復(fù) ROM 功能銷毀的任何保留寄存器。

處理 ROM 函數(shù)的輸出。

保存、禁用和恢復(fù)調(diào)用 ROM 函數(shù)周圍的中斷。

準(zhǔn)備輸入

此示例 ROM 函數(shù)接受 A[0] 作為其輸入,設(shè)置 A[0] 非常簡(jiǎn)單。我們可以通過使用一些IAR關(guān)鍵字和宏為MAXQ中的任何寄存器聲明一個(gè)變量。要為 A[0] 聲明變量,請(qǐng)?zhí)砑右韵抡Z句:

__no_init volatile __io unsigned int A0 @ _M(0x09,0x00);

特別注意_M宏的數(shù)據(jù)類型和輸入。此變量 A0 被聲明為“無符號(hào) int”,因?yàn)樗且粋€(gè) 16 位寄存器。如果它是一個(gè) 8 位寄存器,我們可以將其聲明為“無符號(hào)字符”。_M宏的輸入是模塊編號(hào),后跟A[0]寄存器的偏移。現(xiàn)在,您只需將此變量設(shè)置為 A[0] 中所需的值即可。

A0 = pageAddr;

保存特殊登記冊(cè)

以上述方式使用寄存器時(shí)必須小心,因?yàn)榫幾g器希望某些寄存器不會(huì)從一個(gè)函數(shù)調(diào)用更改為下一個(gè)函數(shù)調(diào)用。MAXQ IAR C編譯器參考指南列出了以下寄存器(表2)作為暫存器。您可以在不干擾程序流的情況下銷毀這些寄存器。此外,APC 和 DP[1] 寄存器以及 DPC 寄存器的位 0、1 和 3 在任何時(shí)候都不應(yīng)修改。如果函數(shù)更改了任何其他寄存器,則應(yīng)在退出該函數(shù)之前恢復(fù)它們。

表 2.暫存寄存器1

MAXQ10器件 MAXQ20器件
A[0], A[1], A[2], A[3], GR, LC[0], LC[1], DP[0], BP, OFFS, AP A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], GR,LC[0], LC[1],
DP[0]。英國(guó)石油公司,關(guān)閉,美聯(lián)社

flashErasePage 描述將 APC 列為已銷毀的寄存器之一,因此您必須確保在調(diào)用 utilFlashErasePage 之前保存并恢復(fù)該寄存器。如果您使用 IAR 的 asm() 函數(shù),此任務(wù)也很簡(jiǎn)單。MAXQ匯編語句可以使用這個(gè)函數(shù)直接插入到C代碼中。由于需要保存 APC,因此只需在調(diào)用 utilFlashErasePage 時(shí)添加 asm(“push APC”) 和 asm(“pop APC”) 語句即可。

處理 ROM 函數(shù)的輸出

處理 ROM 函數(shù)的返回類似于處理輸入。您可以直接讀取相應(yīng)的寄存器。例如,flashErasePage函數(shù)設(shè)置錯(cuò)誤的進(jìn)位。您可以使用 IAR 提供的 iomaxq.h 頭文件中聲明的PSF_bit結(jié)構(gòu)直接訪問此位。

return (PSF_bit.C == 0);

保存、禁用和恢復(fù)中斷

要考慮的最后一個(gè)任務(wù)是是否需要禁用中斷。大多數(shù)實(shí)用程序ROM例程都假定它們不會(huì)被中斷。因此,如果您的應(yīng)用程序使用中斷,明智的做法是在調(diào)用實(shí)用程序 ROM 函數(shù)之前禁用它們。禁用它們的最簡(jiǎn)單方法是使用 iomaxq.h 頭文件中定義的IC_bit結(jié)構(gòu)和 intrinsics.h 文件中定義的 __disable_interrupt() 函數(shù)。

unsigned char origIGE = IC_bit.IGE; // Save current state.
__disable_interrupt();              
/* Add UROM call code here. */
IC_bit.IGE = origIGE;               // Restore interrupt state.
如果執(zhí)行所有這些步驟,您將獲得類似于以下內(nèi)容的代碼:
#include 
#include 

// Prototype for the real Utility ROM function.
extern void utilFlashErasePage(void);

// Define the register we need direct access to.
__no_init volatile __io unsigned int A0 @ _M(0x09,0x00);

unsigned char flashErasePage(unsigned int page)
{
  unsigned int pageAddr;
  unsigned char origIGE;

  pageAddr = page << 8;         // Change page # to an address.
  origIGE = IC_bit.IGE;         // Save current state.
  __disable_interrupt();
  A0 = pageAddr;                // Set up input to UROM function.
  asm("push APC");              // UROM function destroys APC.
  utilFlashErasePage();         // Call actual UROM function.
  asm("pop APC");               // Restore APC.
  IC_bit.IGE = origIGE;         // Restore interrupt state.
  return (PSF_bit.C == 0);      // Check return code from UROM.
}

結(jié)論

使用上述步驟,您可以輕松調(diào)用每個(gè)MAXQ微控制器的實(shí)用程序ROM中提供的功能。您可以創(chuàng)建函數(shù)包裝器,利用MAXQ實(shí)用程序ROM中的代碼訪問查找表,在程序空間中存儲(chǔ)數(shù)據(jù),以及MAXQ系列器件獨(dú)有的其他功能。

審核編輯:郭婷

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

    關(guān)注

    48

    文章

    7542

    瀏覽量

    151317
  • 嵌入式
    +關(guān)注

    關(guān)注

    5082

    文章

    19105

    瀏覽量

    304829
  • ROM
    ROM
    +關(guān)注

    關(guān)注

    4

    文章

    563

    瀏覽量

    85733
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    請(qǐng)問哪里可以找到用于IAR Embedded Workbench的STM32G0處理器的啟動(dòng)文件?

    G0(確切地說是 STM32G070RB)處理器的庫。IAR 的文件 startup_stm32g070rbtx.s 是否在任何地方可用,還是我需要自己創(chuàng)建它?或者是否有更簡(jiǎn)單的方法將 G0 的 STMCubeIDE 項(xiàng)目導(dǎo)入 IAR
    發(fā)表于 12-12 08:27

    采用MAXQ610評(píng)估套件(EV kit)和IAR嵌入式工作

    采用MAXQ610評(píng)估套件(EV kit)和IAR嵌入式工作臺(tái)進(jìn)行設(shè)計(jì) 摘要:應(yīng)用筆記介紹怎樣面向MAXQ610低功耗RISC微控制器開發(fā)
    發(fā)表于 01-13 08:08 ?1042次閱讀
    采用<b class='flag-5'>MAXQ</b>610評(píng)估套件(EV kit)和<b class='flag-5'>IAR</b><b class='flag-5'>嵌入式</b><b class='flag-5'>工作</b>

    采用MAXQ610評(píng)估套件(EV kit)和IAR嵌入式工作

    摘要:應(yīng)用筆記介紹怎樣面向MAXQ610低功耗RISC微控制器開發(fā)、構(gòu)建并調(diào)試應(yīng)用程序。文章使用了IAR™系統(tǒng)公司提供的IAR Embedded Workbench®
    發(fā)表于 04-23 15:50 ?1074次閱讀
    采用<b class='flag-5'>MAXQ</b>610評(píng)估套件(EV kit)和<b class='flag-5'>IAR</b><b class='flag-5'>嵌入式</b><b class='flag-5'>工作</b>

    基于MAXQ微控制器的嵌入式工作臺(tái)設(shè)計(jì)

    9 as a tool in an IAR C compiler for MAXQ version 2.20I. Introduction To provide ongoing support for MAXQ microco
    發(fā)表于 03-28 09:59 ?31次下載

    MAXQ構(gòu)架上閃存和SRAM存儲(chǔ)器的分配

    本應(yīng)用筆記介紹如何利用IAR嵌入式工作臺(tái)工具分配和存取MAXQ微控制器上的閃存和SRAM存儲(chǔ)器。
    發(fā)表于 06-21 14:44 ?2521次閱讀
    <b class='flag-5'>MAXQ</b>構(gòu)架上閃存和SRAM存儲(chǔ)器的分配

    用于MSP430的IAR嵌入式工作平臺(tái)版本3+

    這本手冊(cè)說明了IAR 嵌入式工作平臺(tái) (EW430) (帶有 MSP430 超低功耗微控制器)? 的使用方法。
    發(fā)表于 04-28 14:47 ?0次下載
    <b class='flag-5'>用于</b>MSP430的<b class='flag-5'>IAR</b><b class='flag-5'>嵌入式</b><b class='flag-5'>工作</b>平臺(tái)版本3+

    使用用于MCS-51的IAR嵌入式平臺(tái)編寫的一個(gè)示例程序程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用用于MCS-51的IAR嵌入式平臺(tái)編寫的一個(gè)示例程序程序免費(fèi)下載。
    發(fā)表于 08-15 17:32 ?1次下載
    使用<b class='flag-5'>用于</b>MCS-51的<b class='flag-5'>IAR</b><b class='flag-5'>嵌入式</b>平臺(tái)編寫的一個(gè)示例<b class='flag-5'>程序</b><b class='flag-5'>程序</b>免費(fèi)下載

    IAR Systems更新Visual Studio Code擴(kuò)展 簡(jiǎn)化嵌入式開發(fā)工作流程

    IAR Systems更新Visual Studio Code擴(kuò)展 簡(jiǎn)化嵌入式開發(fā)工作流程 用于代碼構(gòu)建和調(diào)試的IAR Visual Stu
    發(fā)表于 12-09 18:16 ?926次閱讀

    使用MAXQ2000和MAX7312進(jìn)行LED打靶練習(xí)游戲

    本應(yīng)用筆記提供了將MAXQ2000微控制器(MAXQ20內(nèi)核)連接至MAX7312 16位端口擴(kuò)展器所需的全部固件。應(yīng)用示例是一個(gè)LED目標(biāo)練習(xí)游戲。示例裝配程序是專門為MAXQ200
    的頭像 發(fā)表于 01-14 14:58 ?929次閱讀
    使用<b class='flag-5'>MAXQ</b>2000和MAX7312進(jìn)行LED打靶練習(xí)游戲

    嵌入式系統(tǒng)中函數(shù)如何調(diào)用

    嵌入式系統(tǒng)中,一個(gè)函數(shù)調(diào)用時(shí),它的內(nèi)部機(jī)理是什么,執(zhí)行了哪些步驟?如圖1所示,先看 看 一個(gè)程序在運(yùn)行時(shí),它的內(nèi)存分布狀況。
    的頭像 發(fā)表于 02-13 14:15 ?1080次閱讀
    <b class='flag-5'>嵌入式</b>系統(tǒng)中<b class='flag-5'>函數(shù)</b>如何<b class='flag-5'>調(diào)用</b>

    使用IAR編譯器在MAXQ微控制器上分配閃存和SRAM存儲(chǔ)器

    MAXQ器件提供特殊的實(shí)用ROM功能,調(diào)用ROM功能從程序存儲(chǔ)器讀寫數(shù)據(jù)。但是,存儲(chǔ)在程序存儲(chǔ)器
    的頭像 發(fā)表于 02-21 11:14 ?1376次閱讀
    使用<b class='flag-5'>IAR</b>編譯器在<b class='flag-5'>MAXQ</b>微控制器上分配閃存和SRAM存儲(chǔ)器

    IAR編譯器和MAXQ2000評(píng)估板入門

    MAXQ平臺(tái)由一套世界級(jí)的工具支持,即IARMAXQ嵌入式工作臺(tái)。本應(yīng)用筆記描述了如何創(chuàng)建、構(gòu)建和調(diào)試用C語言編寫的面向
    的頭像 發(fā)表于 03-02 14:18 ?1309次閱讀
    <b class='flag-5'>IAR</b>編譯器和<b class='flag-5'>MAXQ</b>2000評(píng)估板入門

    如何使用MAXQ串行驅(qū)動(dòng)器開發(fā)應(yīng)用

    本應(yīng)用筆記介紹如何使用MAXQ2000微控制器評(píng)估(EV)板上的MAXQ串行驅(qū)動(dòng)器庫開發(fā)應(yīng)用。MAXQ串行驅(qū)動(dòng)器可用于MAXQ
    的頭像 發(fā)表于 03-03 13:47 ?865次閱讀
    如何使用<b class='flag-5'>MAXQ</b>串行驅(qū)動(dòng)器開發(fā)應(yīng)用

    將LCD仿真器與MAX-IDE和IAR嵌入式工作臺(tái)開發(fā)環(huán)境配合使用

    本應(yīng)用筆記介紹如何在MAX-IDE和IAR嵌入式工作臺(tái)上使用LCD仿真器,并說明如何創(chuàng)建LCD存儲(chǔ)器圖和LCD顯示面板。本文假設(shè)讀者了解MAXQ20內(nèi)核,并且知道MAX-IDE和
    的頭像 發(fā)表于 03-03 13:49 ?1573次閱讀
    將LCD仿真器與MAX-IDE和<b class='flag-5'>IAR</b><b class='flag-5'>嵌入式</b><b class='flag-5'>工作臺(tái)</b>開發(fā)環(huán)境配合使用

    用于MSP430 MCUs的IAR嵌入式工作臺(tái)IDE版本7+

    電子發(fā)燒友網(wǎng)站提供《適用于MSP430 MCUs的IAR嵌入式工作臺(tái)IDE版本7+.pdf》資料免費(fèi)下載
    發(fā)表于 12-05 14:31 ?0次下載
    適<b class='flag-5'>用于</b>MSP430 MCUs的<b class='flag-5'>IAR</b><b class='flag-5'>嵌入式</b><b class='flag-5'>工作臺(tái)</b>IDE版本7+
    主站蜘蛛池模板: YELLOW日本动漫高清免费| 免费国产成人手机在线观看| 天天躁日日躁狠狠躁午夜剧场| 99爱在线观看精品视频| 精品无码久久久久久久动漫| 性欧美videofree中文字幕| 成人综合在线视频免费观看完整版 | 久久a在线视频观看| 羞羞在线观看| 国产精品成人网| 入禽太深在线观看免费高清| xx在线观看| 琪琪伦伦影院理论片| AV一区AV久久AV无码| 男女一边摸一边做羞羞的事情免费| 自拍黄色片| 老湿机一区午夜精品免费福利 | 99久久免费看少妇高潮A片| 久久综合亚洲色hezyo| 伊人久久大香线蕉综合影| 精品网站一区二区三区网站 | 爱做久久久久久| 琪琪伦伦影院理论片| 成人毛片免费在线观看| 人人草人人草| 大胸美女被C得嗷嗷叫动态图| 日本乱hd高清videos| 成年人免费观看的视频| 日本人HD18HD18| 高hnp肉文| 无码日本亚洲一区久久精品| 国产精品自产拍在线观看中文| 四虎永久在线精品国产免费| 国产精品色吧国产精品| 亚洲bt区| 精品视频在线一区| 中文字幕AV在线一二三区| 美女内射少妇一区二区四区| 99精彩视频在线观看| 人曽交Z00Z0OA片| 国产成人精品午夜福麻豆报告|