中级会员
 
- 积分
- 456
- 金钱
- 456
- 注册时间
- 2021-9-6
- 在线时间
- 59 小时
|
1金钱
void ADC_DMA_Config(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
DMA_InitTypeDef DMA_InitStructure; // ×¢£ºADCΪ12λģÊýת»»Æ÷£¬Ö»ÓÐADCConvertedValueµÄµÍ12λÓÐЧ
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//ʹÄÜDMAʱÖÓ
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;//´®¿Ú1ÊÇDMA1_4ͨµÀ ADC
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//ǿռ0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//×Ó1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
DMA_DeInit(DMA1_Channel1);
// DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;//DMA¶ÔÓ¦µÄÍâÉè»ùµØÖ·
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR;//DMA¶ÔÓ¦µÄÍâÉè»ùµØÖ·
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)ADC_RegularConvertedValueTab; //ÄÚ´æ´æ´¢»ùµØÖ·
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; //DMAµÄת»»Ä£Ê½ÎªSRCģʽ£¬ÓÉÍâÉè°áÒÆµ½ÄÚ´æ
DMA_InitStructure.DMA_BufferSize = 32;//DMA»º´æ´óС£¬1¸ö
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //½ÓÊÕÒ»´ÎÊý¾Ýºó£¬É豸µØÖ·½ûÖ¹ºóÒÆ
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //½ÓÊÕ¶à´ÎÊý¾Ýºó£¬Ä¿±êÄÚ´æµØÖ·ºóÒÆ
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;//¶¨ÒåÍâÉèÊý¾Ý¿í¶ÈΪ16λ
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; //DMA°áÒÆÊý¾Ý³ß´ç£¬HalfWord¾ÍÊÇΪ16λ
DMA_InitStructure.DMA_Mode =DMA_Mode_Normal;//Ñ­»·×ª»»Ä£Ê½
DMA_InitStructure.DMA_Priority = DMA_Priority_High;//DMAÓÅÏȼ¶¸ß
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//M2Mģʽ½ûÓÃ
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
DMA_ITConfig(DMA1_Channel1,DMA_IT_TC, ENABLE);//ʹÄÜ´«ÊäÍê³ÉÖжÏ
DMA_Cmd(DMA1_Channel1, ENABLE);
}
void DMA1_Channel1_IRQHandler(void) // ʹÓÃDMAÖжϲɼ¯Êý¾Ý£¬²»»áÈÝÒ×¶ªÊ§Êý¾Ý
{
if(DMA_GetITStatus(DMA1_IT_TC1)!=RESET)
{
DMA_ClearITPendingBit(DMA1_IT_TC1);
flag=1; //×Ô¼ºµÄÖжϴ¦Àí´úÂë µ«ÊǼÇס³ÌÐò²»ÒªÌ«¸´ÔÓ ×îºÃ²»Òª³¬¹ýÖжÏʱ¼ä
}
}
这是dma的配置的,主程序就正常的打印缓存里的数据,但是只能打印一次,然后从正常模式改为循环模式,就能一直输出数据,是不是说明在正常模式下就只进入了一次中断?
下面是主程序的一部分
while(1)
{
if(flag)
{
flag=0;
for( int i=0;i<32;i++)
{
printf("%d ",ADC_RegularConvertedValueTab[i]);
} printf("\r\n \r\n");
}
}
|
|