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.

[参考译文] CCS/TMS570LS1224:TMS570LS1224:SPI

Guru**** 2524550 points
Other Parts Discussed in Thread: TMS570LS1224, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/844559/ccs-tms570ls1224-tms570ls1224-spi

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

工具/软件:Code Composer Studio

     如数据表中所述、将 L3GD20H 传感器配置为 SPI 接口、CS 必须为低电平(1:I2C 模式;0:SPI 启用)

I 已将 L3GD20H 的 CS 连接到引脚 J9.3 (MIBSPI1NCS[0])将  CS 配置为低电平是正确的(从 SPI1中选择 SPI1端口 启用 SCS[0]和 DOUT =0的 DIR)

或者它们是另一种实现该目的的方法

此致

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

    您好!

    您与 J9.3的连接是正确的。
    在端口选项卡中,只需设置您未用作 GIO (不起作用)的所有引脚,并将所有引脚用作起作用的引脚。 DOUT 和 DIR 复选框仅在引脚设置为 GIO 且不必为引脚设置为正常工作时有效。 当引脚被设定为起作用时、I/O 方向由 SPIGCR 中的 CLKMOD 位确定。 换句话说、 当 TMS570LS1224被设定为主器件时、CS 被输出。 默认情况下、CS 为低电平有效。 默认 CS 状态由 SPIDEF 寄存器控制。

    根据 L3GD20H 数据表:

    " CS 是串行端口使能端、由 SPI 主器件控制。 它在传输开始时变为低电平、在传输结束时返回高电平 SPC 是串行端口时钟、由 SPI 主器件控制。 当 CS 为高电平时(无传输)、它将停止高电平。 "

    所有这些都由 TMS570LS1224中的 SPI 模块处理。

    有关 SPI 模块的详细说明、请参阅 TMS570LS1224 TRM 的第28章

    在 HALCoGen 中的 examples 文件夹和 Help -> Help topics->examples 中有一个使用 SPI 模块的示例。

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

    您好、Miro、

    我的 halcogen 配置 启用 了 SPI1驱动  器、检查时钟极性(0)和时钟相位(1)、SPI 频率为10MHz。 (波特率设置为10MHz),在 SPI1端口 I 中,将每个(SIMO[0]、SOMI[0]、CLK 和 (SCS[0])启用为 SPI,而将其他设置为 GIO  ),然后我  生成了代码

    在 CCS 中、我编写了以下代码  

    #include "sys_common.h"
    
    /*用户代码开始(1)*/
    #include "spi.h"
    //*用户代码结束*/
    
    /**@fn void main (void)
    *@简短应用程序主函数
    *@注意默认情况下,此函数为空。
    *
    *此函数在启动后调用。
    *用户可以使用此函数来实现应用程序。
    */
    
    *用户代码开始(2)*/
    uint16 TX_Data_Master[16]={0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、0x00、0x00、 0x00};
    uint16 RX_Data_Master[16]={0x00、0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、0x00、0x00、 0x00、0x00、0x00、0x00、0x00、 0x00};
    //用户代码结束*/
    
    void main (void)
    {
    //用户代码开始(3)*/
    spiDAT1_t 数据通信 fig1_t;
    sint16 x、y、z=0;
    
    dataconfig1_t.CS_hold = true;
    dataconfig1_t.WDEL = true;
    dataconfig1_t.DFSEL = SPI_FMT_0;
    dataconfig1_t.CSNR = 0xFE;
    
    
    spiInit();
    
    while (1)
    {
    TX_Data_Master[0]= 0x80; //读取
    TX_Data_Master[0]= 0xD7; //世卫 组织_am_1
    TransmitAndReceiveData (spiREG1、&dataconfig1_t、2、TX_Data_Master、RX_Data_Master);
    printf ("设备 ID =%x\r\n"、RX_Data_Master[1]);
    
    
    TX_Data_Master[0]= 0x20;
    TX_Data_Master[1]= 0x6f;
    TransmitAndReceiveData (spiREG1、&dataconfig1_t、2、TX_Data_Master、RX_Data_Master);
    
    
    TX_Data_Master[0]= 0x80 | 0x40 | 0x28;
    TransmitAndReceiveData (spiREG1、&dataconfig1_t、16、TX_Data_Master、RX_Data_Master);
    
    X =(SINT8) RX_Data_Master[2]<< 8 |(SINT8) RX_Data_Master[1];
    Y =(sint8) RX_Data_Master[4]<< 8 |(sint8) RX_Data_Master[3];
    Z =(sint8) RX_Data_Master[6]<< 8 |(sint8) RX_Data_Master[5];
    
    printf ("x =%d、y =%d、z =%d\r\n"、x、y、z);
    
    }
    /*用户代码结束*/
    }
    

    我收到 了任何帮助、我不知道我的错误是什么  

    这是 L3G 数据表 (https://www.pololu.com/file/0J731/L3GD20H.pdf)

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

    您好!

    由于我不熟悉此传感器、我的评论中不能很具体。 您可能应该尝试访问传感器制造商论坛。

    根据传感器数据表、世卫组织_AM_I 寄存器地址为0x0F。 从用于读取的时序图中、我可以看到第一个字节的位7定义了是必须执行读取还是写入操作。 在您的情况下,这应该是读取操作(位7应该为1)。 因为您只需读取一个寄存器的 M/S 位(位6)应该为0。 以下位5-0定义了寄存器地址。 因此、如果要读取 WAND_AM_I 寄存器、要发送的第一个字节应为0x8F。 在您的代码中、您发送了 D7、该 D7应该是从传感器读取的 ID。

    我不知道您为什么要分配这些值(我认为您应该删除第一行并将第二行中的0xD7更改为0x8F):

            TX_Data_Master[0] = 0x80 ;        //read
            TX_Data_Master[0] =0xD7;        //WHO_AM_1
    如果您的接线正常且数据从 MCU 传出、这应该足以读取 ID。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Miro,

    感谢您的帮助、如您所述、我更改了代码如下、但仍然收到0xFFFF

    while (1)
    {
    
    TX_Data_Master[0]= 0x8F;//Who_am_1
    spiTransmitReceivedData (spiREG1、&dataconfig1_t、2、TX_Data_Master、 RX_Data_Master);
    printf ("设备 ID =%x\r\n"、RX_Data_Master[1]);
    
    }