中级会员
 
- 积分
- 369
- 金钱
- 369
- 注册时间
- 2013-12-23
- 在线时间
- 32 小时
|
想采用DAC双通道+DMA+TIM6触发来实现数据传送,但是出现了一个问题:因为两个DAC要分别传送不同内容,所以使用了两个不同的中断函数,因为在之前顺利的使用了一个DAC+DMA2_Channel3中断函数进行音频的播放,所以心想只要再添加一个DMA的中断即可,但是添加中断之后发现不进入DMA中断,于是屏蔽掉所多余的配置只留下先前成功的DAC+DMA2_Channel3中断,任然测试成功后,把中断改为DMA2_Channel2_IRQn等等都不行,中断函数名字与终端也是对应的。下面是我的代码请教一下哪里出错了?
DAC_InitTypeDef DAC_InitStructure;
DMA_InitTypeDef DMA_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//TIM6配制
TIM_DeInit(TIM6);
TIM_SetAutoreload(TIM6, TIM6ARRValue); //此处应该是设置定时器触发DMA的时间,采样率为22.05KHz
TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update); //TIM6 选择TRGO触发源为计时器更新时间
//使能TIM6更新中断
TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE); //计时溢出时触发中断
TIM_Cmd(TIM6, ENABLE); //启动TIM6
DMA_DeInit(DMA2_Channel1);
//DMA1通道3配置
DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR8RD_Address; // 单通道8位右对齐 数据的来源
DMA_InitStructure.DMA_BufferSize = BUFF_SIZE; // 缓冲大小
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; // 8位数据宽度
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; // 8位数据宽度
DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&SquareWave; // 内存基址 数据要写到哪里去
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST; // 外设作为数据传输的目的地
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 外设地址寄存器不变
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; // 内存地址寄存器递增
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; // 工作在循环缓存模式
DMA_InitStructure.DMA_Priority = DMA_Priority_High; // DMA通道x拥有高优先级
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; // DMA通道x没有设置为内存到内存传输
DMA_Init(DMA2_Channel1, &DMA_InitStructure);
DMA_Cmd(DMA2_Channel1, ENABLE);
DMA_ITConfig(DMA2_Channel1, DMA_IT_TC | DMA_IT_HT, ENABLE);
//DAC取消初始化设置
DAC_DeInit();
DAC_StructInit(&DAC_InitStructure);
//DAC配制
DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; //选择定时器6做外部触发源
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; // 无波形产生
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable; // 禁止输出缓冲
DAC_Init(DAC_Channel_1, &DAC_InitStructure); //DAC通道1初始化
DAC_Cmd(DAC_Channel_1, ENABLE); //使能DAC通道1:一旦使能了DAC通道1,PA.04将自动连接到DAC转换器
DAC_DMACmd(DAC_Channel_1, ENABLE); //使能DMA用于DAC通道1
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = DMA2_Channel1_IRQn; //这里尝试过多个中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
下面是中断函数
void DMA2_Channel1_IRQHandler(void)
|
|