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.

[参考译文] RTOS/LAUNCHXL-CC2640R2:如何读取 SPI 数据?

Guru**** 2553440 points
Other Parts Discussed in Thread: ADS1293

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/575197/rtos-launchxl-cc2640r2-how-to-read-spi-data

器件型号:LAUNCHXL-CC2640R2
主题中讨论的其他器件:ADS1293

工具/软件:TI-RTOS

您好 TI 开发团队

我有一个问题。

开发版本:CCS 7.0

参考 Borad:CC2640R2_LAUNCHXL

SampleSource:uartecho_CC2640R2_LANCHXL

测试 SPI 板:ads1293 (在我们公司内制造)

如何读取 SPI 数据?

/*
版权所有(c) 2015-2016、德州仪器(TI)公司
*保留所有权利。
*
*
只要
符合以下条件*、允许以源代码和二进制形式重新分发和使用:
*
*源代码的重新分发必须保留上述版权
声明*、此条件列表和以下免责声明。
*
***二进制形式的再发行必须在

*随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
*
***未经

事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
*
*本软件由版权所有者和贡献者"按原样"提供
*、

不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
*贡献者都不对任何直接、间接、偶然、特殊、
*模范、 或相应的损害(包括但不限于
*采购替代产品或服务;丧失使用、数据或利润;
*或业务中断)、但出于任何责任理论
、*无论是在合同中、严格责任还是由于
使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
、*即使已获悉可能会发生此类损坏。
//

/*
=== uartecho.c ====
*/
#include 
#include 

/*驱动程序头文件*/
#include 
#include 

#include 
#include 
#include 


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


/*SPI 调用驱动程序*/
SPI_Handle spihandle;
SPI_Params Writparams;
SPI_Transaction spitransaction;
uint8_t txBuf[100]={0x00、};//传输缓冲
区 uint8_t rxBuf[100]={0x00、};




void spieByte (uint8_t *写入)
{
memcpy (txBuf、write、sizeof (write));
spi_transfer (spithandle、&spitransaction);
memset (txBuf、0x00、sizeof (txBuf));
}

void TI_ADS1293_SPIWriteReg (uint8_t addr、uint8_t value)
{
uint8_t inst[2]={0x00、0x00};
dr[0]= ADS1293_WRITE_BIT & adinst; //寄存器地址
inst[1]=值;
spiWriteByte (inst); //发送寄存器地址

}

void TI_ADS1293_SPIReadReg (uint8_t addr)
{
txBuf[0]= ADS1293_read_bit | addr; //寄存器地址
SPI_transfer (spitransaction、&spitransaction);

}

void TI_ADS1293_WriteRegSettings (void)
{

TI_ADS1293_SPIWriteReg (TI_ADS1293_CONFIG_REG、
TI_ADS1293_CONFIG_REG_VALUE);

TI_ADS1293_SPIWriteReg (TI_ADS1293_FLEX CH1_CN_REG、
TI_ADS1293_FLEX CH1_CN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_FLEX CH2_CN_REG、
TI_ADS1293_FLEX CH2_CN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_FLEX CH3_CN_REG、
TI_ADS1293_FLEX CH3_CN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_FLEX PACE_CN_REG、
TI_ADS1293_FLEX PACE_CN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_FLEX VBAT_CN_REG、
TI_ADS1293_FLEX VBAT_CN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_LOD_CN_REG、
TI_ADS1293_LOD_CN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_LOD_EN_REG、
TI_ADS1293_LOD_EN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_LOD_CURRENT_REG、
TI_ADS1293_LOD_CURRENT_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_LOD_AC_CN_REG、
TI_ADS1293_LOD_AC_CN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_CMDET_EN_REG、
TI_ADS1293_CMDET_EN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_CMDET_CN_REG、
TI_ADS1293_CMDET_CN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_RLD_CN_REG、
TI_ADS1293_RLD_CN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_Wilson_EN1_REG、
TI_ADS1293_Wilson_EN1_REG_Value);
TI_ADS1293_SPIWriteReg (TI_ADS1293_Wilson_EN2_REG、
TI_ADS1293_Wilson_EN2_REG_Value);
TI_ADS1293_SPIWriteReg (TI_ADS1293_Wilson_EN3_REG、
TI_ADS1293_Wilson_EN3_REG_Value);
TI_ADS1293_SPIWriteReg (TI_ADS1293_Wilson_CN_REG、
TI_ADS1293_Wilson_CN_REG_Value);

TI_ADS1293_SPIWriteReg (TI_ADS1293_REF_CN_REG、
TI_ADS1293_REF_CN_REG_VALUE);

TI_ADS1293_SPIWriteReg (TI_ADS1293_OSC_CN_REG、
TI_ADS1293_OSC_CN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_AFE_RES_REG、
TI_ADS1293_AFE_RES_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_AFE_SHDN_REG、
TI_ADS1293_AFE_SHDN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_AFE_FAULT_CN_REG、
TI_ADS1293_AFE_FAULT_CN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_AFE_dither_EN_REG、
TI_ADS1293_AFE_DITHER _EN_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_AFE_PACE_CN_REG、
TI_ADS1293_AFE_PACE_CN_REG_VALUE);

TI_ADS1293_SPIWriteReg (TI_ADS1293_R2_RATE_REG、
TI_ADS1293_R2_RATE REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_R3_RADE1_REG、
TI_ADS1293_R3_RADE1_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_R3_R2_REG、
TI_ADS1293_R3_Rate2_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_R3_Rate3_REG、
TI_ADS1293_R3_Rate3_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_P_DRATE_REG、
TI_ADS1293_P_DRATE_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_DIS_EFILTER_REG、
TI_ADS1293_DIS_EFILTER_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_DRDYB_SRC_REG、
TI_ADS1293_DRDYB_SRC_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_SYNCOUTB_SRC_REG、
TI_ADS1293_SYNCOUTB_SRC_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_MASK_DRDYB_REG、
TI_ADS1293_MASK_DRDYB_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_MASK_ERR_REG、
TI_ADS1293_MASK_ERR_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_ALARM_FILTER_REG、
TI_ADS1293_ALARM_FILTER_REG_VALUE);
TI_ADS1293_SPIWriteReg (TI_ADS1293_CH_Cnfg_REG、
TI_ADS1293_CH_Cnfg_REG_VALUE);

}
//
*=== mainThread ====
//



void * mainThread (void * arg0)
{
特性 输入;
特性 A ='A';
特性 b ="b";
特性 output[2]={0x00、};
const char echoPrompt[]="回显字符:\r\n";
unsigned char reg_read_data;
UART_Handle UART;
UART_Params uartParams;



//调用驱动程序初始化函数
GPIO_init();
UART_INIT();
spi_init();

//打开用户 LED
GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);



//创建一个数据处理关闭的 UART。
UART_PARAMS_INIT (uartParams);
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
uartParams.readEcho = UART_ECHO_OFF;
uartParams.baudrate = 115200;

UART = UART_OPEN (Board_UART0、uartParams);

if (UART == NULL){
//UART_open()失败
while (1);
}


UART_WRITE (UART、echoPrompt、sizeof (echoPrompt));


SPI_PARAMS_INIT (&spiparams);
//spirparams.bitrate = 204800;//102400;//204800;//4805000;//1000000;
//spiparams.frameFormat = SPI_POL0_PHA0;

spiparams.mode = SPI_MASTER;
spiparams.transferMode = SPI_MODE_BLOCKING;

//配置事务
spitransaction.count = 2;
spitransaction.txBuf = txBuf;
spitransaction.rxBuf = rxBuf;
//打开 SPI 并执行传输
spiHandle = SPI_open (Board_SPI1、&spiparams);
if (!spitHandle)(如果!spit
{
while (1);
}
TI_ADS1293_WriteRegSettings();
TI_ADS1293_SPIReadReg (TI_ADS1293_CH_Cnfg_REG);
REG_READ_DATA = rxBuf[0];
/*循环永久回显*/

while (1){
UART_READ (UART、INPUT、1);
//UART_WRITE (UART、INPUT、1);
if (输入='A')
{
UART_WRITE (UART、&A、1);
TI_ADS1293_SPIReadReg (TI_ADS1293_CH_Cnfg_REG);
}
否则、如果(输入='b')
{
UART_WRITE (UART、&b、1);
REG_READ_DATA = rxBuf[0];
output[0](reg_read_data / 16)+0x30;
output[1]=(REG_READ_DATA % 16)+0x30;
UART_WRITE (UART、&OUTPUT [0]、1);
UART_WRITE (UART、&output[1]、1);
output[0]='c';
output[1]='d';
UART_WRITE (UART、&OUTPUT [0]、1);
UART_WRITE (UART、&OUTPUT [1]、1);

}

}

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

    我无法调试您的代码、但我建议您学习 SPI 驱动程序文档和附带的示例。 有一个使用 OAD 项目的 LaunchPad 的 SPI 示例、请参阅 ExtFlash.c 中的实现 此外、使用逻辑分析仪可以帮助确定这是 MCU 还是 SPI 器件问题。

    祝你一切顺利