完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我用Nano130板做SD读卡实验,SPI0用32位模式传输128字,原先程序是
for( i=0;i<128;i++) { SPI0->CTL |= SPI_CTL_GO_BUSY; //目的是发送时钟 while(SPI0->CTL SPI_CTL_GO_BUSY); //等待发送完成 *p++ = SPI0->RX0; //从SD卡接收数据存入缓冲区 } 以上程序经过验证可以得到正确结果。我现在想用PDMA模式,把上述程序改成 PDMA_Init(); PDMA_EnableChannelClock(PDMAGCR_CSR_CLK1);/* Enable Channel 1 Clock */ sPDMA.DestAddr = (uint32_t)p; //目的地址 sPDMA.SrcAddr = (uint32_t) (SPI0->TX0); //源地址 sPDMA.SrcCtrl = PDMA_CSR_SAD_FIX; //固定源地址 sPDMA.DestCtrl = PDMA_CSR_DAD_INC; //目的地址递增 sPDMA.TransWidth = PDMA_CSR_APB_TWS_32BIT; //32位 sPDMA.Mode = PDMA_CSR_IP2MEM; sPDMA.ByteCnt = 128*4; sPDMA.IstimeOutEnable = 0; PDMA_Open(PDMA1, sPDMA); PDMA_SPI0_RX_TO_CH1(); //PDMA1 PDMA_CHEnableTransfer(PDMA1); SPI_SetRxPDMA(SPI0, TRUE); // SPI_SetGo(SPI0); while(!(PDMA1->ISR PDMA_ISR_TD)); //等待DMA传输完成 SPI_SetTxPDMA(SPI0, FALSE); PDMA_Close(); PDMA_DeInit(); p+=128; 实验结果不对,没有正确从SD卡读到数据,为什么?程序哪里有问题吗? 仿真中,SPI_SetGo(SPI0)执行前,PDMA1->ISR值是0,执行后,PDMA1->ISR值马上变为2,这个是不对的,不知何故。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
656浏览 3评论
568浏览 2评论
385浏览 1评论
407浏览 1评论
369浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 15:49 , Processed in 0.651615 second(s), Total 94, Slave 77 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号