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.

[参考译文] TMS470MF06607:SPI 接收功能

Guru**** 2462870 points
Other Parts Discussed in Thread: TMS470MF06607, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/654922/tms470mf06607-spi-receive-function

器件型号:TMS470MF06607
主题中讨论的其他器件: HALCOGEN

您好!

我使用的是 TMS470mf06607微控制器。

我想在微控制器中开发 SPI 通信。

我使用示例代码开发了用于传输数据的代码。

我也在 Halcogen 代码发生器中启用了 Tx 中断。

我知道要使用以下函数从另一个器件接收数据。        ( uint32 spiGetData (spiBASE-t * SPI、uint32组、uint16 * data);  )

但是、能否有人建议我在何处以及如何使用此函数? 我不知道只想在 main 函数中或在 notification.c  中使用。

任何一个都建议我如何通过 SPI 接收数据。

谢谢、此致

Arun Kumar.N  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可以将呼叫置于任何一个位置。 如果主函数不可能在接收 FIFO 满之前读取数据、则应从中断例程(notification.c)中读取数据并进行缓冲。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、先生、

    我正在尝试在主函数本身中使用该接收函数。 但未接收到数据。
    我尝试从另一个微控制器传输数据。
    我将主函数放在下面。 如有任何建议,请告诉我。
    我还启用了来自 halcogen 的 TX 中断。
    在通知文件中、它仅在 case0中始终为真。


    计划:
    #include "sys_common.h"
    #include "system.h"
    #include "spi.h"

    uint32_t tg3_is 完整;

    uint16 TG0_TX_DATA[8]={11、22、44、33、55、66、797、1};
    uint16 TG0_RX_DATA[8]={0};

    UINT16 TG1_TX_DATA[8]={0x2000、0x2111、0x2222、0x2333、0x2444、 0x2555、0x2666、0x2777};
    uint16 TG1_RX_DATA[8]={0};

    UINT16 TG2_TX_DATA[8]={0x3000、0x3111、0x3222、0x3333、0x3444、 0x3555、0x3666、0x3777};
    uint16 TG2_RX_DATA[8]={0};

    uint16 tg3_TX_DATA[8]={0x4000、0x4111、0x4222、0x4333、0x4444、 0x4555、0x4666、0x4777};
    uint16 tg3_RX_DATA[8]={0};

    int delay_count = 0;

    void main (void)

    /*用户代码开始(3)*/

    /*通过 CPSR 启用 CPU 中断*/
    _enable_IRQ ();

    /*根据 GUI 配置初始化 SPI 模块
    * SPI1 -主器件(SIMO、SOMI、CLK、CS0)*//
    spiInit();



    /*启用到 INT 0的 TG 0、1、2、3完整中断*/
    spiEnableGroupNotification (spiREG1,0、0);
    spiEnableGroupNotification (spiREG1,1,1,0);
    spiEnableGroupNotification (spiREG1、2、0);
    spiEnableGroupNotification (spiREG1,3,0);

    /*填写转接组*/
    SetspiData (spiREG1、0、TG0_TX_DATA);


    //一旦 tickCNT 触发,启用 TG0启动*/
    while (1)

    spiTransfer (spiREG1、0);

    while (tg3_is _complete!= 0xA5A5A5);
    GetspiData (spiREG1、1、TG0_RX_DATA);




    void spiGroupNotification (spiBASE-t * SPI、UINT32组)

    /*在用户代码开始和用户代码结束之间输入用户代码。 *
    /*用户代码开始(21)*/
    交换机(组)

    情况0:
    /*启用 TG1以启动、软件触发器*/
    spiTransfer (spiREG1、0);
    中断;
    案例1:/*启用 TG1以启动,SW Trigger */
    spiTransfer (spiREG1、2);
    中断;
    案例2:/*启用 TG1以启动,SW Trigger */
    spiTransfer (spiREG1、3);
    中断;
    案例3:
    tg3_IS _COMPLETE = 0xA5A5A5A5;
    中断;
    默认值:
    while (1);
    中断;


    /*用户代码结束*/




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

    一些建议。 如果在中断例程中设置 tg3_is _complete、但在 main 中对其进行轮询、则需要将其声明为 volatile。

    volatile uint32_t tg3_is 完整;
    

    然后执行如下主 while 循环:

    while (1)
    {
    tg3_is _complete = 0;
    //一旦 tickCNT 触发,启用 TG0启动*/
    spiTransfer (spiREG1、0);
    
    while (tg3_is _complete!= 0xA5A5A5A5);//等待此处
    GetspiData (spiREG1、0、TG0_RX_DATA);
    
    }
    

    我尝试使用此代码将 SPI1SIMO 引脚短接至 SPI1SOMI 引脚、并看到 TX 数据复制到 RX 缓冲区中。