新手入门
- 积分
- 41
- 金钱
- 41
- 注册时间
- 2015-10-17
- 在线时间
- 3 小时
|
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)应该地址也++。
|