我爱你的吻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会自动清除相应外设级的中断标志位,不用程序清除
我爱你的吻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
}
我爱你的吻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(;;);
}
我爱你的吻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
我爱你的吻123
发表于 2015-10-30 21:37
上面 这两幅图就是我要仿真的这个程序的界面。我给出了ADCRESULT0--7的传值,DMABUF的值。现在是初如状态。
下面是示波器的值。前面那一点点是显示的DMABUF【40】,现在的值都在2000左右,所以大概是直线。
我爱你的吻123
发表于 2015-10-30 21:42
点击下一步,相应的空间在发生变化,DMABUF1[]在清空,示波器的值也在变小。大家看看。。。。。
我爱你的吻123
发表于 2015-10-30 21:50
当我点到这里的时候,我触发了一次SEQ1排序中断,寄存器内的值也变化了。这是ADC寄存器中的值。我们接下来看看DMABUF的值是个什么情况。
你看DMABUF也有变化,只不过只一个寄存器内有值。隔10个有值,地址偏移是10.
但是这里面有一个问题,就是DMABUF的值,与ADC寄存器中的值是怎么对应的。我有点搞不懂,这两天再想想。如果有知道的朋友麻烦告诉一声。。。
我爱你的吻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模拟信号。如何把这些值一一传出来。
二、如果我用硬件仿真,会是一个怎么样的情况。
如果有人知道,麻烦告诉一下。。。。。。。。。。。。。。
zhouqianhua
发表于 2015-11-6 11:45
大神!大赞:handshake
zhouqianhua
发表于 2015-11-9 11:26
厉害,持续关注:handshake
我爱你的吻123
发表于 2015-11-9 17:00
zhouqianhua 发表于 2015-11-9 11:26
厉害,持续关注
多谢关注,希望多给我提点意见啊!
bd7qwmcu
发表于 2015-11-10 10:18
支持楼主,希望能和你交流,谢谢
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...
这个问题楼主解决了没有?
我爱你的吻123
发表于 2015-11-13 10:12
zhouqianhua 发表于 2015-11-11 11:25
这个问题楼主解决了没有?
这个问题还没有解决,关键是现在有些事情要做。这块暂时停下来了。你要是有什么进展就在这里发一下吧。我后续会把这个持续跟进的。
Jay1202
发表于 2015-12-24 11:05
谢谢楼主,很详细
小木欧尼
发表于 2016-1-24 17:07
楼主辛苦啦多谢
edishen
发表于 2016-1-24 17:27
厉害
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
然后怎么用硬件仿真?
sybvip
发表于 2017-9-14 14:39
楼主,话说能不说下 PieVectTable.DINTCH1= &local_DINTCH1_ISR;这行是怎么个情况?
DSP 28335我刚开始玩,不明白为何取地址,local_DINTCH1_ISR这个不是个中断名称吗?
好奇怪?
刘纳尔多
发表于 2018-9-25 10:03
我爱你的吻123 发表于 2015-10-30 12:58
在TI给的这个Example_2823xAdcToDMA.c工程文件里面,有一个奇怪的问题,这段话是这样写的。
// Step 2. Ini ...
因为这个ad的io口是单独的 估计直接用就ok 不用初始化