3120|5

41

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关注DMA初始化的问题 [复制链接]

在dma初始化中,我这样写DMA0CTL |= DMADT_4 + DMASRCINCR_3 + + DMAEN + DMAIE;
可以进入DMA中断

但是在初始化的时候只写这个DMA0CTL |= DMADT_4 + DMASRCINCR_3

然后在执行其他程序后需要进入DMA中断时,再加上DMA0CTL |=+ DMAEN + DMAIE  这个,
发现不能进入中断了,就卡死在 __bis_SR_register(CPUOFF + GIE);这里了
  这是为什么啊?其他程序没有任何地方的改变,整个程序也只有DMA这个中断,各位大神,给点思路吧

最新回复

DMA的功能,我也是很久前用过。现在手里也没有环境试验。你认真看手册里面有没有,关于初始化顺序的说明。是不是一些配置有限制。不能随便实时更改。当时,我调一个adc和DMA的功能。改一个寄存器的值,折腾半天没有效果。后来,换了一个位置给寄存器赋值,就起作用了。  详情 回复 发表于 2017-8-15 09:35
 
点赞 关注

回复
举报

3471

帖子

11

TA的资源

五彩晶圆(高级)

沙发
 
你把正常情况下,DMA初始化完整的代码贴出来。__bis_SR_register(CPUOFF + GIE);这个函数读的是什么内容。

点评

正常情况下的DMA初始化 DMACTL0 = DMA0TSEL_5; // DAC12IFG trigger DMA0 // critial codes to trigger all // assign finally set  详情 回复 发表于 2017-8-10 20:12
 
 

回复

41

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
ienglgge 发表于 2017-8-10 13:42
你把正常情况下,DMA初始化完整的代码贴出来。__bis_SR_register(CPUOFF + GIE);这个函数读的是什么内容。

正常情况下的DMA初始化
DMACTL0 = DMA0TSEL_5;        // DAC12IFG trigger DMA0  // critial codes to trigger all                                                                                                            
                                                                           // assign finally set
  // DMA0 setup for DAC0
  DMA0SA = (unsigned int)&Sin_tab;          // Source block address
  DMA0DA = (unsigned int)&DAC12_0DAT;       // Destination single address
  DMA0SZ = 32;                              // Block size
  DMA0CTL |= DMADT_4 + DMASRCINCR_3 + DMAEN + DMAIE; // Rpt, inc src, word-word

正常执行这个后__bis_SR_register(CPUOFF + GIE);进入DMA中断,就是这个
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=DACDMA_VECTOR
__interrupt void DACDMA_ISR (void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(DACDMA_VECTOR))) DACDMA_ISR (void)
#else
#error Compiler not supported!
#endif
{
}

分开写DMA初始化后,不正常情况就是卡在__bis_SR_register(CPUOFF + GIE)这里了,进不了中断了

点评

dma0ctl的配置是初始化的最后一句?这样试一下,初始化过程,不配这个寄存器,在执行其他内容后的那个地方,加上完整的对该寄存器的配置,看看效果。  详情 回复 发表于 2017-8-11 22:54
 
 
 

回复

3471

帖子

11

TA的资源

五彩晶圆(高级)

4
 
下雨天不洗澡 发表于 2017-8-10 20:12
正常情况下的DMA初始化
DMACTL0 = DMA0TSEL_5;        // DAC12IFG trigger DMA0  // critial codes to ...

dma0ctl的配置是初始化的最后一句?这样试一下,初始化过程,不配这个寄存器,在执行其他内容后的那个地方,加上完整的对该寄存器的配置,看看效果。

点评

这样就可以了 ,但是这是为什么呢?  详情 回复 发表于 2017-8-14 21:47
 
 
 

回复

41

帖子

0

TA的资源

一粒金砂(中级)

5
 
ienglgge 发表于 2017-8-11 22:54
dma0ctl的配置是初始化的最后一句?这样试一下,初始化过程,不配这个寄存器,在执行其他内容后的那个地 ...

这样就可以了 ,但是这是为什么呢?

点评

DMA的功能,我也是很久前用过。现在手里也没有环境试验。你认真看手册里面有没有,关于初始化顺序的说明。是不是一些配置有限制。不能随便实时更改。当时,我调一个adc和DMA的功能。改一个寄存器的值,折腾半天没有  详情 回复 发表于 2017-8-15 09:35
 
 
 

回复

3471

帖子

11

TA的资源

五彩晶圆(高级)

6
 
下雨天不洗澡 发表于 2017-8-14 21:47
这样就可以了 ,但是这是为什么呢?

DMA的功能,我也是很久前用过。现在手里也没有环境试验。你认真看手册里面有没有,关于初始化顺序的说明。是不是一些配置有限制。不能随便实时更改。当时,我调一个adc和DMA的功能。改一个寄存器的值,折腾半天没有效果。后来,换了一个位置给寄存器赋值,就起作用了。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表