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.

[参考译文] LAUNCHXL-F28379D:f28379d

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1040611/launchxl-f28379d-f28379d

器件型号:LAUNCHXL-F28379D
主题中讨论的其他器件:C2000WARE

我大家 都对 F28379D 上主模式和从模式的 SPI 有疑问。

我已经开始面临  F28379D 上的 SPIA RXBuffer 问题。

我无法接收数据。

任何人都可以帮助解决问题。  

/*
* main.c
*
*创建日期:2021年9月28日
*作者:Devilal
*

#include
#include
#include
#include
#include "F28x_Project.h"
#include "F2837xD_DEVICE.h"
#include "F2837xD_examples.h"

#include "device.h"
#include "driverlib.h"
#define empty_loop
#define buffer_size 128

void configGPIO (void);
void initSPIBMaster (void);
void initSPIASlave (void);


_interrupt void spibTxFIFOISR (void);
_interrupt void spiaRxFIFOISR (void);

void SPI_TX_Byte (uint16_t a);
void SPI_TX_Strg_a (char * tx_str、uint16_t size);
void SPI_TX_Strg_B (char * tx_str、uint16_t size);

void 错误(void);
uint16_t sdata = 0;
char data[]="Enter Data\r\n";

uint16_t RDATA[15];//接收数据缓冲器
uint16_t rDataPoint = 0;

char rdataA[buffer_size];//针对 SCI-A 接收到的数据
uint16 RDATA_pointA;//用于检查接收到的数据
void main (void)

device_init();
DEVICE_initGPIO();
interrupt_initModule();//初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。
interrupt_initVectorTable();//使用指向 shell 中断服务例程(ISR)的指针初始化 PIE 矢量表。

IER = 0x0000;
IFR = 0x0000;


interrupt_register (INT_SPIB_TX、&spibTxFIFOISR);
interrupt_register (INT_SPIA_RX、&spiaRxFIFOISR);

//为外部回送配置 GPIO。
configGPIOs();
//将 SPI B 设置为主器件,将其初始化为 FIFO 模式
initSPIBMaster();

//将 SPI A 设置为从器件,将其初始化为 FIFO 模式
initSPIASlave();

//启用此示例所需的中断
INTERRUPT_ENABLE (INT_SPIA_RX);
INTERRUPT_ENABLE (INT_SPIB_TX);

INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group9);
//启用全局中断(INTM)和实时中断(DBGM)
// EINT;
// ERTM;
while (1)

asm (" NOP");
// SPI_TX_Byte (sdata);
// sdata++;
// device_delay_US (10000);

void configGPIO (void)

/*
*-外部连接:
*-GPIO58和 GPIO63 - SPI-MOSI
*-GPIO59和 GPIO64 - SPI-MISO
*-GPIO61和 GPIO65 - SPI-STE
*-GPIO60和 GPIO66 - SPI-CLK
*
*

/* SPI-A 配置*/
/* GPIO59是 SPI-MISO。 *
GPIO_setMasterCore (59、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_59_SPISOMIA);
GPIO_setPadConfig (59、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (59、GPIO_QUAL_ASYNCx);

/* GPIO58是 SPI-MOSI 时钟引脚。 *
GPIO_setMasterCore (58、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_58_SPISIMOA);
GPIO_setPadConfig (58、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (58、GPIO_QUAL_异 步);

/* GPIO61是 SPI-STEA。 *
GPIO_setMasterCore (61、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_61_SPISTEA);
GPIO_setPadConfig (61、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (61、GPIO_QUAL_ASYNCO);

/* GPIO60是 SPI-CLKA。 *
GPIO_setMasterCore (60、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_60_SPICLKA);
GPIO_setPadConfig (60、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (60、GPIO_QUAL_异 步);

/* SPI-B 配置*/
/* GPIO64是 SPI-SOMIB。 *
GPIO_setMasterCore (64、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_64_SPISOMIB);
GPIO_setPadConfig (64、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (64、GPIO_QUAL_异 步);

/* GPIO63是 SPISIMOB 时钟引脚。 *
GPIO_setMasterCore (63、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_63_SPISIMOB);
GPIO_setPadConfig (63、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (63、GPIO_QUAL_异 步);

/* GPIO65是 SPICLKB。 *
GPIO_setMasterCore (65、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_65_SPICLKB);
GPIO_setPadConfig (65、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (65、GPIO_QUAL_异 步);

/* GPIO66是 SPISTEB。 *
GPIO_setMasterCore (66、GPIO_CORE_CPU1);
GPIO_setPinConfig (GPIO_66_SPISTEB);
GPIO_setPadConfig (66、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (66、GPIO_QUAL_异 步);


空 initSPIBMaster (空)

//必须在配置 SPI 之前将其复位
SPI_disableModule (SPIB_BASE);

// SPI 配置。 使用500kHz SPICLK 和16位字大小。
SPI_setConfig (SPIB_BASE、DEVICE_LSPCLK_FREQ
、SPI_PROT_POL0PHA0 //时钟极性和相位*/
、SPI_MODE_MASTER /* Master */
50、500000 //速度250K */
,16);/* 16个数据片段*/
SPI_disableLoopback (SPIB_BASE);
SPI_setEmulationMode (SPIB_BASE、SPI_emulation_free_run);

// FIFO 和中断配置
SPI_enableFIFO (SPIB_BASE);
SPI_clearInterruptStatus (SPIB_BASE、SPI_INT_TXFF);
SPI_setFIFOInterruptLevel (SPIB_BASE、SPI_FIFO_TX10、SPI_FIFO_RX10);
SPI_enableInterrupt (SPIB_BASE、SPI_INT_TXFF);

//配置完成。 启用模块。
SPI_enableModule (SPIB_BASE);


//
//功能将 SPI A 配置为启用 FIFO 的从器件。
//
空 initSPIASlave (空)

//必须在配置 SPI 之前将其复位
SPI_disableModule (SPIA_BASE);

// SPI 配置。 使用250kHz SPICLK 和16位字大小。
SPI_setConfig (SPIA_BASE、DEVICE_LSPCLK_FREQ、SPI_PROT_POL0PHA0、
SPI_MODE_SLAVE、50000、16);
SPI_disableLoopback (SPIA_BASE);
SPI_setEmulationMode (SPIA_BASE、SPI_emulation_free_run);

// FIFO 和中断配置
SPI_enableFIFO (SPIA_BASE);
SPI_clearInterruptStatus (SPIA_BASE、SPI_INT_RXFF);
SPI_setFIFOInterruptLevel (SPIA_BASE、SPI_FIFO_TX10、SPI_FIFO_RX10);
SPI_enableInterrupt (SPIA_BASE、SPI_INT_RXFF);

//配置完成。 启用模块。
SPI_enableModule (SPIA_BASE);


//
// SPI A 发送 FIFO ISR
//
_interrupt void spibTxFIFOISR (void)

// SPI_TX_Byte (sdata);
SPI_TX_Strg_B (data、sizeof (data));
//清除中断标志并发出 ACK
SPI_clearInterruptStatus (SPIB_BASE、SPI_INT_TXFF);
INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group6);

//
// SPI B 接收 FIFO ISR
//
_interrupt void spiaRxFIFOISR (void)


while (SpiaRegs.SPIFFRX.bit.RXFFST!= 0)

RDATA[rDataPoint]= SpiaRegs.SPIRXBUF;
rDataPoint++;

rDataPoint =0;
//清除中断标志并发出 ACK
SPI_clearInterruptStatus (SPIA_BASE、SPI_INT_RXFF);
INTERRUPT_clearACKGROUP (INTERRUPT_ACK_group6);

Example_PassCount++;

空错误(空)

// asm (" ESTOP0");//测试失败!!! 停下来!
适用于(;);


void SPI_TX_Byte (uint16_t a)

IF (SpiaRegs.SPIFFTX.bit.TXFFST < 16)

SpiaRegs.SPITXBUF = A;

void SPI_TX_Strg_A (char * TX_str、uint16_t 大小)

uint16_t ch;
uint16_t temp=0;
while (<size)

CH =* Tx_str;
SpiaRegs.SPITXBUF=ch;
IF (SpiaRegs.SPIFFTX.bit.TXFFST < 16)
// while (SpiaRegs.SPIFFTX.bit.TXFFST < 16)

empty_loop;

TX_STR++;

void SPI_TX_Strg_B (char * TX_str、uint16_t 大小)

uint16_t ch;
uint16_t temp=0;
while (<size)

CH =* Tx_str;
SpibRegs.SPITXBUF=通道;
IF (SpibRegs.SPIFFTX.bit.TXFFST < 16)
// while (SpiaRegs.SPIFFTX.bit.TXFFST = 0)

empty_loop;

TX_STR++;

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

    您好!

    您的项目中是否包含"_LAUNCHXL_F28379D"预定义? 如果没有、您可以右键单击工程并转到属性、然后将其添加到"预定义符号"中。

    是否有方法可以对 Launchpad 上的信号进行范围控制以确保数据传输到 RX 引脚?

    此外、您能否检查是否曾经输入过 RX 中断? 标准 SPI C2000Ware 示例是否适合您、如外部环回示例?

    此致、

    Marlyn