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/MSP432E411Y:TI 驱动程序(SimpleLink)文档

Guru**** 2588155 points
Other Parts Discussed in Thread: MSP432E411Y, MSP-EXP432E401Y

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/699902/rtos-msp432e411y-documentation-of-ti-drivers-simplelink

器件型号:MSP432E411Y
主题中讨论的其他器件: MSP-EXP432E401Y

工具/软件:TI-RTOS

尊敬的 TI 专家:

我想详细了解 SimpleLink 软件包中的 TI-RTOS 驱动程序。 据我所知、这些称为 TI-Drivers (并且还支持 FreeRTOS 和 NoRTOS)。 我只能找到很多示例(感谢这些示例)和 doxygen 文档。 我缺少用户指南。 我有一个印象、即 SimpleLink Academy 应该填补空白、但我找不到任何与 ADC 使用相关的内容。

可以给我发送有用的链接吗?

对于 driverlib,我还缺少一个用户指南,如“TivaWareTm外设驱动程序库用户指南”SPMU298D。

可以给我发送有用的链接吗?

MSP432E411Y 和 TM4C129的 driverlib 是否足够相似、可改用 SPMU298D?

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

    Sven、您好!

    [引用 user="Sven Probst"]我想了解有关 SimpleLink 软件包中 TI-RTOS 驱动程序的更多信息。

    文档概述页面SimpleLink Academy 是了解 TI 驱动程序的最佳起点。

    [引用 user="Sven Probst"]据我所知,这些驱动程序称为 TI-Drivers (并且还支持 FreeRTOS 和 NoRTOS)

    您的理解是正确的。

    [引用 user="Sven Probst"]我缺少一个用户指南。 我有一个印象、即 SimpleLink Academy 应该填补空白、但我找不到任何与 ADC 使用相关的内容。

    您是否已经在"TI-Drivers"下查看过名为"Project 0"的 SimpleLink Academy 模块? 它介绍了使用 ADC TI 驱动器的 TI 驱动器的概念。

    文档概述页面将带您进入"TI 驱动程序运行时 API (doxygen)"页面。 如果您单击 ADC.h 文件、则顶部将概述驱动程序的操作以及实现细节。

    我们没有任何有关 TI 驱动程序的用户指南。

    您能否列出上述文档中您认为缺少的一些内容? 我将向我们的内部团队提供此反馈、以便我们能够改进文档。

    [引用 user="Sven Probst"]对于 driverlib,我还缺少一个用户指南,如“TivaWareTm外设驱动程序库用户指南”SPMU298D。

    感谢您指出这一点。 我将会提交一个错误、以便我们可以将其添加到未来的版本中。

    [引用 user="Sven Probst"] MSP432E411Y 和 TM4C129的 driverlib 是否足够相似、可以改用 SPMU298D?

    是的、它们是相似的。 我们建议使用 TI 驱动程序、因为它们支持 RTOS、可移植等 使用 driverlib 对 TI 驱动程序进行微调、或者如果您认为 TI 驱动程序不能用于您的应用程序。

    如果您确实决定使用 driverlib API、我们非常感谢您提供反馈、告诉您为何不想使用 TI-Drivers。

    希望这些信息对您有所帮助!

    谢谢、

    SAI

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

    非常感谢您提供的提示/链接。 我实际上错过了有关 ADC 的 project0一章。
    我现在读取了它、但它引用的代码没有。 它看起来非常简单。 遗憾的是、我必须使用 ADC 的序列发生器和硬件平均、本示例中未介绍这一点。 我将在项目0上工作并出现问题后立即打开一个新帖子。
    我假设有关 ADCBuf.h 和 ADCBufMSP432E4.h 的文档将有助于序列发生器和硬件取平均值?

    "TI 驱动程序运行时 API (doxygen)"页面在软件的植入阶段非常有用、可用作参考指南。 但过于分散、无法轻松理解 ADC 驱动器的概念及其特性或局限性。 也许未来可以添加有关每个 μ µC 外设的 SimpleLink Academy 评估(可能基于"TI 驱动程序"示例)。

    I.M.H.O. SimpleLink Academy project0 (类似于"入门指南")和 API 文档(参考指南)之间的差距太大、需要以某种方式(例如通过用户指南)填补该差距。

    在 Tiva 世界中、SPMU298D 在一定程度上有助于理解 TI-RTOS 驱动程序的概念(尽管我也错过了 Tiva 的 TI-RTOS 驱动程序用户指南。 [off topic]))。因此、我询问了 driverlib 用户指南。 我不会直接使用 driverlib。

    c 代码示例、例如 adcbufmultisequencer_MSP_EXP432E401Y_tirtos_ccs、也无法填补空白、因为注释很少、板级配置文件和应用程序文件之间的分离使理解更加困难。

    过去、我对 Atmel 的概念感到非常满意:他们为每个处理器硬件驱动程序提供了入门指南(基于 doxygen)。 它包含概念概述、简单到复杂的示例代码、代码的每个部分和行都有一个解释。
    请参阅 asf.atmel.com/.../adc_quickstart.html 示例
    由于每个指南的范围有限、因此涵盖了许多详细信息。 所有这些指南的集合、我将其称为驱动程序包的用户指南。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sven、您好!

    我对迟迟不能回来表示歉意。

    ADCBufMSP432E4.h 的文档将为序列发生器提供帮助。 请告诉我以下解释是否有用。

    要初始化序列发生器、请在板级配置文件"MSP_EXP432E401Y.c"中
    *通过为所需的每个通道/序列发生器组合在数组"adcBuf0MSP432E4Channels"中设置".adcSequence"来指定要使用的序列发生器。
    *更改要在数组"seqPriorities (seqPriorities)"中使用的每个序列发生器的序列发生器优先级。

    在应用中、
    *为每个序列发生器创建并初始化"ADCBuf_Conversion"对象。
    *要使每个序列发生器采样多个通道、请将转换对象创建为数组、例如 ADCBuf_Conversion continuousConversion[2]并初始化转换对象中的每个通道。

    对于转换、
    *为每个转换对象调用 ADCBuf_convert。
    *如果使用多个通道、请在调用 ADCBuf_convert 时指定通道数。 示例 ADCBuf_convert (adcbuf、conversion、3)。

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

    您好、Sai、

    非常感谢您的解释。

    为了方便其他论坛用户、我添加了两个文件、其中包含 MSP-EXP432E401Y 的20个 ADC 的定义。 它使用 ADC 0的2个序列发生器和 ADC 1的1个序列发生器。 必须删除"MSP_EXP432E401Y.c"中的 ADC 条目。

    以下代码片段显示了用法:

    #include "Board2.h"
    (笑声)

    /*用于保存回调函数参数的结构*/
    typedef 结构体 adcArgStructt
    {
    uint8_t id;
    }adcArgStruct_t;
    
    typedef adcArgStruct_t adcArgStructArray_t[3];
    
    //结果是 Samples_per_channel (已是硬件平均值)样本的平均值*/
    #define Result_SAMPLERATE 10 // Hz
    
    //回调函数中用于区分序列发生器的标识符*/
    #define ADCBUF0_SQ0_ID 3
    #define ADCBUF0_SQ1_ID 5
    #define ADCBUF1_SQ0_ID 7
    
    个/*每个序列发生器中使用的通道*/
    #define ADCBUF0_SQ0_USEed_Channels 8
    #define ADCBUF0_SQ1_USED_CHANNELS 4
    #define ADCBUF1_SQ0_USED_CHANNELS 8
    #define TOTAL_USED_CHANNELS (ADCBUF0_SQ0_USED_CHANNELS+ADCBUF0_SQ1_USED_CHANNELS+ADCBUF1_SQ0_USED_CHANNELS)
    
    //要计算软件平均值的样本数(调用 ADCBUF_OPEN 时指定的采样率)
    *-我们使用附加硬件、以 ADC 转换速率(1ms/s)*
    #define CHANNEL_CHANNEL_CHANNEL_CHANNELS 进行 ADC 平均值计算 12
    #define ADCBUF0_SQ0_buffersize (ADCBUF0_SQ0_USE_CHANNELS* SAMPS_PER_CHANNEL)
    #define ADCBBUF0_SQ1_buffersize (ADCBUF0_SQ1_USE_CHANNEL_SAMPLE_CHANNEL_SQ0_SQ0_SQUFFERSIZE)
    #define ADCBBUF0_SQ0_SQ0_SQ0_SQ0_SQUFFERSIZE (ADC0_SQ0_SQ0_SQUFFERSIMP_SQ0_ADCK_MODE_ADCK_SAFET_SQ0_SQ0_ADCK_SAMPUFFERSIZE
    
    *;ADCK_ADCK_SAMPUFFERSIMPLE_ADCK_SAFERSIMPLE_ADCK_SAFET_SQ0_SQ0_SQ0_SQ0_SQ0_SQ0_SQ0_SQUFFERSIMPUFFERSIZE *;ADCK_ADCK_ADCK_MOBIPORAP0_AD缓冲 区[AD缓冲 区[AD缓冲
    
    
    
    
    
    uint16_t bufferAdc1Sq0Pong[ADCBUF1_SQ0_buffersize];
    
    //回调函数中用于通道分离的时间缓冲器*/
    int32_t tempBuffer[samples_per_channel];
    //数组用于保存所有通道的平均结果(ADC0 Sq0、ADC0 SQ1、ADC1 Sargu_charge[s/simum_chargtagr]
    
    );*数组用于保持所有通道的 RACn_rarg0*数
    
    
    
    组的数组参数。 只要缓冲区已满、就会调用此函数。
    *所有 ADC-DMA 中断(每个 ADC 2个)应该具有相同的优先级、
    *因此两个 ADC 的一个回调函数应该足够(无占先)?
    /void
    adcBuf0Callback (ADCBuf_Handle handle、ADCBuf_Conversion *转换、
    void *完整的 ADCBuffer、uint32_t 完整通道){
    uint_fast16_t channelIdx、sampleReadIdx、sampleWriteIdx;
    uint16_t *完整缓冲区=(uint16_t *)完整的 ADCBuffer;
    adcArgStruct_t*参数;
    uint8_t id;
    
    参数=(adcArgStruct_t*)(conversion -> arg);
    ID =参数->id;
    if (id == ADCBUF0_SQ0_ID)
    {
    对于(channelIdx = 0;channelIdx < ADCBUF0_SQ0_USed_channels;channelIdx++){
    /*数据顺序:ch0s0、ch1s0、...、chNs0、ch0s1、 CH1s1,...、chNs1,... *
    samplpleReadIdx =通道 Idx;
    /*将一个通道的所有样本复制到一个缓冲区中*/
    对于(sampleWriteIdx = 0;sampleWriteIdx fPLL = 480MHz 时的转换率= 1MSPS;ADC 共享相同的时钟、因此仅设置 ADC 0 *
    ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL、(480/16));
    /*启用硬件对以转换速率采集的32个连续 ADC 样本进行平均计算*/
    ADCHardwareOversampleConfigure (ADC0_BASE、32);
    ADCHardwareOversampleConfigure (ADC1_base、32);
    
    /*在回调函数的参数数组中设置标识符值*/
    args[0].id = ADCBUF0_SQ0_ID;
    args[1].id = ADCBUF0_SQ1_ID;
    args[2].id = ADCBUF1_SQ0_ID;
    
    /*为 ADCBuf0序列发生器0上的所有通道配置转换结构*/
    uint8_t chIdx;
    对于(chIdx = 0;chIdx 
    

    e2e.ti.com/.../Board2.zip