This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

使用TMS320F2808的一个奇怪的现象

Other Parts Discussed in Thread: TMS320F2808

使用TMS320F2808编程,使用到ePWM,eCAP和ADC。然后模仿TI的一篇讲如何将程序从FLASH拷贝到RAM中执行的文档中的例子,用仿真器将程序下载到FLASH中然后拔掉仿真器但是还没有断电,这时执行程序正确,捕获口正常工作,锁相环正确,但是当我断电再上电,程序执行结果就不对了。

想问一下TI的那篇文档给的例子中将程序从FLASH移到RAM的文件对不对,有没有限制,而且我以前单独调锁相环时都对的,当加入ADC,执行给ADC上电就不对了

  • 关于:“用仿真器将程序下载到FLASH中然后拔掉仿真器但是还没有断电,这时执行程序正确。。。。。但是当我断电再上电,程序执行结果就不对了。"

    例子是正确的,建议楼主检查一下bootmode,用例程包中的FLASH例程,上电能够正常自举吗?

  • 我用其他程序跑时完全可以上电自举,eCAP1/2口都能正常进入中断,ePWM中断也正常,问题就是加入ADC程序之后,在FLASH中eCAP口中断就进不去了,RAM仿真时可以进入几次,之后也进不去了,

  • 楼主之前谈到的是,那个例程是否正确,这个例程是正确的,能够自举的。

    至于现在这个问题”问题就是加入ADC程序之后,在FLASH中eCAP口中断就进不去了,RAM仿真时可以进入几次,之后也进不去了,“

    请用仿真器调试,看看是什么原因导致进不了中断,比如:中断太频繁,中断判优导致不进入ECAP中断,这需要优化程序

  • 我找到问题了,网上有个人指明是在InitAd()函数中使用了us_Delay()函数有问题,因为该函数用了.sect "ramfuncs",我看了FLASH TO RAM例子中没有用.sect "ramfuncs"这个语句,换过来之后程序就都对了,绕了个弯子。

    能不能帮我解释一下为什么啊,谢谢。

  • 这个函数是延时函数,是耍了一个小花招,通过估计确定多个循环执行下来对应的时间,刚好就是延时时间,但这是必须在RAM中运行时才正确,否则在Flash上就需要等待周期,对应的时间就不准确了,而要实现在RAM上运行,就需要将它映射的ramfuncs指定到RAM上去。

    由此看来,你没有做这步,实际上你的代码也仍然是在flash上运行的。