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.

[参考译文] TMDSCNCD28335:使用链接器文件的 F28335 DELAY_US 问题"F28335.cmd"

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1110121/tmdscncd28335-f28335-delay_us-issue-using-linker-file-f28335-cmd

器件型号:TMDSCNCD28335

您好!  

在   我的项目中使用 DELAY_US 宏时遇到问题。  

这只是一个简单的闪烁项目、让环境正常工作。

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main(void)
{
int i = 0;
InitSysCtrl();
Gpio_select();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
for (i=0; i<10;i++)
{
GpioDataRegs.GPATOGGLE.bit.GPIO31 = 0x1;
DELAY_US(10000L);
}
return 0;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

当我使用链接器文件 28335_RAM_lnk.cmd 时、DELAY_US 宏 正在工作。

但是、使用链接器文件 F28335.cmd 执行宏会导致一个非法的 ISR 函数:  

Fullscreen
1
2
3
4
5
6
//
// ILLEGAL_ISR - Illegal operation TRAP
//
interrupt void
ILLEGAL_ISR(void)
{..}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

我的错在哪里?  

我将使用以下组件:  

Windows 10 Enterprise 64位内部版本17763

Code Composer Studio 11.1。

C2000编译器 TI v21.6.0.LTS

对于 F28335:  

扩展坞 USB-EMU TXN100

F28335控制卡版本2.2  

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

    该宏应该从 RAM 执行、而不是从闪存执行。 请在运行时将函数复制到 RAM、在 RAM 外执行。 您可以使用如下所示的 Memcopy 函数:

    Fullscreen
    1
    2
    3
    4
    // The RamfuncsLoadStart, RamfuncsLoadEnd, and RamfuncsRunStart
    // symbols are created by the linker. Refer to the F28335.cmd file.
    MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

    您需要使用 pragma 将此宏复制到 RAM。 只需将 pragma 应用于宏所使用的函数。  

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

    感谢你的帮助。