OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3391|回复: 1

DMA传输 M2M模式

[复制链接]

1

主题

3

帖子

0

精华

新手入门

积分
41
金钱
41
注册时间
2015-10-17
在线时间
3 小时
发表于 2016-4-16 19:55:01 | 显示全部楼层 |阅读模式
1金钱
现在我想实现内部SRAM(64k)的数据通过DMA传输到外部SRAM中(1M),查看了参考手册DMA章节,上面关于存储器到存储器模式就只是一段话,所以我认为很简单,但是实验过后发现数据跑到外存只有几个数据,问问大神们,DMA中M2M模式有没有什么需要注意的???
部分代码如下:
u8 SRAMIN_Temper[Nbyter] = {0};
u8 SRAMEX_Temper[MAXSRAMEX]  __attribute__ ((at(0x68000000))) ;


MYDMA_Config(DMA1_Channel4,(u32)SRAMEX_Temper,(u32)(SRAMIN_Temper+count*DMA_Temp_Num));//DMA_Temp_Num 是一次DMA传输的数据数量
MYDMA_Enable(DMA1_Channel4);



void MYDMA_Config(DMA_Channel_TypeDef* DMA_CHx,u32 memexar , u32 meminar)
{
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);       
       
        DMA_DeInit(DMA_CHx);  
       
        DMA_InitStructure.DMA_PeripheralBaseAddr = memexar ;
        DMA_InitStructure.DMA_MemoryBaseAddr = meminar;  
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
        DMA_InitStructure.DMA_BufferSize = DMA_Temp_Num;  
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
        DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;  
        DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
        DMA_InitStructure.DMA_M2M = DMA_M2M_Enable  ;  
        DMA_Init(DMA_CHx, &DMA_InitStructure);  
                 
}


void MY_SRAM_Init()
{
           FSMC_NORSRAMInitTypeDef FSMC_NORSRAMInitStructure ;
           FSMC_NORSRAMTimingInitTypeDef FSMC_ReadWriteTimingStructure;
           GPIO_InitTypeDef  GPIO_InitStructure;
       
           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOG, ENABLE) ;
           //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO , ENABLE);  2»Dèòa¿aÆô  Ö»óDÖØó3éäê±oò2ÅDèòa
           RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC ,ENABLE);
          
           GPIO_InitStructure.GPIO_Pin = 0xFF33;                                 
           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;        
           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
           GPIO_Init(GPIOD, &GPIO_InitStructure);

           GPIO_InitStructure.GPIO_Pin = 0xFF83;                          
           GPIO_Init(GPIOE, &GPIO_InitStructure);

           GPIO_InitStructure.GPIO_Pin = 0xF03F;                        
           GPIO_Init(GPIOF, &GPIO_InitStructure);

           GPIO_InitStructure.GPIO_Pin = 0x043F;                          
           GPIO_Init(GPIOG, &GPIO_InitStructure);
         
           FSMC_ReadWriteTimingStructure.FSMC_AccessMode  = FSMC_AccessMode_A ;
           FSMC_ReadWriteTimingStructure.FSMC_AddressHoldTime  = 0x00;
           FSMC_ReadWriteTimingStructure.FSMC_AddressSetupTime = 0x00;
           FSMC_ReadWriteTimingStructure.FSMC_BusTurnAroundDuration = 0x00 ;
           FSMC_ReadWriteTimingStructure.FSMC_CLKDivision = 0x00 ;
           FSMC_ReadWriteTimingStructure.FSMC_DataLatency = 0x00 ;
           FSMC_ReadWriteTimingStructure.FSMC_DataSetupTime  = 0x03 ;
       
           FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable ;
           FSMC_NORSRAMInitStructure.FSMC_Bank  = FSMC_Bank1_NORSRAM3 ;
           FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =   FSMC_BurstAccessMode_Disable ;
           FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable ;
           FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable ;
           FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b ;
           FSMC_NORSRAMInitStructure.FSMC_MemoryType =  FSMC_MemoryType_SRAM ;
           FSMC_NORSRAMInitStructure.FSMC_WaitSignal =  FSMC_WaitSignal_Disable ;
           FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive =FSMC_WaitSignalActive_BeforeWaitState ;
           FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low ;
           FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable ;
           FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable ;
           FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable ;
           FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &FSMC_ReadWriteTimingStructure ;
           FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &FSMC_ReadWriteTimingStructure ;
           FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);


           FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM3, ENABLE);  
}


求大神们 发表一下经验。

最佳答案

查看完整内容[请看2#楼]

昨晚调式了一下,确实简单。现在我用的是M2M模式,并非是M2P模式,所以外设(这里是外部SRAM)应该地址也++。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

3

帖子

0

精华

新手入门

积分
41
金钱
41
注册时间
2015-10-17
在线时间
3 小时
 楼主| 发表于 2016-4-16 19:55:02 | 显示全部楼层
昨晚调式了一下,确实简单。现在我用的是M2M模式,并非是M2P模式,所以外设(这里是外部SRAM)应该地址也++。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 08:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表