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-F28379D:F28379D-LAUNCHXL 和 CC3220SF-LAUNCHXL 之间的 SPI 传输数据

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/876375/launchxl-f28379d-spi-transfer-data-between-f28379d-launchxl-and-cc3220sf-launchxl

器件型号:LAUNCHXL-F28379D
主题中讨论的其他器件:C2000WARECC3220SF-LAUNCHXLCC3220SFTMS320F28379D

我正在尝试弄清楚如何对数据传输进行编程。 Resource Explorer 中的给定示例无法让我继续。

请帮我提供一些资源或其他类似示例、以帮助我了解如何对其进行编程。

谢谢你。

Varunkumar

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

    瓦伦

     C2000Ware 中提供的 SPI 示例代码一定能帮助您快速入门。 您是否尝试运行示例代码并了解 SPI 的工作原理?

    我们没有任何其他可与您共享的通用 SPI 示例代码。 如果您有具体问题、我应该能够为您提供帮助。

    此致、

    曼诺伊

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

    我运行了示例代码、但无法计算结果、也无法理解操作。 基本上、我很难编写代码。 我不理解如何在 CCS 中学习代码。 如果能提供一些帮助、我将不胜感激?

    谢谢。

    此致

    瓦伦  

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

    瓦伦

    如果您要开始使用 F28379D、我建议您使用网上商店培训材料、其中包括实验室练习和示例项目。 它通过示例代码很好地概述了此器件及其外设的各种特性。

    在线研讨会

    多日在线技术讲座

    完成实验课程材料后、您应该能够执行以下步骤以使用示例代码。

    步骤1:了解以下 SPI 示例代码并观察 SPI 信号。

    使用以下项目并修改所使用的 SPIA GPIO、如下所示。 编译代码并运行代码

    项目: \device_support\f2837xd\examples\cpu1\spi_loopback\cpu01

    • 将 F2837xD_SPI.c 中可用的 InitSpiaGpio()函数修改为以下 GPIO、如下所示

    • 当您运行上述代码时、我建议您使用 SPI 协议分析器在 launchpad 中监控上述 GPIO 信号。 它将显示 SPI 总线上的情况。

    此示例代码将 SPIA 配置为主器件、并在启用内部回路时独立运行。 您无需进行任何外部硬件连接。

    步骤2:完全了解此代码后、您可以修改此代码以与 CC3220SF-LAUNCHXL 进行通信。

    • 如果您计划通过将电路板安装在一起来连接 F28379D-LAUNCHXL 和 CC3220SF-LAUNCHXL、则需要修改使用的 SPIA GPIO、如下所示。 在这种情况下、您已将 GPIO123用作输出引脚、并将其用作 SPIASTE 引脚、以便在连接 F28379D.GPIO123和 CC3220SF.GPIO17的电路板上进行捕捉操作(如果有任何问题、请查看原理图)
    • 需要禁用 内部回送模式( SpiaRegs.SPICCR.bit.SPILBK = 0;)
    • 然后、您需要确保使用 CC3220SF 的 GPIO14、15、16、17将 CC3220SF.SPI 配置为从器件。 只有两个器件 SPI 配置正确、您才能使它们相互通信。

    希望这对您有所帮助。 祝您好运、欢迎来到 C2000!!!

    快乐编程!

    此致、

    曼诺伊

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

    嗨、Manoj!

    感谢您的回复、继续我的项目非常有帮助。 遗憾的是、我在提出问题时出错了。 我实际上在使用

    F28379D 控制卡和 R4.1控制卡集线站。 我正在尝试在控制卡和 CC3220sf - LaunchXL 之间实现 SPI 通信。

    要传输的数据是 ADC 值(连续读取)、该值由 CC3220sf (从器件)读取、然后由 F28379D 控制卡(主器件)接收。 我配置了所有内容、甚至握手过程似乎都可以正常工作。 我使用示波器来调试信号并更改代码。 除此之外、我发现调试代码很困难。

    我真的尽力了、但我很难理解编码部分。 代码卡在某个头文件的循环中、有时也会出现异常。 我已添加代码和停止位置的屏幕截图供您参考。  如果您能帮我解决这一问题、以便我能够继续、我将不胜感激。

    谢谢你

    Varunkumar

    /*
    版权所有(c) 2015-2019、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    //
    
    /*
    === spislave.c =====
    */
    #include 
    #include 
    #include 
    
    /* POSIX 头文件*/
    #include 
    #include 
    #include 
    
    /*驱动程序头文件*/
    #include 
    #include 
    #include 
    #include 
    
    /*驱动程序配置*/
    #include "ti_drivers_config.h"
    
    #define THREADSTACKSIZE (1024)
    
    //#define SPI_MSG_LENGTH (30)
    //#define SLAVE_MSG ("Hello from slave、msg#:")
    
    #define MAX_LOOP (10)
    
    静态 Display_Handle 显示;
    
    // GUI Composer 的全局变量*/
    uint16_t adcValue = 0;
    uint16_t threshold = 100;
    uint16_t ALERT = 0;
    uint32_t adcValue0MicroVolt;
    float adcValueVolt;
    
    
    uint16_t slaveRxBuffer;
    uint16_TsleTxt;
    
    /*信号量阻止从器件直到传输完成*/
    SEM_t slaveSem;
    
    /*
    === transferCompleteFxn ===
    * SPI_TRANSFCTION ()的回调函数。
    //
    void transferCompleteFxn (SPI_Handle handle、SPI_Transaction *事务)
    {
    SEM_post (&slaveSem);
    }
    
    
    /*
    *==== slaveThread ====
    *从器件 SPI 在同时接收消息的同时向主器件发送消息
    来自主设备的*消息。
    *
    void * slaveThread (void * arg0)
    {
    SPI_Handle slaveSpi;
    SPI_Params Parspiams;
    SPI_Transaction 事务;
    //uint32_t 一;
    布尔 转让;
    内部32_t 状态;
    
    /*
    * CONFIG_SPI_MASTER_READY 和 CONFIG_SPI_SLAVE_READY 是连接的 GPIO 引脚
    主器件和从器件之间的*。 这些引脚用于同步
    *通过一个小的"握手"来控制主器件和从器件应用。 引脚
    *稍后用于同步传输并确保主设备不会
    *开始传输、直至从设备就绪。 这些引脚的行为
    *不同的 spimaster 和 spislave 示例:
    *
    * spislave 示例:
    * * CONFIG_SPI_MASTER_READY 配置为输入引脚。 期间
    * "握手"读取此引脚、高电平值将指示
    * 主设备已准备好运行应用程序。 之后、引脚为
    * 读取以确定主器件是否已打开其 SPI 引脚。
    * 当主器件打开其 SPI 时、它将把这个引脚拉低。
    *
    * * CONFIG_SPI_SLAVE_READY 配置为输出引脚。 期间
    * "握手"此引脚从低电平更改为高电平输出。 这种情况
    * 通知主器件从器件已准备好运行应用程序。
    * 之后、从器件使用该引脚向主器件发出通知
    * 已准备好进行传输。 当准备好进行传输时、该引脚将会
    * 下拉至低电平。
    *
    *下面我们设置 CONFIG_SPI_MASTER_READY 和 CONFIG_SPI_SLAVE_READY 初始值
    *"握手"的条件。
    *
    GPIO_setConfig (CONFIG_SPI_SLAVE_READY、GPIO_CFG_OUTPUT | GPIO_CFG_OUT_LOW);
    GPIO_setConfig (CONFIG_SPI_MASTER_READY、GPIO_CFG_INPUT);
    
    /*
    *握手-将 CONFIG_SPI_SLAVE_READY 设置为高电平以指示从器件就绪
    *以运行。 等待 CONFIG_SPI_MASTER_READY 变为高电平。
    *
    GPIO_WRITE (CONFIG_SPI_SLAVE_READY、0);
    while (GPIO_Read (CONFIG_SPI_MASTER_READY)=0){}
    
    /*
    *创建同步信标;该信标将阻止从器件
    *直到传输完成。 从机配置为回调模式
    *以便我们配置 SPI 传输、然后通知主器件
    *从设备已准备就绪。 但是、我们仍然必须等待电流传输
    *在设置下一个之前完成。 因此、我们等待 slaveSem;
    *一旦传输完成、回调函数将解除阻止
    *从属设备。
    *
    状态= SEM_INIT (&slaveSem、0、0);
    if (status!= 0){
    display_printf (display、0、0、"创建 slaveSem\n"error creating slaveSem\n");
    
    while (1);
    }
    
    /*
    *等待主器件 SPI 打开。 配置 SPI 引脚时、将会发生这种情况
    *时钟可以从低电平切换到高电平(或从高电平切换到低电平、具体取决于
    *极性)。 如果使用3引脚 SPI 且从器件在之前已打开
    *假设主器件、时钟转换可能会导致从器件移出位
    *这是一个实际的传输。 我们可以通过打开来防止这种行为
    *首先主设备,然后打开从设备。
    *
    while (GPIO_Read (CONFIG_SPI_MASTER_READY)=0){}
    
    /*
    *在回调模式下以从器件身份打开 SPI;回调模式用于允许我们这样做
    *配置传输、然后将 CONFIG_SPI_SLAVE_READY 设置为高电平。
    *
    SPI_Params_init (&spiParams);
    spiParams.frameFormat = SPI_POL0_PHA1;
    spiParams.mode = SPI_SLAVE;
    spiParams.transferCallbackFxn = transferCompleteFxn;
    spiParams.transferMode = SPI_MODE_CALLACK;
    slaveSpi = SPI_open (CONFIG_SPI_SLAVE、&spiParams);
    if (slaveSpi == NULL){
    Display_printf (display、0、0、"初始化从器件 SPI\n"时出错);
    while (1);
    }
    否则{
    display_printf (display、0、0、"已初始化从属 SPI \n");
    }
    
    /*将消息复制到发送缓冲区*/
    // strncpy (((char *) slaveTxBuffer、slave_MSG、SPI_MSG_LENGTH);
    slaveTxBuffer = adcValue;
    
    
    /*初始化从属 SPI 事务结构*/
    // slaveTxBuffer[sizeof (slave_MSG)-1]=(i % 10)+'0';
    memset ((void *) slaveRxBuffer、0、sizeof (adcValue));
    transaction.count = sizeof (adcValue);
    transaction.txBuf =(void *) slaveTxBuffer;
    transaction.rxBuf =(void *) slaveRxBuffer;
    
    /*打开用户 LED 指示灯,指示正在进行 SPI 传输*/
    GPIO_TOGGLE (CONFIG_GPIO_LED_1);
    
    /*
    *设置 SPI 传输;CONFIG_SPI_SLAVE_READY 将设置为通知
    *主设备从设备就绪。
    *
    transferOK = SPI_transfer (slaveSpi、事务);
    if (transferOK){
    GPIO_WRITE (CONFIG_SPI_SLAVE_READY、1);
    
    /*等待传输完成*/
    SEM_WAIT (slaveSem);
    
    /*
    *将 CONFIG_SPI_SLAVE_READY 驱动为高电平以指示从器件未就绪
    *用于另一个传输。
    *
    GPIO_WRITE (CONFIG_SPI_SLAVE_READY、1);
    
    
    display_printf (display、0、0、"从机接收到:%s"、slaveRxBuffer);
    }
    否则{
    display_printf (display、0、0、"从器件 SPI 传输失败");
    }
    
    
    SPI_Close (slaveSpi);
    
    /*示例完成-将引脚设置为已知状态*/
    GPIO_setConfig (CONFIG_SPI_MASTER_READY、GPIO_CFG_OUTPUT | GPIO_CFG_OUT_LOW);
    GPIO_WRITE (CONFIG_SPI_SLAVE_READY、0);
    
    display_printf (display、0、0、"\nDone");
    
    返回(NULL);
    }
    
    
    void *线程 Fxn0 (void * arg0)
    {
    /*打开 ADC 驱动程序*/
    uint32_t 时间= 100000;//更新~10/秒
    ADC_Handle ADC;
    ADC_Params 参数;
    ADC_PARAMS_INIT (params);
    ADC = ADC_open (CONFIG_ADC_0、params);
    if (ADC == NULL){
    //初始化 ADC 通道0时出错
    while (1);
    }
    
    while (1){
    int_fast16_t res;
    
    RES = ADC_convert (ADC、&adcValue);
    if (res == ADC_STATUS_SUCCESS){
    adcValue0MicroVolt = adc_convertRawToMicroVolts (adc、adcValue);
    adcValueVolt = adcValue0MicroVol*0.000001*998/422;
    display_printf (display、0、0、"ADC0原始结果:%d\n"、adcValue);
    display_printf (display、0、0、"ADC0 convert result:%d uV\n"、
    adcValue0MicroVolt);
    if (adcValue >= threshold){
    GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_ON);
    警报= 1;
    } 否则{
    GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_OFF);
    警报= 0;
    }
    }
    
    usleep(time);
    }
    
    }
    
    /*
    === mainThread ====
    //
    
    void * mainThread (void * arg0)
    {
    /*~10个循环/秒*/
    
    GPIO_WRITE (CONFIG_SPI_SLAVE_READY、0);
    /*调用驱动程序初始化函数*/
    GPIO_init();
    adc_init();
    // I2C_init ();
    spi_init();
    // uart_init();
    // Watchdog_init();
    
    pthread_t thread0、thread1;
    pthread_attr_t attrs;
    struct sched_param primParam;
    内部 REC;
    内部 detachState;
    
    /*调用驱动程序初始化函数。 *
    display_init();
    
    /*配置 LED 引脚*/
    GPIO_setConfig (CONFIG_GPIO_LED_0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
    GPIO_setConfig (CONFIG_GPIO_LED_1、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
    
    //打开显示进行输出
    Display = Display_open (Display_Type_UART、NULL);
    if (display =NULL){
    /*无法打开显示驱动程序*/
    while (1);
    }
    
    /*打开用户 LED */
    GPIO_WRITE (CONFIG_GPIO_LED_0、CONFIG_GPIO_LED_ON);
    
    display_printf (display、0、0、"启动 SPI 从设备示例");
    display_printf (display、0、0、"此示例要求外部电线为"
    "已连接至接头引脚。 有关详细信息、请参阅 Board.html。\n");
    
    /*创建应用程序线程*/
    pthread_attr_init (atttrs);
    
    detachState = pthread_create_detached;
    /*设置优先级和堆栈大小属性*/
    retc = pthread_attr_setdetachstate (&attrs、detachState);
    如果(retc!= 0){
    /* pthread_attr_setdetachstate()失败*/
    while (1);
    }
    
    retc |= pthread_attr_setstacksize (&attrs、THREADSTACKSIZE);
    如果(retc!= 0){
    /* pthread_attr_setstacksize()失败*/
    while (1);
    }
    
    /*创建从线程*/
    priParam.sched_priority = 1;
    pthread_attr_setschedparam (&attrs、&priParam);
    
    retc = pthread_create (&thread0、&attrs、threadFxn0、NULL);
    如果(retc!= 0){
    /* pthread_create()失败*/
    while (1);
    }
    
    retc = pthread_create (&thread1、&attrs、slaveThread、NULL);
    如果(retc!= 0){
    /* pthread_create()失败*/
    while (1);
    }
    返回(NULL);
    }
    
    
    
    
    
    
    
    F28379D SPI 代码
    //################################################################################################################
    //
    ////文件:spi_ex1_loopback.c
    //
    //标题:SPI 数字环回
    //
    ! \addtogroup driver_example_list
    //! 

    SPI 数字环回

    //! //! 该程序使用 SPI 模块的内部回送测试模式。 此 //! 是一个非常基本的回送、不使用 FIFO 或中断。 a //! 发送数据流、然后与接收到的数据流进行比较。 //! //! 发送的数据如下所示:\n //! 0000 0001 0002 0003 0004 0005 0006 0007… FFFE FFFF 0000 //! //! 这种模式会一直重复。 //! //! b 外部连接\n //! -无 //! //! b 监视\b 变量\n //! -\b sData -要发送的数据 //! -\b RDATA -接收到的数据 //! // //########################################################################################################################## //$TI 发行版:F2837xD 支持库 v3.08.00.00 $ //$发行 日期:Mon Dec 23 17:32:30 IST 2019 $ //版权所有: //版权所有(C) 2013-2019德州仪器(TI)公司- http://www.ti.com/ // 只要 满足以下条件,就允许以源代码和二进制形式重新分发和使用//修改或不修改//: // //重新分发源代码必须保留上述版权 //声明、此条件列表和以下免责声明。 // //二进制形式的再发行必须复制上述版权 //声明、此条件列表和// 分发随附的//文档和/或其他材料中的以下免责声明。 //// 未经 事先书面许可,不能使用德州仪器公司的名称或//其贡献者的名称来认可或推广源自此软件的产品//。 //// 本软件由版权所有者和贡献者提供 //“按原样”,不 承认任何明示或暗示的保证,包括但不限于//适销性和对//特定用途适用性的暗示保证。 在任何情况下、版权 //所有者或贡献者都不对任何直接、间接、偶然、 //特殊、模范、 或相应的损害(包括但不 限于采购替代产品或服务;丧失使用、 //数据或利润; 或业务中断)、无论 出于何种原因使用 本软件(即使被告知可能会造成此类损坏)、还是出于任何原因而产生的任何//责任理论(无论是合同、严格责任还是侵权行为)//(包括疏忽或其他)。 //$ //######################################################################################################################## // //包含的文件 // #include "driverlib.h" #include "device.h" // //循环运行的次数(如果需要增加次数) // uint16_t loop_count = 100; // 函数原型 // void initSPI (void); // Main // void main (void) { uint16_t sData = 0; //发送数据 uint16_t RDATA = 0; //接收数据 // //初始化设备时钟和外设 // device_init(); // //禁用引脚锁定并启用内部上拉。 // DEVICE_initGPIO(); GPIO_setPadConfig (40、GPIO_PIN_TYPE_PULLUP); //启用 GPIO13上的上拉 GPIO_setPinConfig (GPIO_40_GPIO40); // GPIO13 = GPIO13 GPIO_setDirectionMode (40、GPIO_DIR_MODE_IN); // GPIO13 =输入 GPIO_setPadConfig (41、GPIO_PIN_TYPE_PULLUP);//在 GPIO11上启用上拉 //GPIO_writePin (11、0); //负载输出锁存 GPIO_setPinConfig (GPIO_41_GPIO41); // GPIO11 = GPIO11 GPIO_setDirectionMode (41、GPIO_DIR_MODE_OUT);// GPIO11 =输出 GPIO_writePin (41、0);//主机准备好接收 while (GPIO_readPin (40)= 1){} GPIO_writePin (41、1); GPIO_setPadConfig (16、GPIO_PIN_TYPLE_PULLUP);// GPIO16上的上拉(SPISIMOA) GPIO_setPadConfig (17、GPIO_PIN_TYPLE_PULLUP);// GPIO17上的上拉(SPIS0MIA) GPIO_setPadConfig (18、GPIO_PIN_TYPLE_PULLUP);// GPIO18上的上拉(SPICLKA) GPIO_setPadConfig (19、GPIO_PIN_TYPLE_PULLUP);// GPIO19上的上拉(SPISTEA) GPIO_setQualificationMode (16、GPIO_QUAL_异 步);//异步输入 GPIO_setQualificationMode (17、GPIO_QUAL_异 步);//异步输入 GPIO_setQualificationMode (18、GPIO_QUAL_异 步);//异步输入 GPIO_setQualificationMode (19、GPIO_QUAL_异 步);//异步输入 GPIO_setPinConfig (GPIO_16_SPISIMOA); // GPIO16 = SPISIMOA GPIO_setPinConfig (GPIO_17_SPISOMIA); // GPIO17 = SPIS0MIA GPIO_setPinConfig (GPIO_18_SPICLKA); // GPIO18 = SPICLKA GPIO_setPinConfig (GPIO_19_SPISTEA); // GPIO19 = SPISTEA // //初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。 // interrupt_initModule(); // //使用指向 shell 中断的指针初始化 PIE 矢量表 //服务例程(ISR)。 // interrupt_initVectorTable(); // //设置 SPI,将其初始化为 FIFO 模式 // initspi(); GPIO_writePin (41、1); // //启用全局中断(INTM)和实时中断(DBGM) // EINT; ERTM; // //永久循环。 暂停或放置断点以观察缓冲区。 // while (1) { //发送数据 SPI_writeDataNonBlocking (SPIA_BASE、sData); //阻止直到数据被接收并返回 RDATA = SPI_READDataBlockingNonFIFO (SPIA_BASE); //根据已发送的数据检查已接收的数据 /* if (RDATA!= sData) { //出现错误。 RDATA 不包含预期数据。 Example_Fail = 1; ESTOP0; } * sData++; Example_PassCount++; } } // ////功能,用于配置 FIFO 模式中的 SPI A。 // void initspi() { // //必须在配置 SPI 之前将其复位 // SPI_disableModule (SPIA_BASE); // // SPI 配置。 使用1MHz SPICLK 和16位字大小。 // SPI_setConfig (SPIA_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA0、 SPI_MODE_MASTER、1000000、16); //SPI_enableLoopback (SPIA_BASE); SPI_setEmulationMode (SPIA_BASE、SPI_emulation_stop_after_transmit); // //配置完成。 启用模块。 // SPI_enableModule (SPIA_BASE); }

     

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

    如果您的代码卡在 SPI_readDataBlockingNonFIFO 函数中、则意味着 F28379D SPI (主器件)尚未从 CC3220sf SPI (从器件)接收任何内容。 CC3220sf SPI (从器件)可能无法识别您从 F28379D SPI 发送的命令。

    此致、

    曼诺伊

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

    感谢您的回复、从器件(CC3220sf)卡在 DMA 函数中。 我已为此添加了屏幕截图。 我不知道如何解决它。 我为这个问题挣扎了好几个小时。 任何解决方案都将是我的一大推动力。  

    谢谢你。

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

    瓦伦

    我已将您的主题移至 CC3220sf 组织。 该团队的一些成员应响应您对 DMA 错误函数的查询。

    此致、

    曼诺伊

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

    嗨、Manoj、

    我仍然没有听到任何人关于 DMA 错误的反馈。  

    谢谢。

    瓦伦

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

    尊敬的 Varun:

    您最终进入 dmaErrorFxn 的典型原因是将指针传递到无效地址、或在前一个传输完成之前调用新的传输。 是否可以验证 adcValue? 您似乎是将其直接分配给缓冲区。

    此致、

    Sarah

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

    您好、Sarah、

    我尝试通过 SPI 传输 adcvalue。 因此、我将其分配给了 slaveTx 缓冲器。 我还应该怎么做?  

    谢谢你

    此致

    瓦伦

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

    尊敬的 Varun:

    SPI_transfer 需要一个数组、如原始的 spislave 示例中所示:

    unsigned char slaveTxBuffer[SPI_MSG_length]; 

    您需要将 adcValue 的内容复制到此数组中。

    此致、

    Sarah

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

    您好、Sarah、  

    感谢你的帮助。 我根据您的建议进行了更改、数据似乎从主器件(TMS320F28379D)流向从器件(CC3220SF)、但并非从另一个方向流动。 此外、我在从器件上从主器件接收到的数据似乎不正确、无法理解问题所在。  

    你可以帮帮我吗?

    谢谢。

    此致

    Varunkumar

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

    您好 Varunkumar、

    您现在如何将数据复制到传输缓冲区中?

    您能否尝试使用两个 CC3220 LaunchPad 从基本 SPI_SLAVE 和 SPI_MASTER 示例开始? 在使用 TMS320进行调试之前、您可以将 ADC 实现添加到 SDK 示例中并来回发送数据以验证您是否具有正确的格式: http://dev.ti.com/tirex/explore/node?node=AJSfuJZZeSex2TkSjqSCnA__fc2e6sr__LATEST

    此致、

    Sarah