Thread 中讨论的其他器件:SysConfig
您好、先生、
IAM 使用 SysConfig 在简单 外设中将 SPI 配置为主器件、在简单中央代码中将 SPI 配置为从器件。 要将其配置为主器件或从器件、需要执行哪些相关更改?
提供了一些枚举、例如 SPImode 和 SPI 帧格式等、我们是否应该使用这些枚举来编写命令、以便将 SPI 配置为从器件还是主器件?
谢谢、此致
Anushka
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.
您好、先生、
IAM 使用 SysConfig 在简单 外设中将 SPI 配置为主器件、在简单中央代码中将 SPI 配置为从器件。 要将其配置为主器件或从器件、需要执行哪些相关更改?
提供了一些枚举、例如 SPImode 和 SPI 帧格式等、我们是否应该使用这些枚举来编写命令、以便将 SPI 配置为从器件还是主器件?
谢谢、此致
Anushka
你好,Anushka
我建议在此处查看 SPI 上的 API 参考。 它将向您展示您需要编写的代码。
其他所有内容都应在 SysConfig 中配置。 还可以考虑查看 drivers 文件夹中的示例。
最棒的
不需要
您好、先生、
我尝试更改默认参数、例如 MODE = SPI_SLAVE 和 SPI_MASTER。 我希望在一个项目中将模式设置为 SPISLAVE、在其他项目中将模式设置为 SPIMASTER、但当我进行更改时、它会重定向到 SPI.h 文件。 在一个工程中所做的更改会在另一个工程中反映出来、也就是说、如果将 MODE 选为 SPI_SLAVE、则会在两个工程中更新该模式、因为这两个工程无法将一个工程配置为从工程、将另一个配置为主工程。
这是因为 SDK 中的 SPI.h 路径相同。
请帮我解决这个问题吗?
您好!
IAM 使用建议的第一种方法(在操作驾驶员时更改参数)。
在将 SPI 作为从器件进行操作之前、SDK 中提供的 SLISLAVE 项目中的从器件缓冲区中生成了一个消息副本。 IAM 尝试执行相同操作(将数据从主缓冲区复制到从缓冲区(接收缓冲区))。
但它抛出错误: 错误:符号"strncpy"重新声明为不兼容的类型:
"unsigned char *(unsigned char * restrict、const unsigned char * restrict、
size_t)"
实现的片段如下所示:
spiParams.frameFormat = SPI_POL0_PHA0;
spiParams.mode = SPI_SLAVE;
spiParams.transferCallbackFxn =空;
spiParams.transferMode = SPI_MODE_BLOCKING;
spiParams.bitrate = 1000000;
//SPI = SPI_open (CONFIG_SPI_SLAVE、&spiParams);
spiParams.dataSize = 8;// 8位数据大小
SPI = SPI_open (CONFIG_SPI_0、&spiParams);
if (SPI == NULL){
while (1);// spi_open()失败
}
//填入 transmitBuffer
strncpy ((char *) receiveBuffer、(char *) transmitBuffer、MSGSIZE);
spiTransaction.count = MSGSIZE;
spiTransaction.txBuf =(void *) transmitBuffer;
spiTransaction.rxBuf =(void *) receiveBuffer;
transferOK = SPI_transfer (SPI、&spiTransaction);
此外、我尝试输入 display 语句并查看代码流。 它似乎进入 SPI_TRANSFIT、但不会返回。
请帮助我解决此问题。
Anushka、您好、我特别喜欢以下几点:
1.为什么要将发送缓冲区复制到接收缓冲区? 这就是您发布的代码尝试执行的操作。
2.我认为问题可能是您的传输缓冲区未声明为 const char *、而可能声明为 char *、从而导致错误消息。 您可以将其转换为 char *、但随后仍将传输缓冲区复制到接收缓冲区、这不一定很有意义。
3.我看不到您在何处设置 transmitBuffer 的值。 如果这只是一个空指针、那么它将被复制到 receiveBuffer 中、并且 RxBuf/TxBuf 也都为空。
您好、先生、
但在这种情况下、我应该得到 NULL 传输缓冲区和接收缓冲区中的值、作为 NULL 传输传输。 但我会得到一些恒定的垃圾值(558842129)。
在从器件配置中,当我浏览数据表时,发现我们需要使用 AUX_IO 寄存器配置 CS 引脚。 如果我使用第一种方法(在操作驱动程序之前更改参数),是否有必要执行此操作?
此外、当 iam 在 TX 缓存中发送某些消息时、如 SDK 中的 spislave 代码所示、传输状态似乎始终为 false。 这是因为 SysConfig 中存在任何配置问题、还是这是代码问题?
spiParams.frameFormat = SPI_POL0_PHA1;
spiParams.mode = SPI_SLAVE;
spiParams.transferCallbackFxn = transferCompleteFxn;
spiParams.transferMode = SPI_MODE_CALLACK;
spiParams.bitrate = 4000000;
//SPI = SPI_open (CONFIG_SPI_SLAVE、&spiParams);
spiParams.dataSize = 8;// 8位数据大小
SPI = SPI_open (CONFIG_SPI_0、&spiParams);
if (SPI == NULL){
while (1);// spi_open()失败
}
//填入 transmitBuffer
strncpy ((char *) transmitBuffer、slave_MSG、MSGSIZE);
对于(int i = 0;i < loop;i++){
/*初始化从属 SPI 事务结构*/
transmitBuffer[sizeof (slave_MSG)- 1]=(I % 10)+'0';
memset ((void *) transmitBuffer、0、MSGSIZE);
spiTransaction.count = MSGSIZE;
spiTransaction.txBuf =(void *) transmitBuffer;
spiTransaction.rxBuf =(void *) receiveBuffer;
}
// spiTransaction.count = MSGSIZE;
// spiTransaction.txBuf =(void *) transmitBuffer;
// spiTransaction.rxBuf =(void *) receiveBuffer;
transferOK = SPI_transfer (SPI、&spiTransaction);
if (transferOK){
display_printf (dispHandle、sc_row_separator_1、0、"transfer ok===== %s"、spiTransaction.txBuf);
// Display_printf (dispHandle、sc_row_separator_2、0、"rxbuf===== %d"、spiTransaction.rxBuf);
// SPI 中出现错误或传输已在进行中。
// while (1);
}
如果(transferStatus == false)
{
display_printf (dispHandle、sc_row_separator_2、0、"fals=== %s"、spiTransaction.txBuf);
}
其他
{
display_printf (dispHandle、sc_row_separator_1、0、"从器件接收:%s"、spiTransaction。rxBuf);
}
}
此垃圾值听起来像是空指针的剩余值。 您似乎没有为该指针分配任何内容、因此我无法准确预测您尝试读取其值时会发生什么情况。
[引用 userid="496222" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1033395/cc2652r-cc2652r1/3825780 #3825780]1. 在从器件配置中,当我浏览数据表时,发现我们需要使用 AUX_IO 寄存器配置 CS 引脚。 如果我使用第一种方法(在使用驱动程序之前更改参数)、是否有必要执行此操作?这应该在 SysConfig 中进行配置。
[引用 userid="496222" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1033395/cc2652r-cc2652r1/3825780 #3825780"]2. 此外、当 iAM 在 TX 缓存中发送某些消息时、如 SDK 中的 spislave 代码所示、传输状态似乎始终为 false。 这是因为 SysConfig 中存在任何配置问题还是因为代码问题?[/quot]您尚未显示为该变量设置值的位置、因此我不知道它为什么会为您显示为 false。 在 SysConfig 中找不到该选项。