亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? datapage.c

?? 飛思卡爾m9s12dg128_IIC通訊源程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
        BRA     done

L_NOPAGE:
        MOVW    0,SP, 0,Y         ;// store the value passed in X (high word)
        STD           2,Y         ;// store the value passed in D (low word)
done:
        PULX                      ;// restore X register
        MOVW    0,SP, 1,+SP       ;// move return address
        RTS
  }
#else /* USE_SEVERAL_PAGES */
  __asm {
        PSHD                      ;// save D register
        LDAA    PAGE_ADDR         ;// save page register
        LDAB    4,SP              ;// load page part of address
        STAB    PAGE_ADDR         ;// set page register
        STX     0,Y               ;// store the value passed in X
        MOVW    0,SP, 2,Y         ;// store the value passed in D (low word)
        STAA    PAGE_ADDR         ;// restore page register
        PULD                      ;// restore D register
        MOVW    0,SP, 1,+SP       ;// move return address
        RTS
  }
#endif /* USE_SEVERAL_PAGES */
}

/*--------------------------- _FAR_COPY_RC --------------------------------
  This runtime routine is used to access paged memory via a runtime function.
  It may also be used if the compiler  option -Cp is not used with the runtime argument.

  Arguments :
  - offset part of the source int the X register
  - page part of the source in the A register
  - offset part of the dest int the Y register
  - page part of the dest in the B register
  - number of bytes to be copied is defined by the next 2 bytes after the return address.

  Result :
  - memory area copied
  - no registers are saved, i.e. all registers may be destroyed
  - all page register still contain the same value as before the call
  - the function returns after the constant defining the number of bytes to be copied


  stack-structure at the loop-label:
     0,SP : destination offset
     2,SP : source page
     3,SP : destination page
     4,SP : source offset
     6,SP : points to length to be copied. This function returns after the size

  A usual call to this function looks like:

  struct Huge src, dest;
    ; ...
    LDX  #src
    LDAA #PAGE(src)
    LDY  #dest
    LDAB #PAGE(dest)
    JSR  _FAR_COPY_RC
    DC.W sizeof(struct Huge)
    ; ...

  --------------------------- _FAR_COPY_RC ----------------------------------*/

#ifdef __cplusplus
extern "C"
#endif
#pragma NO_ENTRY
#pragma NO_EXIT
#pragma NO_FRAME

void NEAR _FAR_COPY_RC(void) {
#if USE_SEVERAL_PAGES
  __asm {
        DEX                       ;// source addr-=1, because loop counter ends at 1
        PSHX                      ;// save source offset
        PSHD                      ;// save both pages
        DEY                       ;// destination addr-=1, because loop counter ends at 1
        PSHY                      ;// save destination offset
        LDY     6,SP              ;// Load Return address
        LDX     2,Y+              ;// Load Size to copy
        STY     6,SP              ;// Store adjusted return address
loop:
        LDD     4,SP              ;// load source offset
        LEAY    D,X               ;// calculate actual source address
        LDAB    2,SP              ;// load source page
        __PIC_JSR(_LOAD_FAR_8)    ;// load 1 source byte
        PSHB                      ;// save value
        LDD     0+1,SP            ;// load destination offset
        LEAY    D,X               ;// calculate actual destination address
        PULA                      ;// restore value
        LDAB    3,SP              ;// load destination page
        __PIC_JSR(_STORE_FAR_8)   ;// store one byte
        DEX
        BNE     loop
        LEAS    6,SP              ;// release stack
        _SRET                     ;// debug info only: This is the last instr of a function with a special return
        RTS                       ;// return
  }
#else
  __asm {
        PSHD                      ;// store page registers
        TFR     X,D
        PSHY                      ;// temporary space
        LDY     4,SP              ;// load return address
        ADDD    2,Y+              ;// calculate source end address. Increment return address
        STY     4,SP
        PULY
        PSHD                      ;// store src end address
        LDAB    2,SP              ;// reload source page
        LDAA    PAGE_ADDR         ;// save page register
        PSHA
loop:
        STAB    PAGE_ADDR         ;// set source page
        LDAA    1,X+              ;// load value
        MOVB    4,SP, PAGE_ADDR   ;// set destination page
        STAA    1,Y+
        CPX     1,SP
        BNE     loop

        LDAA    5,SP+             ;// restore old page value and release stack
        STAA    PAGE_ADDR         ;// store it into page register
        _SRET                     ;// debug info only: This is the last instr of a function with a special return
        RTS
  }
#endif
}

/*--------------------------- _FAR_COPY --------------------------------

  The _FAR_COPY runtime routine was used to copied large memory blocks in previous compiler releases.
  However this release now does use _FAR_COPY_RC instead. The only difference is how the size of 
  the area to be copied is passed into the function. For _FAR_COPY the size is passed on the stack just
  above the return address. _FAR_COPY_RC does expect the return address just after the JSR _FAR_COPY_RC call
  in the code of the caller. This allows for denser code calling _FAR_COPY_RC but does also need a slightly
  larger runtime routine and it is slightly slower.
  The _FAR_COPY routine is here now mainly for compatibility with previous releases. 
  The current compiler does not use it. 
  
--------------------------- _FAR_COPY ----------------------------------*/

#ifdef __cplusplus
extern "C"
#endif
#pragma NO_ENTRY
#pragma NO_EXIT
#pragma NO_FRAME

void NEAR _FAR_COPY(void) {
#if USE_SEVERAL_PAGES
  __asm {
        DEX                       ;// source addr-=1, because loop counter ends at 1
        PSHX                      ;// save source offset
        PSHD                      ;// save both pages
        DEY                       ;// destination addr-=1, because loop counter ends at 1
        PSHY                      ;// save destination offset
        LDX     8,SP              ;// load counter, assuming counter > 0

loop:
        LDD     4,SP              ;// load source offset
        LEAY    D,X               ;// calculate actual source address
        LDAB    2,SP              ;// load source page
        __PIC_JSR(_LOAD_FAR_8)    ;// load 1 source byte
        PSHB                      ;// save value
        LDD     0+1,SP            ;// load destination offset
        LEAY    D,X               ;// calculate actual destination address
        PULA                      ;// restore value
        LDAB    3,SP              ;// load destination page
        __PIC_JSR(_STORE_FAR_8)   ;// store one byte
        DEX
        BNE     loop
        LDX     6,SP              ;// load return address
        LEAS    10,SP             ;// release stack
        JMP     0,X               ;// return
  }
#else
  __asm {
        PSHD                      ;// store page registers
        TFR     X,D
        ADDD    4,SP              ;// calculate source end address
        STD     4,SP
        PULB                      ;// reload source page
        LDAA    PAGE_ADDR         ;// save page register
        PSHA
loop:
        STAB    PAGE_ADDR         ;// set source page
        LDAA    1,X+              ;// load value
        MOVB    1,SP, PAGE_ADDR   ;// set destination page
        STAA    1,Y+
        CPX     4,SP
        BNE     loop

        LDAA    2,SP+             ;// restore old page value and release stack
        STAA    PAGE_ADDR         ;// store it into page register
        LDX     4,SP+             ;// release stack and load return address
        JMP     0,X               ;// return
  }
#endif
}

#else  /* __HCS12X__  */

/*
  The HCS12X knows two different kind of addresses:
    - Logical addresses. E.g.
       MOVB #page(var),RPAGE
       INC var

    - Global addresses E.g.
       MOVB #page(var),GPAGE
       GLDAA var
       INCA
       GSTAA var

  Global addresses are used with G-Load's and G-Store's, logical addresses are used for all the other instructions
  and occasions. As HC12's or HCS12's do not have the G-Load and G-Store instructions,
  global addresses are not used with these processor families.
  They are only used with HCS12X chips (and maybe future ones deriving from a HCS12X).

  Logical and Global addresses can point to the same object, however the global and logical address of an object
  are different for most objects (actually for all except the registers from 0 to 0x7FF).
  Therefore the compiler needs to transform in between them.

  HCS12X Pointer types:

    The following are logical addresses:
    - all 16 bit pointers
       - "char* __near": always.
       - "char *" in the small and banked memory model
    - 24 bit dpage, epage, ppage or rpage pointers (*1) (note: the first HCS12X compilers may not support these pointer types)
       - "char *__dpage": Note this type only exists for
                          orthogonality with the HC12 A4 chip which has a DPAGE reg.
                          It does not apply to the HCS12X.
       - "char *__epage": 24 bit pointer using the EPAGE register
       - "char *__ppage": 24 bit pointer using the PPAGE register.
                          As the PPAGE is also used for BANKED code,
                          using this pointer type is only legal from non banked code.
       - "char *__rpage": 24 bit pointer using the RPAGE register


    The following are global addresses:
       "char*": in the large memory model (only HCS12X)
       "char* __far": always for HCS12X.

   (*1): For the HC12 and HCS12 "char* __far" and "char*" in the large memory model are also logical.

   Some notes for the HC12/HCS12 programmers.

   The address of a far object for a HC12 and for a HCS12X is different, even if they are at the same place in the memory map.
   For the HC12, a far address is using the logical addresses, for the HCS12X however, far addresses are using global addresses.
   This does cause troubles for the unaware!
   
   The conversion routines implemented in this file support the special HCS12XE RAM mapping (when RAMHM is set).
   To enable this mapping compile this file with the "-MapRAM" compiler option.

  HCS12X Logical Memory map

    Logical Addresses           Used for                shadowed at           page register     Global Address

    0x000000 .. 0x0007FF        Peripheral Registers                          Not Paged         0x000000
    0x??0800 .. 0x??0BFF        Paged EEPROM                                  EPAGE (@0x17)     0x100000+EPAGE*0x0400
    0x000C00 .. 0x000FFF        Non Paged EEPROM        0xFF0800..0xFF0FFF    Not Paged         0x13FC00
    0x??1000 .. 0x??1FFF        Paged RAM                                     RPAGE (@0x16)     0x000000+RPAGE*0x1000
    0x002000 .. 0x003FFF        Non Paged RAM           0xFE1000..0xFF1FFF    Not Paged         0x0FE000
    0x004000 .. 0x007FFF        Non Paged FLASH         0xFC8000..0xFCBFFF    Not Paged         0x7F4000
    0x??8000 .. 0x00BFFF        Paged FLASH                                   PPAGE (@0x30)     0x400000+PPAGE*0x4000
    0x00C000 .. 0x00FFFF        Non Paged FLASH         0xFF8000..0xFFBFFF    Not Paged         0x7FC000

    NA: Not Applicable

  HCS12X Global Memory map

    Global Addresses            Used for                Logical mapped at

    0x000000 .. 0x0007FF        Peripheral Registers    0x000000 .. 0x0007FF
    0x000800 .. 0x000FFF        DMA registers           Not mapped
    0x001000 .. 0x0FFFFF        RAM                     0x??1000 .. 0x??1FFF
    0x0FE000 .. 0x0FFFFF        RAM, Log non paged      0x002000 .. 0x003FFF
    0x100000 .. 0x13FFFF        EEPROM                  0x??0800 .. 0x??0BFF
    0x13FC00 .. 0x13FFFF        EEPROM  non paged       0x000C00 .. 0x000FFF
    0x140000 .. 0x3FFFFF        External Space          Not mapped
    0x400000 .. 0x7FFFFF        FLASH                   0x??8000 .. 0x??BFFF
    0x7F4000 .. 0x7F7FFF        FLASH, Log non paged    0x004000 .. 0x007FFF
    0x7FC000 .. 0x7FFFFF        FLASH, Log non paged    0x00C000 .. 0x00FFFF

  HCS12X Logical Memory map (RAM mapped) 

    Logical Addresses           Used for                shadowed at           page register     Global Address

    0x000000 .. 0x0007FF        Peripheral Registers                          Not Paged         0x000000
    0x??0800 .. 0x??0BFF        Paged EEPROM                                  EPAGE (@0x17)     0x100000+EPAGE*0x0400
    0x000C00 .. 0x000FFF        Non Paged EEPROM        0xFF0800..0xFF0FFF    Not Paged         0x13FC00
    0x??1000 .. 0x??1FFF        Paged RAM                                     RPAGE (@0x16)     0x000000+RPAGE*0x1000
    0x002000 .. 0x003FFF        Non Paged RAM           0xFE1000..0xFF1FFF    Not Paged         0x0FE000
    0x004000 .. 0x007FFF        Non Paged RAM           0xFA1000..0xFD1FFF    Not Paged         0FC000
    0x??8000 .. 0x00BFFF        Paged FLASH                                   PPAGE (@0x30)     0x400000+PPAGE*0x4000
    0x00C000 .. 0x00FFFF        Non Paged FLASH         0xFF8000..0xFFBFFF    Not Paged         0x7FC000

    NA: Not Applicable

  HCS12X Global Memory map

    Global Addresses            Used for                Logical mapped at

    0x000000 .. 0x0007FF        Peripheral Registers    0x000000 .. 0x0007FF
    0x000800 .. 0x000FFF        DMA registers           Not mapped
    0x001000 .. 0x0FFFFF        RAM                     0x??1000 .. 0x??1FFF
    0x0FA000 .. 0x0FFFFF        RAM, Log non paged      0x002000 .. 0x007FFF
    0x100000 .. 0x13FFFF        EEPROM                  0x??0800 .. 0x??0BFF
    0x13FC00 .. 0x13FFFF        EEPROM  non paged       0x000C00 .. 0x000FFF
    0x140000 .. 0x3FFFFF        External Space          Not mapped
    0x400000 .. 0x7FFFFF        FLASH                   0x??8000 .. 0x??BFFF
    0x7F4000 .. 0x7F7FFF        FLASH, Log non paged    Not mapped
    0x7FC000 .. 0x7FFFFF        FLASH, Log non paged    0x00C000 .. 0x00FFFF


  How to read this table:
    For logical addresses, the lower 16 bits of the address do determine in which area the address is,
    if this address is paged, then this entry also controls and which of the EPAGE, PPAGE or RPAGE
    page register is controlling the bits 16 to 23 of the address.
    For global addresses, the bits 16 to 23 have to be in the GPAGE register and the lower 16 bits
    have to be used with the special G load or store instructions (e.g. GLDAA).
    As example the logical address 0x123456 is invalid. Because its lower bits 0x3456 are in a
    non paged area, so the page 0x12 does not exist.
    The address 0xFE1020 however does exist. Do access it, the RPAGE has to contain 0xFE and the
    offset 0x1020 has to be used.

      ORG $7000
        MOVB #0xFE, 0x16 ; RPAGE
        LDAA 0x1020      ; reads at the logical address 0xFE1020

    Because the last two RAM pages are also accessible directly from 0x2000 to 0x3FFF, the
    following shorter code does read the same memory location:

      ORG $7000
        LDAA 0x2020      ; reads at the logical address 0x2020
                         ;   which maps to the same memory as 0xFE1020

    This memory location now also has a global address. For logical 0xFE1020 the global address is 0x0FE020.
    So the following code does once more access the same memory location:

      ORG $7000
        MOVB #0x0F, 0x10 ; GPAGE
        LDAA 0xE020      ; reads at the global address 0x0FE020
                         ;   which maps to the same memory as the logical addr. 0xFE1020

    Therefore every memory location for the HCS12X has up to 3 different addresses.
    Up to two logical and one global.
    Notes.
      - Not every address has a logical equivalent. The external space is only available in the global address space.
        The DMA Registers are also only addressable with global addresses.

      - The PPAGE can only be set if the code is outside of the 0x8000 to 0xBFFF range.
        If not, the next code fetch will be from the new wrong PPAGE value.

      - Inside of the paged area, the highest pages are allocated first. So all HCS12X's do have the FF pages
        (if they have this memory type at all).

      - For RPAGE, the value 0 is illegal. Otherwise the global addresses would overlap with the registers.
        This has the implication that the logical address 0x001000 is strictly seen not valid.


*/

#if __OPTION_ACTIVE__("-MapRAM")
#define __HCS12XE_RAMHM_SET__
#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区在线观看网站| 久久久久久久久岛国免费| 日韩电影在线观看网站| 91麻豆精品国产91久久久久久久久| 奇米精品一区二区三区在线观看一 | 色域天天综合网| 午夜精品福利一区二区三区蜜桃| 精品国产91亚洲一区二区三区婷婷| 日本美女一区二区三区| 国产三区在线成人av| 欧美自拍丝袜亚洲| 久久se这里有精品| 一区二区三区在线免费| 日韩一区二区精品在线观看| 精品一区二区在线看| 亚洲福利电影网| 日韩美女主播在线视频一区二区三区 | 91精品免费观看| 国产成人免费视| 夜色激情一区二区| 久久蜜臀精品av| 欧美日韩国产区一| 国产呦萝稀缺另类资源| 亚洲综合丁香婷婷六月香| 久久久精品影视| 欧美视频一区二区三区在线观看| 韩国欧美国产一区| 亚洲大片精品永久免费| 国产精品久久久久桃色tv| 日韩一区二区在线看片| 91福利国产精品| 99久久亚洲一区二区三区青草| 免费观看在线色综合| 亚洲精品国产一区二区精华液 | 亚洲免费观看高清| 亚洲精品在线网站| 在线中文字幕一区| 91亚洲精品一区二区乱码| 国产麻豆午夜三级精品| 日韩和欧美一区二区| 一区二区三区四区在线播放| 亚洲国产精品国自产拍av| 日韩精品一区二区三区在线| 欧美日韩国产在线观看| 在线精品视频一区二区三四 | 国产精品国模大尺度视频| 精品国产不卡一区二区三区| 7777精品伊人久久久大香线蕉最新版| 日本韩国一区二区三区| 欧美午夜理伦三级在线观看| 欧美视频一区二区三区在线观看 | 亚洲高清在线视频| 日韩av中文在线观看| 美女任你摸久久| 国产一区二区电影| 97se狠狠狠综合亚洲狠狠| 91丨porny丨国产| 欧美日韩卡一卡二| 日韩精品一区二区三区四区视频 | 亚洲国产精品二十页| 国产精品成人午夜| 夜夜嗨av一区二区三区四季av| 午夜日韩在线观看| 国产一区91精品张津瑜| 91网站在线播放| 91精品国产入口| 国产三级精品三级| 亚洲精品乱码久久久久久久久 | av在线一区二区三区| 2023国产精品自拍| 国产精品乱人伦| 亚洲二区视频在线| 国产在线视频精品一区| 色视频欧美一区二区三区| 777午夜精品视频在线播放| 久久精品水蜜桃av综合天堂| 亚洲伦理在线精品| 看国产成人h片视频| av日韩在线网站| 在线播放91灌醉迷j高跟美女| 久久综合一区二区| 一区二区免费看| 国产主播一区二区三区| 在线视频国内自拍亚洲视频| 精品国产一区二区精华| 亚洲视频免费在线观看| 美腿丝袜一区二区三区| 91麻豆.com| www成人在线观看| 亚洲高清在线视频| 波多野结衣中文字幕一区| 91精品午夜视频| 亚洲人成网站在线| 国产经典欧美精品| 欧美一区二区播放| 一区二区三区加勒比av| 国产aⅴ精品一区二区三区色成熟| 欧美视频一区在线观看| 国产精品激情偷乱一区二区∴| 日本伊人午夜精品| 在线观看视频欧美| 国产精品午夜免费| 激情综合色综合久久| 欧美午夜精品理论片a级按摩| 久久久久久久网| 日本成人在线不卡视频| 欧美影院午夜播放| 成人免费在线视频观看| 777午夜精品免费视频| 自拍偷在线精品自拍偷无码专区| 激情国产一区二区| 日韩欧美国产系列| 日韩av网站免费在线| 91国偷自产一区二区使用方法| 国产精品午夜免费| 国产成人精品影视| 久久午夜羞羞影院免费观看| 日韩成人免费在线| 欧美系列一区二区| 一区二区三区影院| 91在线免费播放| 国产精品不卡在线| 懂色av一区二区夜夜嗨| 久久伊人中文字幕| 国产乱码字幕精品高清av| 欧美成人一区二区三区片免费| 图片区日韩欧美亚洲| 欧美午夜精品理论片a级按摩| 亚洲免费观看高清完整版在线观看 | 国产麻豆91精品| 精品99一区二区三区| 久久国产福利国产秒拍| 91精品一区二区三区久久久久久| 亚洲不卡av一区二区三区| 欧美在线观看视频在线| 亚洲韩国一区二区三区| 日本大香伊一区二区三区| 亚洲欧美日韩系列| 一本一道久久a久久精品| 亚洲激情欧美激情| 欧美午夜精品一区二区三区| 亚洲国产精品一区二区久久 | 国产精品美女久久久久久| www.成人在线| 亚洲人精品一区| 色婷婷av一区| 亚洲成人综合网站| 91精品国产综合久久国产大片| 日本v片在线高清不卡在线观看| 日韩一区二区三区高清免费看看| 麻豆成人久久精品二区三区红| 欧美成人r级一区二区三区| 九九国产精品视频| 国产欧美日韩另类一区| 91在线观看成人| 亚洲午夜久久久久久久久电影网| 欧美情侣在线播放| 精品一区在线看| 国产精品乱人伦| 欧美亚日韩国产aⅴ精品中极品| 天天综合色天天综合| 精品国产乱码久久久久久闺蜜 | 国产一区二区三区免费在线观看| 欧美经典一区二区| 91黄色免费观看| 蜜桃视频在线一区| 久久久久综合网| 色综合中文字幕国产 | 在线观看免费视频综合| 美女网站在线免费欧美精品| 七七婷婷婷婷精品国产| 国产亚洲成年网址在线观看| av在线不卡免费看| 日韩国产欧美三级| 亚洲国产成人一区二区三区| 欧美体内she精高潮| 精品一区二区免费视频| 亚洲婷婷在线视频| 日韩一区二区三区视频在线观看| 成人一区二区三区中文字幕| 亚洲综合在线电影| 国产亚洲成av人在线观看导航| 欧美探花视频资源| 精品影视av免费| 一区二区三区不卡在线观看 | 蜜臀av性久久久久蜜臀aⅴ流畅| 国产精品天干天干在线综合| 欧美日韩你懂得| 国产成人av影院| 日韩精品成人一区二区在线| 国产精品久久久久一区二区三区共| 欧美高清视频不卡网| 粉嫩嫩av羞羞动漫久久久| 午夜久久久久久久久| 1024成人网| 久久久久久久久99精品| 欧美精品日韩综合在线| 色综合中文字幕| 国产91在线观看丝袜| 蜜臀精品一区二区三区在线观看|