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.

[参考译文] TMS320F28035:TMS320F28035

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1121371/tms320f28035-tms320f28035

器件型号:TMS320F28035

对于一个新项目、我尝试使用 TMS320F28035。  我尝试在  实验套件中运行示例程序 example_2803xAdcc.c。  当我使用"28035_RAM_lnk.cmd"从 RAM 编译时、它可以正常运行。  但是、当我使用" F28035.cmd"从闪存运行时 、程序崩溃、调试器显示它已登录  到 DSP2803x_DefaultIsr.c 的 ILLEGAL_ISR (void)中   能不能帮我解决这个问题

此致、

Ramesh

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

    Ramesh、

    问题在于、F28035.cmd 文件在将代码加载到闪存中时、也有一个用于定义为"ramfuncs"的任何段的指令被加载到闪存、但是从 RAM 复制/运行。  在调用此部分中的任何函数之前、必须在 C 代码中处理从闪存到 RAM 的复制。  您选择的示例 ADCexmapping 是 usDelay 函数到"ramfuncs "部分、但由于您尚未将其从闪存复制到 RAM、代码将分支到它期望函数位于内存中的位置、 但它将不会出现、最终您将遇到从未定义的存储器执行的非法 ISR。

    以下是.cmd 文件中的部分、它指示链接器将代码加载到闪存、但从 RAM 执行:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    ramfuncs : LOAD = FLASHD,
    RUN = RAML0,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    LOAD_SIZE(_RamfuncsLoadSize),
    PAGE = 0
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    要修复此问题、您需要将这些代码行添加到 main 之前的 Example_2803x_Adc3.c 文件中

    Fullscreen
    1
    2
    3
    4
    extern Uint16 RamfuncsLoadStart;
    extern Uint16 RamfuncsLoadEnd;
    extern Uint16 RamfuncsRunStart;
    extern Uint16 RamfuncsLoadSize;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    然后在调用 InitAdc()之前添加此行

    Fullscreen
    1
    memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (Uint32)&RamfuncsLoadSize);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    重新编译/重新加载、现在一切都应该正常。

    最棒的

    Matthew

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

    尊敬的 Mathew:

    感谢您的支持。  我更新了代码。  现在、它不会卡在非法 ISR 中、但仍然无法正常工作。  ADC 数据未更新、并且 LoopCount 未更新。  调试器处于冻结状态。   

    此致、

    Ramesh

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

    Ramesh、

    感谢更新、还有一个函数应该从 RAM 运行、当被放置在闪存中时、内存访问时间太慢、无法正常工作。

    如果您打开 DSP2803x_adc.c 文件、您将在 第208行看到以下函数

    uint16

    AdcConversion (空)

    将此语句置于函数上方

    #pragma CODE_SECTION (AdcConversion、"ramfuncs");

    这也会将函数放置在 RAM 中、之后的操作应该正常。

    最棒的

    Matthew

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

    谢谢 Matthew。  现在工作正常。

    此致、

    Ramesh