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/CC3200:未进行 SPI 通信

Guru**** 1810550 points
Other Parts Discussed in Thread: ADS1247, CC3200, ADS1248
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/759083/ccs-cc3200-spi-communication-is-not-happening

器件型号:CC3200
主题中讨论的其他器件:ADS1247ADS1248

工具/软件:Code Composer Studio

你(们)好

我 正在使用 SPI 通信将 cc3200与 ADS1247相连。问题是我无法获取数据。我在示波器中检查了 SCLK 引脚不工作、这意味着 clk 脉冲不会出现、而是作为一条直线出现。有时 SPIDataPutNonLocking funion 的返回函数也是如此 1在其他时候、它会提供0.Plz 帮助我解决问题。下面我附上了我的代码。


#include
#include "stdbool.h"
#include "stdint.h"
// Driverlib 包括
#include "hw_types.h"
#include "hw_memmap.h"
#include "hw_common_reg.h"
#include "hw_ints.h"
#include "spi.h"
#include "rom.h"
#include "rom_map.h"
#include "utils.h"
#include "prcm.h"
#include "UART.h"
#include "interrupt.h"
#include "gpio.h"
#include "pin.h"


//通用接口包括
#include "UART_IF.h"
#include "IBP.h"

#define SPI_IF_bit_rate 1000000

void spiInit();
void IbpInit();
void IBP_initialize();
void send_data (unsigned char);
void rec_data();
//void receive_data1 (int);
//bool IBP_self_test ();

void main()

unsigned char ulUserData[4]="kll";
unsigned char data4;
unsigned long pui32DataRx[2];
int i=0;
ClearTerm();
InitTerm();
MAP_PRCMPeripheralReset (PRCM_GSPI);
PinMuxConfig();
spiInit();
IbpInit();

// IBP_self_test();
消息("\t\t********* 主要***** \n\n");
MAP_UARTCharPut (UARTA0_BASE、'c');
for (i=0;i<5;i++)

MAP_UARTCharPut (UARTA0_BASE、ulUserData[i]);

消息("\t\t********* IBP 数据***** \n\n");
SEND_DATA (ADS1248_CMD_ID);
SEND_DATA (ADS1248_CMD_WAKEUP);
Receive_data (2);
Data4= SPIDataGetNonBlocking (GSPI_base、&(pui32DataRx[0]));
报告("%x\n"、pui32DataRx[0]);
报告("%x\n"、&pui32DataRx[0]);
报告("%x\n"data4);
MAP_SPICSDisable (GSPI_BASE);
while (1)

//消息("\t\t***** IBP 数据***** \n\n");
//receive_data1 (1);


空 IbpInit()

// PK2 =电源控制

MAP_PRCMPeripheralClkEnable (PRCM_GPIOA1、PRCM_RUN_MODE_CLK);
MAP_PinTypeGPIO (PIN_03、PIN_MODE_0、false);
MAP_GPIODirModeSet (GPIOA1_base、0x10、GPIO_DIR_MODE_OUT);

//PK4 =接地控制
MAP_PinTypeGPIO (PIN_04、PIN_MODE_0、false);
MAP_GPIODirModeSet (GPIOA1_base、0x20、GPIO_DIR_MODE_OUT);


// PN0 = SPI_EN
MAP_PRCMPeripheralClkEnable (PRCM_GPIOA0、PRCM_RUN_MODE_CLK);
MAP_PinTypeGPIO (PIN_60、PIN_MODE_0、false);
MAP_GPIODirModeSet (GPIOA0_BASE、0x20、GPIO_DIR_MODE_OUT);

// PN1 = MUX_EN
MAP_PinTypeGPIO (PIN_61、PIN_MODE_0、false);
MAP_GPIODirModeSet (GPIOA0_BASE、0x40、GPIO_DIR_MODE_OUT);
// PN2 MUX_SELA
MAP_PinTypeGPIO (PIN_62、PIN_MODE_0、false);
MAP_GPIODirModeSet (GPIOA0_BASE、0x80、GPIO_DIR_MODE_OUT);

// PN3 MUX_sELB
MAP_PinTypeGPIO (PIN_15、PIN_MODE_0、false);
MAP_GPIODirModeSet (GPIOA2_base、0x6、GPIO_DIR_MODE_OUT);


GPIOPinWrite (GPIOA1_base、GPIO_PIN_4、GPIO_PIN_4);//PK2=1
GPIOPinWrite (GPIOA1_base、GPIO_PIN_5、0);//PK4=1
GPIOPinWrite (GPIOA0_BASE、GPIO_PIN_5、GPIO_PIN_5);//PN0=1
GPIOPinWrite (GPIOA0_BASE、GPIO_PIN_6、GPIO_PIN_6);//PN1=1
GPIOPinWrite (GPIOA0_BASE、GPIO_PIN_7、0);//PN2=0 //多路复用器 SEP-A
GPIOPinWrite (GPIOA2_base、GPIO_PIN_6、0);//PN3=1 //多路复用器 SEP-b

/* MAP_PRCMPeripheralClkEnable (PRCM_GPIOA2、PRCM_RUN_MODE_CLK);
MAP_PinTypeGPIO (PIN_08、PIN_MODE_0、false);
MAP_GPIODirModeSet (GPIOA2_base、0x2、GPIO_DIR_MODE_OUT);

GPIOPinWrite (GPIOA2_base、GPIO_PIN_1、0);*/


MAP_UtilsDelay (100000);//1ms
IBP_Initialize();//在 IBP.c 中
消息("\t\t***** IBPINIT ********* \n\n");

void spiInit()

MAP_PRCMPeripheralClkEnable (PRCM_GSPI、PRCM_RUN_MODE_CLK);

//为 SPI0 GSPI_CLK 配置 PIN_05
//
MAP_PinTypeSPI (PIN_05、PIN_MODE_7);

//
//为 SPI0 GSPI_MISO 配置 PIN_06
//
MAP_PinTypeSPI (PIN_06、PIN_MODE_7);

//
//为 SPI0 GSPI_MOSI 配置 PIN_07
//
MAP_PinTypeSPI (PIN_07、PIN_MODE_7);

//
//为 SPI0 GSPI_CS 配置 PIN_08
//
MAP_PinTypeSPI (PIN_08、PIN_MODE_7);

SPIReset (GSPI_base);


//配置 SPI 接口
//
MAP_SPIConfigSetExpClk (GSPI_base、MAP_PRCMPeripheralClockGet (PRCM_GSPI)、
SPI_IF_bit_rate、SPI_MODE_MASTER、SPI_SUB_MODE_1、
(SPI_SW_CTRL_CS |
SPI_4PIN_MODE |
SPI_Turbo_off |
SPI_CS_ACTIVEHIGH |
SPI_WL_8));

消息("\t\t********* SPIINIT***** \n\n");

//启用 SPI 进行通信
//
MAP_SPIEnable (GSPI_BASE);
MAP_SPICSEnable (GSPI_BASE);


/*********
*函数:IBP_Initialize()
*
*说明:此函数在调度函数和之前从 Main.c 中调用
*进行自检。 这在初始化 IBP 板(复用、速度等)后调用
*这用于初始化 IBP 板操作所需的 ADC 寄存器
并执行内部 ADC 校准。
*
*参数:空
*
*返回:null
*
*可重入性:否
*
*执行要求/假设:空
*
(小部分 /

void IBP_Initialize()

unsigned long pui32DataRx[NUM_SSI_DATA];
while (SPIDataGetNonBlocking (GSPI_base、&pui32DataRx[0]))

//SysCtlDelay (650000);//= 17ms。
//SysCtlDelay (50000);
MAP_UtilsDelay (650000);
MAP_UtilsDelay (50000);
SEND_DATA (ADS1248_CMD_RESET);
//SysCtlDelay (50000);
MAP_UtilsDelay (50000);
消息("\t\t********* IBP A***** \n\n");
SEND_DATA (ADS1248_CMD_SDATAC);
SEND_DATA (ADS1248_CMD_SELFOCAL);
Receive_data (1);
//SysCtlDelay (6500000);//17ms
MAP_UtilsDelay (6500000);

SEND_DATA (ADS1248_CMD_WREG);//40h
SEND_DATA (ADS1248_3_SYS0);//03h
SEND_DATA (ADS1248_1_VBIAS);//01h
SEND_DATA (ADS1248_0_MUX0);//00h
SEND_DATA (ADS1248_2_MUX1);//03h
//SEND_DATA (ADS1248_14_GAIN);//42h ADS1248_14_SPS
SEND_DATA (ADS1248_15_SPS);//从5sps (以上)到1000sps 进行设置。 当前设置为160 (或某值) SPS。

Receive_data (8);

SEND_DATA (ADS1248_CMD_RREG);//20h
SEND_DATA (ADS1248_3_SYS0);//03h
Receive_data (2);
SEND_DATA (ADS1248_CMD_NOP);
Receive_data (1);
SEND_DATA (ADS1248_CMD_NOP);
Receive_data (1);
SEND_DATA (ADS1248_CMD_NOP);
Receive_data (1);
SEND_DATA (ADS1248_CMD_NOP);
Receive_data (1);

SEND_DATA (ADS1248_CMD_SYSGCAL);
Receive_data (1);
//SysCtlDelay (6500000);//17ms
MAP_UtilsDelay (650000);

//14 ---- 使用 WREG 命令(40h、03h、01h、00h、03h 和42h)写入相应的寄存器配置; --37页数据表
SEND_DATA (ADS1248_CMD_WREG);//40h
SEND_DATA (ADS1248_3_SYS0);//03h
SEND_DATA (ADS1248_1_VBIAS);//01h
SEND_DATA (ADS1248_0_MUX0);//00h
SEND_DATA (ADS1248_0_MUX0);//03h
SEND_DATA (ADS1248_15_SPS);//42h

Receive_data (6);

SEND_DATA (ADS1248_CMD_RREG);//20h
SEND_DATA (ADS1248_3_SYS0);
Receive_data (2);


SEND_DATA (ADS1248_CMD_NOP);
Receive_data (1);
SEND_DATA (ADS1248_CMD_NOP);
Receive_data (1);
SEND_DATA (ADS1248_CMD_NOP);
Receive_data (1);
SEND_DATA (ADS1248_CMD_NOP);
Receive_data (1);

SEND_DATA (ADS1248_CMD_SYNC);//05h
SEND_DATA (ADS1248_CMD_SYNC);//05h--- ////因为我们必须提供两次 SYNC 命令--pg 38
Receive_data (2);
//SysCtlDelay (650000);
MAP_UtilsDelay (650000);
消息("\t\t********* 上次 IBP 初始化***** \n\n");

void send_data (无符号字符字节)

unsigned char 数据;
DATA=SPIDataPutNonBlocking (GSPI_base、Byte);
报告("\t\t\Tsend data=%d\n", data);


void receive_data (int n)

unsigned long rec=0;
unsigned char data=0;
DATA=SPIDataGetNonBlocking (GSPI_base、&rec);
报告("\t\trec1=%d\n\r\n"、rec);

报告("\t\t\t rec=%d\n", data);


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

    我看到您配置了引脚并配置了 SPI 时钟,因此假设正确,我会说唯一缺少的是板初始化,您可以通过调用 BoardInit()来执行此操作。 我们的 CC3200 SDK 具有一个简单的 SPI_DEMO、可为您提供所有设置、因此您不必实施自己的初始化函数。 您可以在 SDK 根目录的示例文件夹中找到 SPI_DEMO 示例。 即使您不想在项目中使用该示例、它也至少是一个很好的参考、可帮助您了解如何设置 SPI 外设。

    Jesu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很高兴我能帮忙-关闭线程。

    Jesu