⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c28x寻址方式详解.txt

📁 C28x寻址方式详解.对初学F28x的同学很多帮助。
💻 TXT
📖 第 1 页 / 共 2 页
字号:
              MOV loc16,*(0:16bit)  ; [loc16] = [0:16bit]
              MOV *(0:16bit),loc16  ; [loc16] = [0:16bit]
         (2) 
      *(PA)方式,地址的高16位为0,低16位为PA中的16位二进制立即数。当该指令连续使用时,每次地址都会后加。该模式寻址时,在访问IO空间时,IO选通信号被置位。用数据地址线访问IO空间。可用指令:
              OUT *(PA),loc16       ; IOspace[0:PA] = [loc16]
              UOUT *(PA),loc16      ; IOspace[0:PA] = [loc16] (unprotected)
              IN loc16,*(PA)        ; [loc16] = IOspace[0:PA]
         (3) 
      0:pma方式,22位的地址高6位为0,低16位为16位二进制立即数pma,当该指令连续使用时,每次地址都会后加。只能寻址低64k程序空间。可用指令:
              MAC P,loc16,0:pma     ; ACC = ACC + P << PM,P = [loc16] * 
      ProgSpace[0:pma]
         (4) 
      *(pma)方式,22位的地址高6位为0,低16位为16位二进制立即数pma,当该指令连续使用时,每次地址都会后加。只能寻址低64k程序空间。可用指令:
              XPREAD loc16,*(pma)   ; [loc16] = ProgSpace[0x3F:pma]
              XMAC P,loc16,*(pma)   ; ACC = ACC + P << PM,P = [loc16] * 
      ProgSpace[0x3F:pma]
              XMACD P,loc16,*(pma)  ; ACC = ACC + P << PM,P = [loc16] * 
      ProgSpace[0x3F:pma],[loc16+1] = [loc16]
       
      程序空间间接寻址:
         (1) 
      *(AL)方式,22位的地址高6位为0x3F,低16位为AL,当该指令连续使用时,AL的内容被复制到一个影子寄存器中,并在每次地址后加,AL的内容不变。只能寻址低64k程序空间。可用指令:
              XPREAD loc16,*AL      ; [loc16] = ProgSpace[0x3F:AL]
              XPWRITE *AL,loc16     ; ProgSpace[0x3F:AL] = [loc16]
         (2) 
      *XAR7方式,22位地址为XAR7,当在指令XPREAD或XPWRITE中连续使用时,XAR7的内容被复制到一个影子寄存器中,并每次地址后加,XAR7的内容不变。其它指令则不会。可用指令:
              MAC P,loc16,*XAR7      ; ACC = ACC + P << PM,P = [loc16] * 
      ProgSpace[*XAR7]
              DMAC ACC:P,loc32,*XAR7 ; ACC = ([loc32].MSW * 
      ProgSpace[*XAR7].MSW) >> PM,
                                     ; P = ([loc32].LSW * ProgSpace[*XAR7].MSW) 
      >> PM
              QMACL P,loc32,*XAR7    ; ACC = ACC + P >> PM,
                                     ; P = ([loc32] * ProgSpace[*XAR7]) >> 32
              IMACL P,loc32,*XAR7    ; ACC = ACC + P,
                                     ; P = ([loc32] * ProgSpace[*XAR7]) << PM
              PREAD loc16,*XAR7      ; [loc16] = ProgSpace[*XAR7]
              PWRITE *XAR7,loc16     ; ProgSpace[*XAR7] = [loc16]
         (2) *XAR7++方式,22位地址为XAR7, 
      16位操作时XAR7=XAR7+1,32位操作时XAR7=XAR7+2,指令重复时,地址后加。可用指令:
              MAC P,loc16,*XAR7++      ; ACC = ACC + P << PM,P = [loc16] * 
      ProgSpace[*XAR7++]
              DMAC ACC:P,loc32,*XAR7++ ; ACC=([loc32].MSW * 
      ProgSpace[*XAR7++].MSW)>>PM,
                                       ; P=([loc32].LSW * 
      ProgSpace[*XAR7++].MSW)>>PM
              QMACL P,loc32,*XAR7++    ; ACC = ACC + P >> PM, P = ([loc32] * 
      ProgSpace[*XAR7++]) >> 32
              IMACL P,loc32,*XAR7++    ; ACC = ACC + P, P = ([loc32] * 
      ProgSpace[*XAR7++]) << PM
       
      字节寻址:
          
      *+XARn[AR0],*+XARn[AR0],*+XARn[3位二进制立即数],32位地址为XARn+偏移量(AR0/AR1/3位二进制立即数),如果偏移量为偶数值,则访问16位存储器位置的低有效位,高有效位不变;如果为奇数,则访问16位存储器位置的高有效位,低有效位不变。其它所有寻址模式,只访问访问寻址位置的低有效位,不改变高有效位。可用指令:
              MOVB AX.LSB,loc16     ; if( address mode == *+XARn[AR0/AR1/3bit] )
                                                                                 
                                                   ; if( offset == even )
                                                                                 
                                                   ; AX.LSB = [loc16].LSB;
                                                                                 
                                                   ; AX.MSB = 0x00;
                                                                                 
                                                   ; if( offset == odd )
                                                                                 
                                                   ; AX.LSB = [loc16].MSB;
                                                                                 
                                                   ; AX.MSB = 0x00;
                                                                                 
                                                   ; else
                                                                                 
                                                   ; AX.LSB = [loc16].LSB;
                                                                                 
                                                   ; AX.MSB = 0x00;
              MOVB AX.MSB,loc16     ; if( address mode == *+XARn[AR0/AR1/3bit] )
                                                                                 
                                                   ; if( offset == even )
                                                                                 
                                                   ; AX.LSB = untouched;
                                                                                 
                                                   ; AX.MSB = [loc16].LSB;
                                                                                 
                                                   ; if( offset == odd )
                                                                                 
                                                   ; AX.LSB = untouched;
                                                                                 
                                                   ; AX.MSB = [loc16].MSB;
                                                                                 
                                                   ; else
                                                                                 
                                                   ; AX.LSB = untouched;
                                                                                 
                                                   ; AX.MSB = [loc16].LSB;
              MOVB loc16,AX.LSB     ; if( address mode == *+XARn[AR0/AR1/3bit] )
                                                                                 
                                                   ; if( offset == even )
                                                                                 
                                                   ; [loc16].LSB = AX.LSB
                                                                                 
                                                   ; [loc16].MSB = untouched;
                                                                                 
                                                   ; if( offset == odd )
                                                                                 
                                                   ; [loc16].LSB = untouched;
                                                                                 
                                                   ; [loc16].MSB = AX.LSB;
                                                                                 
                                                   ; else
                                                                                 
                                                   ; [loc16].LSB = AX.LSB;
                                                                                 
                                                   ; [loc16].MSB = untouched;
              MOVB loc16,AX.MSB     ; if( address mode == *+XARn[AR0/AR1/3bit] )
                                                                                 
                                                   ; if( offset == even )
                                                                                 
                                                   ; [loc16].LSB = AX.MSB
                                                                                 
                                                   ; [loc16].MSB = untouched;
                                                                                 
                                                   ; if( offset == odd )
                                                                                 
                                                   ; [loc16].LSB = untouched;
                                                                                 
                                                   ; [loc16].MSB = AX.MSB;
                                                                                 
                                                   ; else
                                                                                 
                                                   ; [loc16].LSB = AX.MSB;
                                                                                 
                                                   ; [loc16].MSB = untouched;
      文章录入:admin    责任编辑:admin 
      上一篇文章: TMS320F240与PC机串行通讯的设计

      下一篇文章: TI F2812全系列开发板简介


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -