初级会员

- 积分
- 55
- 金钱
- 55
- 注册时间
- 2010-12-25
- 在线时间
- 6 小时
|
我的设置如下:
MYDMA_Config(DMA1_Channel3,(u32)&SPI1->DR,(u32)vv,14400);
void MYDMA_Config(DMA_Channel_TypeDef *DMA_CHx,u32 cpar,u32 cmar,u16 cndtr)
{
u32 DR_Base; //做缓冲用,不知道为什么.非要不可
RCC->AHBENR |= 1 << 0; //开启DMA1时钟
DR_Base = cpar;
DMA_CHx->CPAR = DR_Base; //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 << 2; //允许半传输中断
DMA_CHx->CCR |= 1 << 1; //允许传输完成中断
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传输
void MYDMA_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传输
}
void DMAChannel3_IRQHandler(void)
{
if(DMA1->ISR & (1 << 10)){
DMA1->IFCR |= (1 << 10);
CS595 = !CS595;
}
}
程序运行的结果是不进入中断处理函数,不知道是什么原因,请给分析一下,谢谢!
|
|