主题中讨论的其他器件:ADS127L01
工具/软件:Code Composer Studio
您好!
我在这里有点新。 我查看过旧帖子、但我找不到问题的答案。
我通过 Code Composer Studio 使用 EK-TM4C1294XL 版本:8.3.1.00004和 spilopback。 我还有 ADS127L01EVM。
在这些器件中、我要制作 ADC、并希望使用 EK-TM4C1294XL (SPI)进行读取、而不是将其发送到 CAN 线路。
spiloopback.h 正在处理 EK-TM4C1294XL、但我无法从 ADS127L01EVM 读取任何数据。
我的构建方式与 外部 SPI 环回示例所需的跳线连接类似。 | PD3->PQ0、PD2->PQ1、PD0->PQ2、PD1->PQ3 和 spilosopback 均可正常工作。
现在、
TM4C PQ1至 GND
ADS SCLK ->TM4C PQ0 -从器件
ADS DIN -> TM4C PQ2 -从器件
ADS DOUT -> TM4C PQ3 -从器件
ADS 输入频率为16MHz、输出(DOUT)频率约为130kHz。 它可以正常工作、我添加了示波器屏幕截图
我对该计划做了一些补充。
slaveSpiParams.transferMode = SPI_MODE_BLOCKING;//添加
slaveSpiParams.bitrate = 130000;//添加
这是我在 Code Composer 上的控制台
SPI 已初始化
SPI 已初始化
主器件:
完成
问:为什么我无法获取数据?
问:是否有更简单的示例可供您推荐?
问:此程序正在运行一次。 如果我添加一个"while loop",它能否连续工作?
谢谢你
/*===== spilopopback.c =====
//
//* XDCtools 头文件*/
#include
#include
/* BIOS 头文件*/
#include
#include
/* TI-RTOS 头文件*/
#include
#include
/*示例/板头文件*/
#include "Board.h"
#define SPI_MSG_LENGTH 30
#define TASKSTACKSIZE 768
Task_Structt task0Struct, task1Struct;
Char task0Stack[TASKSTACKSIZE],task1Stack[TASKSTACKSIZE];
unsigned char masterRxBuffer[SPI_MSG_LENG];
unsigned char masterTxBuffer[SPI_MSG_length]="Hello、这是主器件 SPI1234";
unsigned char slaveRxBuffer[SPI_MSG_length];
unsigned char slaveTxBuffer[SPI_MSG_length]="Hello、这是从器件 SPI1234";
/*=== slaveTaskFxn ===
*从任务的任务函数。
*
此任务以更高的优先级运行、因为从
设备*必须为主设备做好准备。 从器件 SPI 向
主器件发送一条*消息、并从
*主器件接收消息。
此函数的任务是静态创建的*。 请参阅工程的.cfg 文件。
//
空 slaveTaskFxn (UArg0、UArgarg1)
{
SPI_Handle slaveSpi;
SPI_Params slaveSpiParams;
SPI_Transaction slaveTransaction;
bool transferOK;
/*使用从模式初始化 SPI 句柄*/
SPI_Params_init (&slaveSpiParams);
slaveSpiParams.transferMode = SPI_MODE_BLOCKING;//eklendi
slaveSpiParams.mode = SPI_SLAVE;
slaveSpiParams.bitrate = 130000;
slaveSpi = SPI_open (Board_SPI1、&slaveSpiParams);
if (slaveSpi == NULL){
System_abort ("初始化 SPI\n"时出错);
}
否则{
system_printf ("SPI 已初始化\n");
}
/*初始化从属 SPI 事务结构*/
slaveTransaction.count = SPI_MSG_length;
slaveTransaction.txBuf =(ptr) slaveTxBuffer;
slaveTransaction.rxBuf =(ptr) slaveRxBuffer;
/*启动 SPI 传输*/
transferOK = SPI_transfer (slaveSpi、&slaveTransaction);
if (transferOK){
/*打印从机接收缓冲区的内容*/
System_printf ("从属设备:%s\n"、slaveRxBuffer);
}
否则{
System_printf ("从器件 SPI 传输失败");
}
/*取消初始化 SPI */
SPI_CLOSE (slaveSpi);
}
/*
===== masterTaskFxn ===
*主任务的任务函数。
*
*此任务在从
器件*任务之后以较低的优先级运行、以确保它已为事务做好准备。
*主器件 SPI 向从器件发送消息、并
*接收从器件发送的消息。 此函数的任务
*是静态创建的。 请参阅工程的.cfg
*文件。
//
void masterTaskFxn (UARg arg0、UARg arg1)
{
SPI_Handle masterSpi;
SPI_Transaction masterTransaction;
SPI_Params masterSpiParams;
bool transferOK;
masterSpiParams.bitrate = 130000;
/*将 SPI 句柄初始化为默认主控*/
masterSpi = SPI_open (Board_SPI0、NULL);
if (masterSpi == NULL){
System_abort ("初始化 SPI\n"时出错);
}
否则{
system_printf ("SPI 已初始化\n");
}
/*初始化主 SPI 事务结构*/
masterTransaction.count = SPI_MSG_length;
masterTransaction.txBuf =(ptr) masterTxBuffer;
masterTransaction.rxBuf =(ptr) masterRxBuffer;
/*启动 SPI 传输*/
transferOK = SPI_transfer (masterSpi、&masterTransaction);
if (transferOK){
/*打印主接收缓冲区的内容*/
System_printf ("主设备:%s\n"、masterRxBuffer);
}
否则{
System_printf ("主 SPI 传输失败");
}
/*取消初始化 SPI */
SPI_CLOSE (masterSpi);
System_printf ("done");
system_flush();
}/*
==== main ====
*/
int main (void)
{
/*构造 BIOS 对象*/
Task_Params taskParams;
/*呼叫板初始化功能。 *
Board_initGeneral();
Board_initGPIO();
Board_initSPI();
/*构造主/从任务线程*/
Task_Params_init (&taskParams);
taskParams.priority = 1;
taskParams.STACKSIZE = TASKSTACKSIZE;
taskParams.stack =_task0Stack;
Task_construct(&task0Struct,(Task_FuncPtr) masterTaskFxn、&taskParams、NULL);
taskParams.stack =_task1Stack;
taskParams.priority = 2;
Task_construct(&task1Struct,(Task_FuncPtr) slaveTaskFxn、&taskParams、NULL);
/*打开用户 LED */
GPIO_WRITE (Board_LED0、Board_LED_ON);
system_printf ("启动 SPI 环回示例\n 系统提供程序设置为"
" SYSMIN。 停止目标以查看 ROV 中的任何 SysMin 内容。\n");
/* SysMin 仅在您调用 flush 或 exit 时才会打印到控制台*/
system_flush();
system_printf ("此示例要求将外部电线连接到"
"接头引脚。 请参阅入门指南"
"详细信息。\n");
/* SysMin 仅在您调用 flush 或 exit 时才会打印到控制台*/
system_flush();
/*启动 BIOS */
BIOS_start();
返回(0);
}





