主题中讨论的其他器件: 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)
或者它们是另一种实现该目的的方法
此致
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.
工具/软件: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 您好,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]);
}