色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

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

          數(shù)據(jù)傳遞操作
          如上所述,在RAM中執(zhí)行代碼時(shí),有兩個(gè)與內(nèi)存映射相關(guān)的事項(xiàng)發(fā)生了變化。第一,程序閃存現(xiàn)在被映射至數(shù)據(jù)內(nèi)存。這意味著我們可通過(guò)任意數(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

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

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

          以下的代碼演示用來(lái)讀和寫(xiě)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í)行時(shí),示例代碼通過(guò)串口輸出以下的文字(圖2)。

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


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

          結(jié)論
          利用及其它采用的Harvard內(nèi)存映射架構(gòu),可以將不同的物理內(nèi)存段(例如數(shù)據(jù)SRAM)映射為程序或數(shù)據(jù)內(nèi)存空間。在數(shù)據(jù)SRAM中執(zhí)行部分應(yīng)用程序?yàn)樾阅芴嵘徒?a class="contentlabel" href="http://cafeforensic.com/news/listbylabel/label/低功耗">低功耗提供了潛力。不過(guò)該過(guò)程也增加了應(yīng)用程序的復(fù)雜性。


          上一頁(yè) 1 2 下一頁(yè)

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

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉