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.

[参考译文] RTOS/TMDXIDK5718:DSP 的 SPI 示例

Guru**** 2540720 points
Other Parts Discussed in Thread: SYSBIOS, AM5718

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/606310/rtos-tmdxidk5718-spi-example-for-dsp

器件型号:TMDXIDK5718
Thread 中讨论的其他器件:SYSBIOSAM5718

工具/软件:TI-RTOS

你(们)好

IM 使用 IDK51718平台、我已为 C66 DSP 设置 SYSBIOS 配置。
为了使用 SPI 接口、我按照 PDK 示例"pdk_am57xx_1_0_6\packets\ti_drv\i2c\examples\EEPROM_read"中所述添加了 Board_Init()函数

现在,当 Board_Init()被调用时,中止例程会停止程序执行。 出什么问题了?

我已将我的项目附加为 zip 文件。

此致、
Markus

e2e.ti.com/.../CTR_5F00_TC5_5F00_C66-_2800_Crash-during-Board_5F00_Init_2900_.zip

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

    目录路径 pdk_am57xx_1_0_6\packages/ti\drv\spi\example 下有多个 SPI 示例、为什么不将其用作起点。

    我查看了您的代码、除了 BIOS_start 函数、在 Board_init 之后没有代码、它将启动只有睡眠命令的任务函数。 应在n`t 内调用 ADC_TEST 函数吗? n`t ADC 连接到 SPI,在运行 ADC_TESTS 之前,应该调用 pinmux 和时钟设置吗?

    代码是在 Board_init 之后进入 BIOS_start 还是中止?

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

    你(们)好,Rahul

    我没有包含有关 SPI 的更多代码,因为程序在 Board_init()函数中崩溃。
    它不会进入 BIOS_start()。 因此我的主题标题误导了我(我尝试重命名、但无法确定如何操作)。
    因此,我的第一个问题不是 SPI 问题,而是程序崩溃(调试器在 abort()函数中停止)。
    同时、我发现当它尝试从 I2C EEPROM 读取电路板信息时会崩溃。 有一个有趣的地方
    I2C_osalPendLock (object->mutex、SemaphoreP_WAIT_Forever);其中 object->mutex 为 NULL。
    由于这是所有 TI 代码、我无法确定为什么内部设置不正确。

    此致、
    Markus

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

    我查看了您的配置文件、认为您需要添加  

    VAR SPI = XDC.loadPackage ('ti.drv.SPI');

    spi.Settings.socType = socType;

    和  

    VAR I2C = XDC.loadPackage ('ti.drv.i2c')

    I2C.Settings.socType = socType

    这对于所有驱动程序获取特定于其所用 SOC 的配置至关重要。 另一种选择是从2个驱动程序的 SoC 目录中包含 AM571x 的 SPI_SoC.c 和 I2C_SoC.c 文件。 这些文件提供了驱动程序在给定 SOC 上使用的基址中断配置等。

    对此进行了说明  

      

    希望这有助于解决您的问题。

    此致、

    Rahul

    PS:有关在应用中集成所有驱动程序示例的信息、另请参阅此应用手册:

    www.ti.com/.../sprac93.pdf  

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

    你(们)好,Rahul

    遗憾的是、设置 socType 变量没有帮助。
    我将进一步尝试找出代码和 TI 示例之间的差异。

    我自己的代码源自 TI SYSBIOS 示例。
    稍后我发现、TI 示例中的预处理器常量"SOC_AM571x"和"C66X"
    我的代码中也缺失(TI SYSBIOS 示例中唯一的预定义符号为"am5718")

    但是设置这些校正也无助于防止 Board_init()中的崩溃。

    此致、
    Markus

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

    让驱动程序与平台和 SOC 配合使用的关键是使用电路板库初始化平台、并将 SOC 配置与驱动程序一起使用。 如果您可以将构建日志添加到 E2E、我可以查看是否可以在构建步骤中发现任何缺失。

    此外、请确保在 Board_Init 调用之后而非之前调用所有与外设相关的代码、因为这可能会导致时钟/引脚多路复用相关的问题。

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

    你(们)好,Rahul

    我将项目剥离到非常基本的位置(请参阅附件)
    您可以在其中找到要查找的日志文件。
    它仍然在 Board_init()内崩溃。

    此致、
    Markus

    e2e.ti.com/.../CTR_5F00_TC5_5F00_C66-V3-_2800_Crash-during-Board_5F00_Init_2900_.zip

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

    你(们)好,Rahul

    同时、我可以自行解决问题。
    在 BIOS 配置文件中、没有定义堆内存。
    添加以下行后,Board_init()不再崩溃。
    奇怪的是、在编译时没有给出任何缺失的错误消息...

    VAR 内存   =  xdc.useModule('xdc.runtime.Memory');
    VAR HeapMem  =  xdc.useModule('ti.sysbios.heaps.HeapMem');

    /*使用 ti.BIOS.HeapMem 创建默认系统堆。 *
    var heapMemParams1             =  新 HeapMem.Params;
    heapMemParams1.size            =  8192 * 25;
    heapMemParams1.sectionName     =  "systemHeap (系统堆)";
    program.global.heap0           =  HeapMem.create (heapMemParam1);

    /*这是默认的内存堆。 *
    Memory.defaultHeapInstance     =  Program.global.heap0;
    Program.sectMap["systemHeap"]  =  Program.platform.stackMemory;

    此致、
    Markus