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

📄 stm32f10x_dma.txt

📁 STM32外部SRAM用作datamemery的程序 开发环境MDK
💻 TXT
📖 第 1 页 / 共 2 页
字号:
;;;235    
;;;236      /* Initialize the DMA_PeripheralInc member */
;;;237      DMA_InitStruct->DMA_PeripheralInc = DMA_PeripheralInc_Disable;
000008  60c1              STR      r1,[r0,#0xc]
;;;238    
;;;239      /* Initialize the DMA_MemoryInc member */
;;;240      DMA_InitStruct->DMA_MemoryInc = DMA_MemoryInc_Disable;
00000a  6101              STR      r1,[r0,#0x10]
;;;241    
;;;242      /* Initialize the DMA_PeripheralDataSize member */
;;;243      DMA_InitStruct->DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
00000c  6141              STR      r1,[r0,#0x14]
;;;244    
;;;245      /* Initialize the DMA_MemoryDataSize member */
;;;246      DMA_InitStruct->DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
00000e  6181              STR      r1,[r0,#0x18]
;;;247    
;;;248      /* Initialize the DMA_Mode member */
;;;249      DMA_InitStruct->DMA_Mode = DMA_Mode_Normal;
000010  61c1              STR      r1,[r0,#0x1c]
;;;250    
;;;251      /* Initialize the DMA_Priority member */
;;;252      DMA_InitStruct->DMA_Priority = DMA_Priority_Low;
000012  6201              STR      r1,[r0,#0x20]
;;;253    
;;;254      /* Initialize the DMA_M2M member */
;;;255      DMA_InitStruct->DMA_M2M = DMA_M2M_Disable;
000014  6241              STR      r1,[r0,#0x24]
;;;256    }
000016  6281              STR      r1,[r0,#0x28]
000018  4770              BX       lr
;;;257    
                          ENDP


                          AREA ||i.DMA_Cmd||, CODE, READONLY, ALIGN=1

                  DMA_Cmd PROC
;;;274    
;;;275      if (NewState != DISABLE)
000000  2900              CMP      r1,#0
;;;276      {
;;;277        /* Enable the selected DMAy Channelx */
;;;278        DMAy_Channelx->CCR |= CCR_ENABLE_Set;
000002  6801              LDR      r1,[r0,#0]
000004  d002              BEQ      |L4.12|
000006  f041f041          ORR      r1,r1,#1
00000a  e001              B        |L4.16|
                  |L4.12|
;;;279      }
;;;280      else
;;;281      {
;;;282        /* Disable the selected DMAy Channelx */
;;;283        DMAy_Channelx->CCR &= CCR_ENABLE_Reset;
00000c  f021f021          BIC      r1,r1,#1
                  |L4.16|
000010  6001              STR      r1,[r0,#0]            ;278
;;;284      }
;;;285    }
000012  4770              BX       lr
;;;286    
                          ENDP


                          AREA ||i.DMA_ITConfig||, CODE, READONLY, ALIGN=1

                  DMA_ITConfig PROC
;;;310    
;;;311      if (NewState != DISABLE)
000000  2a00              CMP      r2,#0
;;;312      {
;;;313        /* Enable the selected DMA interrupts */
;;;314        DMAy_Channelx->CCR |= DMA_IT;
000002  6802              LDR      r2,[r0,#0]
000004  d001              BEQ      |L5.10|
000006  430a              ORRS     r2,r2,r1
000008  e000              B        |L5.12|
                  |L5.10|
;;;315      }
;;;316      else
;;;317      {
;;;318        /* Disable the selected DMA interrupts */
;;;319        DMAy_Channelx->CCR &= ~DMA_IT;
00000a  438a              BICS     r2,r2,r1
                  |L5.12|
00000c  6002              STR      r2,[r0,#0]            ;314
;;;320      }
;;;321    }
00000e  4770              BX       lr
;;;322    
                          ENDP


                          AREA ||i.DMA_GetCurrDataCounter||, CODE, READONLY, ALIGN=1

                  DMA_GetCurrDataCounter PROC
;;;339      /* Return the number of remaining data units for DMAy Channelx */
;;;340      return ((u16)(DMAy_Channelx->CNDTR));
000000  6840              LDR      r0,[r0,#4]
000002  b280              UXTH     r0,r0
;;;341    }
000004  4770              BX       lr
;;;342    
                          ENDP


                          AREA ||i.DMA_GetFlagStatus||, CODE, READONLY, ALIGN=2

                  DMA_GetFlagStatus PROC
;;;399    FlagStatus DMA_GetFlagStatus(u32 DMA_FLAG)
;;;400    {
000000  4602              MOV      r2,r0
;;;401      FlagStatus bitstatus = RESET;
000002  2000              MOVS     r0,#0
000004  4905              LDR      r1,|L7.28|
000006  00d3              LSLS     r3,r2,#3
;;;402      u32 tmpreg = 0;
;;;403    
;;;404      /* Check the parameters */
;;;405      assert_param(IS_DMA_GET_FLAG(DMA_FLAG));
;;;406    
;;;407      /* Calculate the used DMA */
;;;408      if ((DMA_FLAG & FLAG_Mask) != (u32)RESET)
000008  d502              BPL      |L7.16|
;;;409      {
;;;410        /* Get DMA2 ISR register value */
;;;411        tmpreg = DMA2->ISR ;
00000a  f8d1f8d1          LDR      r1,[r1,#0x400]
00000e  e000              B        |L7.18|
                  |L7.16|
;;;412      }
;;;413      else
;;;414      {
;;;415        /* Get DMA1 ISR register value */
;;;416        tmpreg = DMA1->ISR ;
000010  6809              LDR      r1,[r1,#0]
                  |L7.18|
;;;417      }
;;;418    
;;;419      /* Check the status of the specified DMA flag */
;;;420      if ((tmpreg & DMA_FLAG) != (u32)RESET)
000012  4211              TST      r1,r2
000014  d000              BEQ      |L7.24|
;;;421      {
;;;422        /* DMA_FLAG is set */
;;;423        bitstatus = SET;
000016  2001              MOVS     r0,#1
                  |L7.24|
;;;424      }
;;;425      else
;;;426      {
;;;427        /* DMA_FLAG is reset */
;;;428        bitstatus = RESET;
;;;429      }
;;;430      
;;;431      /* Return the DMA_FLAG status */
;;;432      return  bitstatus;
;;;433    }
000018  4770              BX       lr
;;;434    
                          ENDP

00001a  0000              DCW      0x0000
                  |L7.28|
00001c  40020000          DCD      0x40020000

                          AREA ||i.DMA_ClearFlag||, CODE, READONLY, ALIGN=2

                  DMA_ClearFlag PROC
;;;492    void DMA_ClearFlag(u32 DMA_FLAG)
;;;493    {
000000  4903              LDR      r1,|L8.16|
000002  00c2              LSLS     r2,r0,#3
;;;494      /* Check the parameters */
;;;495      assert_param(IS_DMA_CLEAR_FLAG(DMA_FLAG));
;;;496    
;;;497      /* Calculate the used DMA */
;;;498      if ((DMA_FLAG & FLAG_Mask) != (u32)RESET)
000004  d502              BPL      |L8.12|
;;;499      {
;;;500        /* Clear the selected DMA flags */
;;;501        DMA2->IFCR = DMA_FLAG;
000006  f8c1f8c1          STR      r0,[r1,#0x404]
;;;502      }
;;;503      else
;;;504      {
;;;505        /* Clear the selected DMA flags */
;;;506        DMA1->IFCR = DMA_FLAG;
;;;507      }
;;;508    }
00000a  4770              BX       lr
                  |L8.12|
00000c  6048              STR      r0,[r1,#4]            ;506
00000e  4770              BX       lr
;;;509    
                          ENDP

                  |L8.16|
000010  40020000          DCD      0x40020000

                          AREA ||i.DMA_GetITStatus||, CODE, READONLY, ALIGN=2

                  DMA_GetITStatus PROC
;;;567    ITStatus DMA_GetITStatus(u32 DMA_IT)
;;;568    {
000000  4602              MOV      r2,r0
;;;569      ITStatus bitstatus = RESET;
000002  2000              MOVS     r0,#0
000004  4905              LDR      r1,|L9.28|
000006  00d3              LSLS     r3,r2,#3
;;;570      u32 tmpreg = 0;
;;;571    
;;;572      /* Check the parameters */
;;;573      assert_param(IS_DMA_GET_IT(DMA_IT));
;;;574    
;;;575      /* Calculate the used DMA */
;;;576      if ((DMA_IT & FLAG_Mask) != (u32)RESET)
000008  d502              BPL      |L9.16|
;;;577      {
;;;578        /* Get DMA2 ISR register value */
;;;579        tmpreg = DMA2->ISR ;
00000a  f8d1f8d1          LDR      r1,[r1,#0x400]
00000e  e000              B        |L9.18|
                  |L9.16|
;;;580      }
;;;581      else
;;;582      {
;;;583        /* Get DMA1 ISR register value */
;;;584        tmpreg = DMA1->ISR ;
000010  6809              LDR      r1,[r1,#0]
                  |L9.18|
;;;585      }
;;;586    
;;;587      /* Check the status of the specified DMA interrupt */
;;;588      if ((tmpreg & DMA_IT) != (u32)RESET)
000012  4211              TST      r1,r2
000014  d000              BEQ      |L9.24|
;;;589      {
;;;590        /* DMA_IT is set */
;;;591        bitstatus = SET;
000016  2001              MOVS     r0,#1
                  |L9.24|
;;;592      }
;;;593      else
;;;594      {
;;;595        /* DMA_IT is reset */
;;;596        bitstatus = RESET;
;;;597      }
;;;598      /* Return the DMA_IT status */
;;;599      return  bitstatus;
;;;600    }
000018  4770              BX       lr
;;;601    
                          ENDP

00001a  0000              DCW      0x0000
                  |L9.28|
00001c  40020000          DCD      0x40020000

                          AREA ||i.DMA_ClearITPendingBit||, CODE, READONLY, ALIGN=2

                  DMA_ClearITPendingBit PROC
;;;659    void DMA_ClearITPendingBit(u32 DMA_IT)
;;;660    {
000000  4903              LDR      r1,|L10.16|
000002  00c2              LSLS     r2,r0,#3
;;;661      /* Check the parameters */
;;;662      assert_param(IS_DMA_CLEAR_IT(DMA_IT));
;;;663    
;;;664      /* Calculate the used DMA */
;;;665      if ((DMA_IT & FLAG_Mask) != (u32)RESET)
000004  d502              BPL      |L10.12|
;;;666      {
;;;667        /* Clear the selected DMA interrupt pending bits */
;;;668        DMA2->IFCR = DMA_IT;
000006  f8c1f8c1          STR      r0,[r1,#0x404]
;;;669      }
;;;670      else
;;;671      {
;;;672        /* Clear the selected DMA interrupt pending bits */
;;;673        DMA1->IFCR = DMA_IT;
;;;674      }
;;;675    }
00000a  4770              BX       lr
                  |L10.12|
00000c  6048              STR      r0,[r1,#4]            ;673
00000e  4770              BX       lr
;;;676    
                          ENDP

                  |L10.16|
000010  40020000          DCD      0x40020000

⌨️ 快捷键说明

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