新手上路
- 积分
- 23
- 金钱
- 23
- 注册时间
- 2016-5-4
- 在线时间
- 6 小时
|
2金钱
原子哥 你好 程序设计是这样的;
能够实现按键 key2 后 DMA 传输的功能
可是 我想加入DMA 传输完成后进入中断的设置
于是我加了下面的代码 但是 DMA中断的蜂鸣器没声 请问 我是不是少了些什么呢
DMA_CHx->CCR|=1<<1; //允许传输完成中断
程序的部分代码如下 :
void DMA1_Channel4_Init(DMA_Channel_TypeDef*DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
RCC->AHBENR|=1<<0; //开启DMA1时钟
delay_ms(5); //等待DMA时钟稳定
DMA_CHx->CPAR=cpar; //DMA1 外设地址
DMA_CHx->CMAR=(u32)cmar; //DMA1,存储器地址
DMA1_MEM_LEN=cndtr; //保存DMA传输数据量
DMA_CHx->CNDTR=cndtr; //DMA1,传输数据量
DMA_CHx->CCR=0X00000000; //复位
DMA_CHx->CCR|=1<<4; //从存储器读
DMA_CHx->CCR|=0<<5; //普通模式
DMA_CHx->CCR|=0<<6; //外设地址非增量模式
DMA_CHx->CCR|=1<<7; //存储器增量模式
DMA_CHx->CCR|=0<<8; //外设数据宽度为8位
DMA_CHx->CCR|=0<<10; //存储器数据宽度8位
DMA_CHx->CCR|=1<<12; //中等优先级
DMA_CHx->CCR|=0<<14; //非存储器到存储器模式
DMA_CHx->CCR|=1<<1; //允许传输完成中断
}
//开启一次DMA传输
void DMA1_Channel4_Enable(DMA_Channel_TypeDef*DMA_CHx)
{
DMA_CHx->CCR&=~(1<<0); //关闭DMA传输
DMA_CHx->CNDTR=DMA1_MEM_LEN; //DMA1,传输数据量
DMA_CHx->CCR|=1<<0; //开启DMA传输
}
//按键中断 开始使能DMA 传输
void EXTI2_IRQHandler(void)
{
delay_ms(10); //消抖
USART1->CR3=1<<7; //使能串口1的DMA发送
DMA1_Channel4_Enable(DMA1_Channel4);//开始一次DMA传输!
EXTI->PR=1<<2; //清除LINE2上的中断标志位
}
//DMA 中断
void DMA1_Channel4_IRQHandler()
{
buzzer_On();
DMA1->ISR |= 1<<13;
}
|
|