在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      EEPW首頁 > 模擬技術(shù) > 設(shè)計應(yīng)用 > MAXQ8913微控制器提升性能并降低功耗的方法

      MAXQ8913微控制器提升性能并降低功耗的方法

      作者: 時間:2011-12-06 來源:網(wǎng)絡(luò) 收藏

      數(shù)據(jù)傳遞操作
      如上所述,在RAM中執(zhí)行代碼時,有兩個與內(nèi)存映射相關(guān)的事項發(fā)生了變化。第一,程序閃存現(xiàn)在被映射至數(shù)據(jù)內(nèi)存。這意味著我們可通過任意數(shù)據(jù)指針直接從程序閃存讀取數(shù)據(jù),如下所示。

      ;; Read the banner string from flash and output it over the serial port. Since
      ;; we are running from RAM, we can read from the flash directly without having
      ;; to use the Utility ROM data transfer functions (moveDP0inc, etc...).

      move SC.4, #0
      move DPC, #0 ; Set pointers to byte mode.
      move DP[0], #(stringData * 2) ; Point to byte address of string data.

      stringLoop:
      move Acc, @DP[0]++
      sjump Z, stringEnd
      lcall #TxChar
      sjump stringLoop
      stringEnd:
      move DPC, #1Ch ; Set pointers to word mode.

      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;;
      ;; This portion of the code (addresses 200h and higher) will remain in flash.

      org 0200h

      stringData:
      db 0Dh, 0Ah, Executing code from RAM...., 00h

      請注意,如圖1所示,SC.4 (CDA0)位影響將哪一半程序閃存(上半頁或下半頁)以字節(jié)模式映射至數(shù)據(jù)內(nèi)存。當(dāng)使用字模式指針時,整個程序閃存被一次性映射至數(shù)據(jù)內(nèi)存。

      第二,現(xiàn)在雖然閃存在數(shù)據(jù)空間可存取,但SRAM不可直接存取。這意味著不能對SRAM的存儲單元進行讀或?qū)懖僮?,?yīng)用程序必須采取迂回的方法。從SRAM存儲單元讀取數(shù)據(jù)可按照在閃存中運行的代碼從閃存存儲單元讀取數(shù)據(jù)相同的方式實現(xiàn)—利用應(yīng)用ROM數(shù)據(jù)傳遞函數(shù)(moveDP0inc等)。然而,由于在應(yīng)用ROM中沒有類似的函數(shù)可實現(xiàn)直接寫操作,所以應(yīng)用程序必須提供一個小函數(shù)駐留在閃存中,該函數(shù)可被RAM中駐留的代碼直接調(diào)用來執(zhí)行寫操作。

      以下的代碼演示用來讀和寫RAM變量varA的方法,其初始值隨其它部分的應(yīng)用程序被從閃存復(fù)制到RAM,地址范圍為0000h-01FFh。

      scall printVar
      scall incrVar
      scall printVar
      scall incrVar
      scall printVar
      scall incrVar

      move Acc, #0Dh
      lcall #TxChar
      move Acc, #0Ah
      lcall #TxChar

      sjump $


      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;;
      ;; Variables stored in RAM (program) space. They can be read using the
      ;; Utility ROM data transfer functions (such as UROM_moveDP0) and written
      ;; using the writeDP0 function which remains in flash.
      ;;

      varA:
      dw 'A'


      ;================================================================
      ;=
      ;= printVar
      ;=
      ;= Reads the varA RAM variable value and sends it over the serial port.
      ;=

      printVar:
      move DPC, #1Ch ; Word mode
      move DP[0], #varA ; Variable's location in UROM data space
      lcall UROM_moveDP0 ; Moves variable value into GR.
      move Acc, GR
      lcall #TxChar
      ret


      ;==============================================================
      ;=
      ;= incrVar
      ;=
      ;= Reads the varA RAM variable value, adds 1 to it, and stores it back in RAM.
      ;=

      incrVar:
      move DPC, #1Ch ; Word mode
      move DP[0], #varA ; Variable's location in UROM data space
      lcall UROM_moveDP0 ; Moves variable value into GR.

      move Acc, GR
      add #1
      move GR, Acc
      lcall writeDP0

      ret

      ;==================================================================
      ;=
      ;= TxChar
      ;=
      ;= Outputs a character to the serial port.
      ;=
      ;= Inputs : Acc.L - Character to send.
      ;=

      org 01F0h
      move SBUF, Acc ; Send character.
      TxChar_Loop:
      move C, SCON.1 ; Check transmit flag.
      sjump NC, TxChar_Loop ; Stall until last transmit has completed.
      move SCON.1, #0 ; Clear the transmit flag.
      ret


      ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      ;;
      ;; This portion of the code (addresses 200h and higher) will remain in flash.

      org 0200h

      stringData:
      db 0Dh, 0Ah, Executing code from RAM...., 00h


      ;===============================================================
      ;=
      ;= WriteRAM
      ;=
      ;= This is a routine that can be called by code running in the RAM to load
      ;= a new value into a byte or word location in the RAM.
      ;=
      ;= Inputs : DP[0] - Location to write (absolute starting at 0000h) in RAM.
      ;= GR - Value to write to the RAM location.
      ;=
      ;= Notes : DP[0] must be configured to operate in word or byte mode as
      ;= desired before calling this function. Following a call to this
      ;= function, DP[0] must be refreshed before it is used to read data.
      ;=

      writeDP0:
      move @DP[0], GR
      ret

      在執(zhí)行時,示例代碼通過串口輸出以下的文字(圖2)。

      圖2. 示例代碼通過串口的輸出文字


      圖2. 示例代碼通過串口的輸出文字

      結(jié)論
      利用及其它采用的Harvard內(nèi)存映射架構(gòu),可以將不同的物理內(nèi)存段(例如數(shù)據(jù)SRAM)映射為程序或數(shù)據(jù)內(nèi)存空間。在數(shù)據(jù)SRAM中執(zhí)行部分應(yīng)用程序為性能提升和降提供了潛力。不過該過程也增加了應(yīng)用程序的復(fù)雜性。


      上一頁 1 2 下一頁

      關(guān)鍵詞: MAXQ 8913 微控制器 低功耗

      評論


      相關(guān)推薦

      技術(shù)專區(qū)

      關(guān)閉