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/EK-TM4C1294XL:TI-RTOS/EK-TM4C1294XL &spilopopback

Guru**** 2535150 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/873169/ccs-ek-tm4c1294xl-ti-rtos-ek-tm4c1294xl-spiloopback

器件型号:EK-TM4C1294XL

工具/软件:Code Composer Studio

您好!
感谢 E2E 社区、我有很多初学者知识。 首先、感谢您的参与。
我对 我以前创建的主题有新的问题、但我无法向该主题发送消息。
https://e2e.ti.com/support/microcontrollers/other/f/908/t/845768?tisearch=e2e-sitesearch&keymatch=%20user%3A423814

我在 TivaWare 2.1.4.178中完成了我的研究、但我认为如果使用 RTOS 会更好。 我回到开头、再次查看 RTOS - spilopback。
我想重复接收和发送消息、我不能使用"while (1){}"。
在 RTOS 上发送和接收消息需要做什么?

/* XDCtools 头文件*/
#include 
#include 

/* BIOS 头文件*/
#include 
#include 

/* TI-RTOS 头文件*/
#include 
#include 

/*示例/板头文件*/
#include "Board.h"

#define SPI_MSG_LENGTH 26

#define TASKSTACKSIZE 768

//在存储器的.dma 段中为协谈器件分配缓冲区*/
#ifdef Mware
#pragma DATA_SECTION (masterRxBuffer、".dma");
#pragma DATA_SECTION (masterTxBuffer、".dma");
#pragma DATA_SECTION (slaveRxBuffer、 ".dma");
#pragma DATA_SECTION (slaveTxBuffer、".dma");
#endif

Task_Stask0Struct, 1Struct;
char task0stack[TASKSTACKSIZE]、task1stack[TASKSTACKSIZE];

无符号 char masterRxBuffer[SPI_MSG_length];
无符号 char master暂 存器[SPI_CHG_LENG]="Hello、这是主 SPI";/25

无符号 char slaveRxBuffer[SPI_MSG_length];=
"SPI=24*、这是无符号的 SPI="HELIT_SCHELESH="*
slaveTaskFxn ===
*从任务的任务函数。
*
此任务以更高的优先级运行、因为从
设备*必须为主设备做好准备。 从器件 SPI 向
主器件发送一条*消息、并从
*主器件接收消息。
此函数的任务是静态创建的*。 请参阅工程的.cfg 文件。
//
空 slaveTaskFxn (UArg0、UArgarg1)
{
SPI_Handle slaveSpi;
SPI_Params slaveSpiParams;
SPI_Transaction slaveTransaction;
bool transferOK;

/*使用从模式初始化 SPI 句柄*/
SPI_Params_init (&slaveSpiParams);
slaveSpiParams.mode = SPI_SLAVE;
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;
bool transferOK;

/*将 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);
}

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

    尊敬的 Riza:

    任务通常具有一个" while (flag)"类型的程序流(当发生不良情况时、FLAG 被设定为0)。 任务通常意味着要长时间停留。 查看 TI-RTOS 中用于 TivaC 的驱动程序示例、您将看到该模式重复出现。

    Todd