OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6568|回复: 4

从机spi1 dma中断一直触发以至于跳不出中断,调试了半天不能解决,有大神看看吗?

[复制链接]

42

主题

173

帖子

0

精华

高级会员

Rank: 4

积分
548
金钱
548
注册时间
2013-6-18
在线时间
59 小时
发表于 2013-12-16 15:39:16 | 显示全部楼层 |阅读模式

void SPI1_DMA_Configuration( void )
{
 NVIC_InitTypeDef  NVIC_InitStructure;
    RCC->AHBENR |= 1<<0 ;                     //DMA1时钟使能

 

    DMA1_Channel2->CCR &= ~( 1<<14 ) ;        //非存储器到存储器模式
 DMA1_Channel2->CCR |=    2<<12   ;        //通道优先级高
 DMA1_Channel2->CCR &= ~( 3<<10 ) ;        //存储器数据宽度8bit
 DMA1_Channel2->CCR &= ~( 3<<8  ) ;        //外设数据宽度8bit
 DMA1_Channel2->CCR |=    1<<7    ;        //存储器地址增量模式
 DMA1_Channel2->CCR &= ~( 1<<6  ) ;        //不执行外设地址增量模式
 DMA1_Channel2->CCR &= ~( 1<<5  ) ;        //执行循环操作
 DMA1_Channel2->CCR &= ~( 1<<4  ) ;        //从外设读
// DMA1_Channel2->CCR |= ( 1<<1  ) ;        //开启dma接收中断
 DMA1_Channel2->CNDTR &= 0x0000   ;        //传输数量寄存器清零
 DMA1_Channel2->CNDTR = buffersize ;       //传输数量设置为buffersize个

 DMA1_Channel2->CPAR = SPI1_DR_Addr ;      //设置外设地址,注意PSIZE
 DMA1_Channel2->CMAR = (u32)SPI1_RX_Buff ; //设置DMA存储器地址,注意MSIZE

 

 DMA1_Channel3->CCR &= ~( 1<<14 ) ;        //非存储器到存储器模式
 DMA1_Channel3->CCR |=    0<<12   ;        //通道优先级最低
 DMA1_Channel3->CCR &= ~( 3<<10 ) ;        //存储器数据宽度8bit
 DMA1_Channel3->CCR &= ~( 3<<8 )  ;        //外设数据宽度8bit
 DMA1_Channel3->CCR |=    1<<7    ;        //存储器地址增量模式
 DMA1_Channel3->CCR &= ~( 1<<6 )  ;        //不执行外设地址增量模式
 DMA1_Channel3->CCR &= ~( 1<<5 ) ;         //不执行循环操作
 DMA1_Channel3->CCR |=    1<<4    ;        //从存储器读

 DMA1_Channel3->CNDTR &= 0x0000   ;        //传输数量寄存器清零
 DMA1_Channel3->CNDTR = buffersize ;       //传输数量设置为buffersize个
 
 DMA1_Channel3->CPAR = SPI1_DR_Addr ;      //设置外设地址,注意PSIZE
 DMA1_Channel3->CMAR = (u32)SPI1_TX_Buff ; //设置DMA存储器地址,注意MSIZE 

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);                              
        NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel2_IRQn;                    
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;                     
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=4;                                   
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;                               
        NVIC_Init(&NVIC_InitStructure);
 DMA1_Channel2->CCR |= ( 1<<1  ) ;        //开启dma接收中断 
//DMA_ITConfig( DMA1_Channel2, DMA_IT_TC, ENABLE);
}

void DMA1_Channel2_IRQHandler(void)
{
 if(DMA1->ISR & 1<<5)  //通道2完成了传输 
data=1;
 DMA1->IFCR&=~(3<<4); //清除通道2完成标志
}

只为摆正你的倒影,我倾倒了整个世界。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

38

主题

2061

帖子

6

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3273
金钱
3273
注册时间
2012-1-16
在线时间
37 小时
发表于 2013-12-16 21:52:58 | 显示全部楼层
站在巨人的肩膀上不断的前进。。。
回复 支持 反对

使用道具 举报

42

主题

173

帖子

0

精华

高级会员

Rank: 4

积分
548
金钱
548
注册时间
2013-6-18
在线时间
59 小时
 楼主| 发表于 2013-12-16 22:38:52 | 显示全部楼层
问题已经解决,嘿嘿
只为摆正你的倒影,我倾倒了整个世界。
回复 支持 反对

使用道具 举报

260

主题

810

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1898
金钱
1898
注册时间
2012-10-28
在线时间
357 小时
发表于 2014-10-28 17:28:37 | 显示全部楼层
回复【3楼】菜鸟鸡哥:
---------------------------------
是什么问题啊 ?
回复 支持 反对

使用道具 举报

12

主题

126

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
281
金钱
281
注册时间
2013-1-5
在线时间
22 小时
发表于 2015-12-20 20:31:17 | 显示全部楼层
估计是初始化的问题,楼主给个解释呗
天道酬勤
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 23:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表