发新帖本帖赏金 5.00元(功能说明)我要提问
返回列表
打印

TI官方例程ADC转换到DMA之全程记录--- Example_2823xAdcToDMA.c

[复制链接]
手机看帖
扫描二维码
随时随地手机跟帖
21
我爱你的吻123|  楼主 | 2015-10-30 17:14 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
StartDMACH1();

void StartDMACH1(void)
{
        EALLOW;
        DmaRegs.CH1.CONTROL.bit.RUN = 1;
        EDIS;
}


void StartDMACH1(void)
        首次启动DMA,若Cont为禁止,每次DMA结束后,需要再次启动DMA时需要调用
        只开启相应用于触发的外设级中断,不开启PIE对应位,则能够触发DMA而不触发CPU的中断程序
        经过DMACH1ModeConfig配置的中断,DMA会自动清除相应外设级的中断标志位,不用程序清除


使用特权

评论回复
22
我爱你的吻123|  楼主 | 2015-10-30 17:33 | 只看该作者
// Start SEQ1   开始排序器,SEQ叫做排序器,有什么作用呢?就是把ADC转换通道排序。SEQ1排前8个,SEQ2排后8个。
   AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1;排序器1开始工作。软件触发排序器工作。
   for(i=0;i<10;i++){
            for(j=0;j<1000;j++){}
        AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;    //Normally ADC will be tied to ePWM, or timed routine------------这个地方没有说明是用什么软件来触发ADC启动,这也是我最大的疑惑。
   }                                             //For this example will re-start manually

}


使用特权

评论回复
23
我爱你的吻123|  楼主 | 2015-10-30 17:35 | 只看该作者
// INT7.1         PIE中断,第7组第1个,就是DMA通道1.
interrupt void local_DINTCH1_ISR(void)     // DMA Channel 1
{

  // To receive more interrupts from this PIE group, acknowledge this interrupt
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP7;      响应第7组所有中断。

  // Next two lines for debug only to halt the processor here
  // Remove after inserting ISR Code
   asm ("      ESTOP0");
   for(;;);
}

使用特权

评论回复
24
我爱你的吻123|  楼主 | 2015-10-30 17:50 | 只看该作者
在CCS仿真的时候,当程序加载到芯片后,CCS自动寻找main函数入口或是code_start入口,自动跳过了bootloader的过程, 所以在仿真的时候看似不需要boot mode的设置,因为CCS的功能让芯片能够自动找到程序的入口了。而boot loader的功能其实也就是根据GPIO引脚状态找到应用程序的入口而已。
但是,你在仿真的时候,如果因为看门狗产生复位,或是直接点击CCS的复位按钮,再按run,如果这时候GPIO没有配置为正确的引导状态,则芯片会运行不起来。
所以在仿真的时候,如果要复位芯片,常用的是用reset cpu,然后restart,这样就跳过bootloader过程,由CCS找到应用程序入口。当然,最好还是设置GPIO的状态,程序如果是load 在flash,就boot to flash,如果在RAM,则boot to ram。
一句话概括,仿真的时候,CCS可以屏蔽bootloader,自动找到函数入口。默认是程序load到memory时,或使用reset + restart。
那么如果脱机跑的时候,就一定要配置正确的引导状态了,否则运行不起来。


这个情况可以作为一个参考!!!!!!!!!!!1

使用特权

评论回复
25
我爱你的吻123|  楼主 | 2015-10-30 21:37 | 只看该作者


上面 这两幅图就是我要仿真的这个程序的界面。我给出了ADCRESULT0--7的传值,DMABUF的值。现在是初如状态。


下面是示波器的值。前面那一点点是显示的DMABUF【40】,现在的值都在2000左右,所以大概是直线。

QQ图片20151030114415.png (214.1 KB )

QQ图片20151030114415.png

使用特权

评论回复
26
我爱你的吻123|  楼主 | 2015-10-30 21:42 | 只看该作者


点击下一步,相应的空间在发生变化,DMABUF1[]在清空,示波器的值也在变小。大家看看。。。。。

使用特权

评论回复
27
我爱你的吻123|  楼主 | 2015-10-30 21:50 | 只看该作者

当我点到这里的时候,我触发了一次SEQ1排序中断,寄存器内的值也变化了。这是ADC寄存器中的值。我们接下来看看DMABUF[40]的值是个什么情况。

你看DMABUF[40]也有变化,只不过只一个寄存器内有值。隔10个有值,地址偏移是10.


但是这里面有一个问题,就是DMABUF[40]的值,与ADC寄存器中的值是怎么对应的。我有点搞不懂,这两天再想想。如果有知道的朋友麻烦告诉一声。。。

使用特权

评论回复
28
我爱你的吻123|  楼主 | 2015-10-30 21:57 | 只看该作者
本帖最后由 我爱你的吻123 于 2015-10-31 09:55 编辑


当10次完毕后,程序就停在了
// Next two lines for debug only to halt the processor here
  // Remove after inserting ISR Code
   asm ("      ESTOP0");
   for(;;);



这个for(;;);这里等待中断了,但是问题出来了,我不知道怎么在软件仿真的环境下,再重启中断。或者说是进入中断,我的程序在这里就停住了。
       也要想想怎么办。
一、如果我外接ADC模拟信号。如何把这些值一一传出来。
二、如果我用硬件仿真,会是一个怎么样的情况。




如果有人知道,麻烦告诉一下。。。。。。。。。。。。。。

使用特权

评论回复
29
zhouqianhua| | 2015-11-6 11:45 | 只看该作者
大神!大赞:handshake

使用特权

评论回复
30
zhouqianhua| | 2015-11-9 11:26 | 只看该作者
厉害,持续关注:handshake

使用特权

评论回复
31
我爱你的吻123|  楼主 | 2015-11-9 17:00 | 只看该作者

多谢关注,希望多给我提点意见啊!

使用特权

评论回复
32
bd7qwmcu| | 2015-11-10 10:18 | 只看该作者
支持楼主,希望能和你交流,谢谢

使用特权

评论回复
33
zhouqianhua| | 2015-11-11 11:25 | 只看该作者
我爱你的吻123 发表于 2015-10-30 21:57
当10次完毕后,程序就停在了
// Next two lines for debug only to halt the processor here
  // Remove  ...

这个问题楼主解决了没有?

使用特权

评论回复
34
我爱你的吻123|  楼主 | 2015-11-13 10:12 | 只看该作者
zhouqianhua 发表于 2015-11-11 11:25
这个问题楼主解决了没有?

这个问题还没有解决,关键是现在有些事情要做。这块暂时停下来了。你要是有什么进展就在这里发一下吧。我后续会把这个持续跟进的。

使用特权

评论回复
35
Jay1202| | 2015-12-24 11:05 | 只看该作者
谢谢楼主,很详细

使用特权

评论回复
36
小木欧尼| | 2016-1-24 17:07 | 只看该作者
楼主辛苦啦  多谢

使用特权

评论回复
37
edishen| | 2016-1-24 17:27 | 只看该作者
厉害

使用特权

评论回复
38
xiaoliuxing| | 2017-3-13 11:25 | 只看该作者
我爱你的吻123 发表于 2015-10-30 21:57
当10次完毕后,程序就停在了
// Next two lines for debug only to halt the processor here
  // Remove  ...

我也想知道,如果我外接ADC模拟信号。如何把这些值一一传出来。并且在示波器上显示,我用的DSP是28335
然后怎么用硬件仿真?

使用特权

评论回复
39
sybvip| | 2017-9-14 14:39 | 只看该作者
楼主,话说能不说下 PieVectTable.DINTCH1= &local_DINTCH1_ISR;这行是怎么个情况?
DSP 28335我刚开始玩,不明白为何取地址,local_DINTCH1_ISR这个不是个中断名称吗?
好奇怪?

使用特权

评论回复
40
刘纳尔多| | 2018-9-25 10:03 | 只看该作者
我爱你的吻123 发表于 2015-10-30 12:58
在TI给的这个Example_2823xAdcToDMA.c工程文件里面,有一个奇怪的问题,这段话是这样写的。
// Step 2. Ini ...

因为这个ad的io口是单独的 估计直接用就ok 不用初始化

使用特权

评论回复
发新帖 本帖赏金 5.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则