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.

[参考译文] 编译器/LAUNCHXL-F28069M:独立 Instaspin 项目-卡在初始 ADC 校准中

Guru**** 2618835 points

Other Parts Discussed in Thread: MOTORWARE, CCSTUDIO

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/687005/compiler-launchxl-f28069m-standalone-instaspin-project---stuck-in-initial-adc-calibration

器件型号:LAUNCHXL-F28069M
主题中讨论的其他器件:MOTORWARECCStudio

工具/软件:TI C/C++编译器

在此 过程之后 ,我创建了一个独立的 Instaspin 项目,该项目在构建时没有错误。 但是、我无法运行 lab01。

我有 LaunchXL-28069M 套件、而 lab01无需进行修改即可正常运行、无需修改即可创建独立项目。 因此、这肯定是一个软件问题。

对于独立项目,程序会卡在 HAL_CA()内的 HAL_AdcOffsetSelfCal()函数中。

//Select VREFLO internal connection on B5
ADC_enableVoltRefLoConv (obj->adcHandle);

//为所有 SOC
HAL_AdcCalChanSelect (handle、ADC_SockChanNumber_B5)选择通道 B5;

//应用人工偏移(+80)以考虑可能驻留在 ADC 内核中的负偏移
;ADC_AdcHandle


Conversion (ADC_AdcHandle)= ADC=AdcHandle Conversion (ADC=ADC=ADC=ADC=ADC=ADC=ENABLE_B5);//调整处理 

在 HAL_AdcCalConversion()中,程序尝试对所有 ADC 进行几次采样以计算平均偏移。

ADC_setSockFrcWord (obj->adcHandle、0x00FF);

while (index < SampleSize)
{
//等待 ADCINT1触发,然后将 ADCRESULT0-7寄存器相加
if (adc_getIntFlag (obj->adcHandle、adc_IntNumber_1)==0){}

//必须清除 ADCINT1标志,因为 INT1CONT = 0
adc_clearIntFlag (obj->adcHandle、adc_IntNumber_1);

sum += adc_readResult (obj->adcHandle、adc_ResultNumber_0);
sum += adc_readResult (obj->adcHandle、adc_ResultNumber_1);
sum += adc_readResult (obj->adcHandle、adc_ResultNumber_2); 

这将启用 ADC 的软件触发、完成后将计算平均值。

ADC_setSockFrcWord 似乎实际上不会触发转换、程序会卡在 ADCINTFLG 检查处。 我尝试将其注释掉、但立即得到错误的 ISR 中断。 任何绕过或注释掉此校准的尝试都会导致错误的 ISR 中断。 由于这个准确的代码在正常项目中运行、我不确定在哪里检查错误。

有什么关于为什么会发生这种情况的想法?

e2e.ti.com/.../529701

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请确保首先正确移植所有文件并进行索引、例如所有驱动程序头文件 hal.h 和.cmd 文件、尤其是检查 hal.h 是否适用于 F2806xF/M
    2.确保在 mainISR()中调用 HAL_acqAdcInt(),以清除下一个入口的 ADC 中断状态标志。
    3.确保在调用 HAL_setParams()之前禁用全局中断。

    如果您再次有任何问题、您是否想详细说明您如何移植项目? 这可能会帮助我理解您的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1.是的、我已经检查了这些文件、并非常确定 hal.h 是用于 F2806xF/M 就详细说明而言、该过程主要包括将所有包含的头文件复制到/inc 目录和编辑路径。 工程编译正确、因此不是未解析引用的情况。
    2.是的,HAL_acqAdcint()在 mainISR 中调用。 我没有修改该部分。
    3.我想我需要尝试一下。 这可能是我在注释 ADC 代码后获得 badISR 的原因。

    我将尝试选项3、并告知您它是否解决了问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    只是想办理入住手续、看看您的身边是否有任何更新。 如果您有任何疑问、请告诉我。 如果没有任何其他问题、我们将关闭此主题。 谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据进一步的工作、这似乎是 Motorware 目录结构和文件位置的问题、而不是 ADC 问题。

    我在\sw\modules\hal\boards 内创建了一个名为 test 的新文件夹、并从复制了 hal.c
    \sw\modules\hal\boards\boostxldrv8301_revB\f28x\f2806\src 添加到此文件夹中。
    我已确保目录结构与默认目录结构相似、因此 hal.c 的最终位置为\sw\modules\hal\boards\test\F28x\f2806x\src。
    我在 lab01中删除了 hal.c 的链接、然后链接了新的 hal.c 我验证了在工程属性中正确解析了链接。 已成功编译工程。

    当我运行这个修改后的项目时、它一直在等待 PLL 锁定。

    当我未修改运行 lab01时、它成功运行、因此硬件没有问题、只有软件编译/链接问题。

    我对项目的 hal.c 进行了更改。 如果我在中放置了修改后的 hal.c
    \sw\modules\hal\boards\boostxldrv8301_revB\f28x\f2806\src、项目在我的更改后成功运行。 因此、这不是我的代码中的错误问题。

    因此、如果文件的位置从默认的 motorware 结构中更改、它会成功编译但不运行、并且会在等待 ADC 中断或 PLL 锁定时卡住、有时甚至在闪存初始化例程或随机的情况下也会卡住。

    这不是硬件问题、也不是代码问题、而是一些链接或 CCStudio 问题。
    您以前是否观察过这种情况?

    如果我的问题太模糊、您可以关闭此主题。 很抱歉延迟提供更新。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以检查 hal.c、并且在本实验项目中是正确的。 测试了一些运行良好的实验室项目。 如果您有任何疑问、请告诉我。 谢谢。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢你的帮助。 我的问题已经解决、更改目录结构和链接文件没有问题。

    我不知道它最初为什么不起作用、这一定是我的经验。 现在一切都好了。