ch32v307 sdio的dma模式

使用官網(wǎng)上的例程發(fā)現(xiàn)原文件中SD_Init函數(shù)中?errorstatus = SD_SetDeviceMode( SD_POLLING_MODE );

本來是處于非DMA模式,若想使用DMA模式需要將這句話改為errorstatus = SD_SetDeviceMode( SD_DMA_MODE );嗎?但是再進(jìn)行初始化時(shí)初始化失敗,請(qǐng)問一下是我忽略了哪里嗎,前面我看原文件中已經(jīng)打開了DMA時(shí)鐘了


熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

SD_Error SD_Init( void )

{

? ? NVIC_InitTypeDef NVIC_InitStructure;

? ? GPIO_InitTypeDef? GPIO_InitStructure;


? ? u8 clkdiv = 0;

? ? SD_Error errorstatus = SD_OK;


? ? RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOD, ENABLE );

? ? RCC_AHBPeriphClockCmd( RCC_AHBPeriph_SDIO | RCC_AHBPeriph_DMA2, ENABLE );


? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

? ? GPIO_Init( GPIOC, &GPIO_InitStructure );


? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

? ? GPIO_Init( GPIOB, &GPIO_InitStructure );



? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

? ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

? ? GPIO_Init( GPIOD, &GPIO_InitStructure );


? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;

? ? GPIO_Init( GPIOD, &GPIO_InitStructure );


? ? SDIO_DeInit();


? ? NVIC_InitStructure.NVIC_IRQChannel = SDIO_IRQn;

? ? NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

? ? NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

? ? NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

? ? NVIC_Init( &NVIC_InitStructure );


? ? errorstatus = SD_PowerON();


? ? if( errorstatus == SD_OK )

? ? {

? ? ? ? errorstatus = SD_InitializeCards();

? ? }


? ? if( errorstatus == SD_OK )

? ? {

? ? ? ? errorstatus = SD_GetCardInfo( &SDCardInfo );

? ? }


? ? if( errorstatus == SD_OK )

? ? {

? ? ? ? errorstatus = SD_SelectDeselect( ( u32 )( SDCardInfo.RCA << 16 ) );

? ? }


? ? if( errorstatus == SD_OK )

? ? {

? ? ? ? errorstatus = SD_EnableWideBusOperation( 1 );

? ? }


? ? if( ( errorstatus == SD_OK ) || ( SDIO_MULTIMEDIA_CARD == CardType ) )

? ? {

? ? ? ? if( SDCardInfo.CardType == SDIO_STD_CAPACITY_SD_CARD_V1_1 || SDCardInfo.CardType == SDIO_STD_CAPACITY_SD_CARD_V2_0 )

? ? ? ? {

? ? ? ? ? ? clkdiv = SDIO_TRANSFER_CLK_DIV + 6;

? ? ? ? }

? ? ? ? else

? ? ? ? {

? ? ? ? ? ? clkdiv = SDIO_TRANSFER_CLK_DIV + 1;

? ? ? ? }

? ? ? ? SDIO_Clock_Set( clkdiv );


? ? ? ? errorstatus = SD_SetDeviceMode( SD_DMA_MODE );

? ? }

? ? return errorstatus;

}



附上現(xiàn)在SD_Init的代碼,請(qǐng)問一下哪里有問題


您好,


????????目前SDIO例程中使用DMA模式時(shí)需要對(duì)庫進(jìn)行修改,具體為SD_ReadBlock、SD_ReadMultiBlocks、SD_WriteBlock、SD_WriteMultiBlocks四個(gè)函數(shù)中使能DMA后再添加使能通道,在下個(gè)版本中已對(duì)該問題進(jìn)行了修復(fù)。

image.png





您好,官方有已經(jīng)修改好的版本嗎,可以發(fā)給我一份嗎,郵箱個(gè)人信息保護(hù),已隱藏



?CH32V307 能? 在MDK(keil) 平臺(tái)開發(fā)發(fā)嗎


?CH32V307 能? 在MDK(keil) 平臺(tái)開發(fā)發(fā)嗎


您好,


????????如果在使用SDIO接口的過程中,遇到DMA模式無法正常工作的情況,可以嘗試下載附件中的庫進(jìn)行替換,修復(fù)上述已知問題。


????????目前V307不支持使用keil,推薦使用MounRiver進(jìn)行開發(fā),下載鏈接:http://www.mounriver.com/download


icon_rar.gifch32v30x_sdio.zip





您好,在同時(shí)使用DMA模式下的SDIO和以太網(wǎng)時(shí)遇到了問題,現(xiàn)在懷疑是由于我在修改SDIO庫時(shí)不太準(zhǔn)確,還是想問一下有SDIO DMA模式下的例程嗎


您好,


????????SDIO在使用DMA模式時(shí),僅需要在初始化函數(shù)中配置即可,在使用讀寫函數(shù)操作時(shí),會(huì)自動(dòng)開啟DMA模式進(jìn)行數(shù)據(jù)傳輸,因此沒有所謂DMA模式的例程,您可以直接使用SDIO的例程進(jìn)行測(cè)試。





只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频