初级会员

- 积分
- 95
- 金钱
- 95
- 注册时间
- 2013-6-1
- 在线时间
- 37 小时
|
10金钱
下面这段程序困扰我好几天了;反反复复调试了许多遍,白天晚上都是想着这个事情;实在是不知道问题出在哪;希望高手指点一下,(或者请提供一段SPI_DMA读FLASH数据的程序)谢谢!
在没有应用DMA之前LCD的显示图像是正常的,但是加了DMA之后;图像无显示;程序始终停留在 while(DMA_GetFlagStatus(DMA1_FLAG_TC2) == RESET);
#define SIZE 3200
#define Doublesize SIZE*2
u8 datatemp[Doublesize];
int main(void)
{
delay_init();
LCD_init();
SPI_Flash_Init();
DMA_Configuration((u32)datatemp);
SPI_FLASH_CS=0;
SPI_Flash_Read(0);
MYDMA_Enable(DMA1_Channel2);
while(DMA_GetFlagStatus(DMA1_FLAG_TC2) == RESET);
DMA_ClearFlag(DMA1_FLAG_TC2);
SPI_FLASH_CS=1;
LCD_tuhuashow(0,0,SIZE,datatemp);
while(1);
}
#define DMA1_MEM_LEN 6400
void DMA_Configuration(u32 cmar)
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //ê1ÄüDMA′«êä
DMA_DeInit(DMA1_Channel2);
DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)&SPI1->DR;//íaéè»ùμØÖ·
DMA_InitStructure.DMA_MemoryBaseAddr=cmar; //DMAÄú′æ»ùμØÖ·
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;//éèÖÃíaéèÎaà′Ô′
DMA_InitStructure.DMA_BufferSize=DMA1_MEM_LEN; //DMA»o′æ′óD¡
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//íaéèμØÖ·2»±ä
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;//Äú′æμØÖ·μYÔö
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte; //íaéèêy¾Y¿í¶èÎa16λ
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;//Äú′æêy¾Y¿í¶èÎa16λ
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; //1¤×÷ÔúÕy3£Ä£ê½
DMA_InitStructure.DMA_Priority=DMA_Priority_High;//¸ßóÅÏè¼¶
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;//·ÇÄú′æμ½Äú′æ′«êä
DMA_Init(DMA1_Channel2,&DMA_InitStructure);
}
void MYDMA_Enable(DMA_Channel_TypeDef*DMA_CHx)
{
DMA_Cmd(DMA_CHx, DISABLE ); //1رÕUSART1 TX DMA1 ËùÖ¸ê¾μÄí¨μà
DMA_SetCurrDataCounter(DMA_CHx,DMA1_MEM_LEN);//DMAí¨μàμÄDMA»o′æμÄ′óD¡
DMA_Cmd(DMA_CHx, ENABLE); //ê1ÄüUSART1 TX DMA1 ËùÖ¸ê¾μÄí¨μà
}
void SPI_Flash_Read(u32 ReadAddr)
{
SPI_InitTypeDef SPI_InitStructure;
SPIx_ReadWriteByte(W25X_ReadData); //·¢Ëí¶áè¡Ãüáî
SPIx_ReadWriteByte((u8)((ReadAddr)>>16)); //·¢Ëí24bitμØÖ·
SPIx_ReadWriteByte((u8)((ReadAddr)>>8));
SPIx_ReadWriteByte((u8)ReadAddr);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_RxOnly;
SPI_Init(SPI1, &SPI_InitStructure);
}
|
|