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.

如何使用TMS320F28027发送8位SPI数据



测试程序中是16位的,也就是说

 SPI_setCharLength(mySpi, SPI_CharLength_16_Bits);

我把他改成8位,

  SPI_setCharLength(mySpi, SPI_CharLength_8_Bits);

然后数据发送

SPI_write(mySpi, 0xAA);

结果什么都没有发送,为什么呢.

完整代码.

#include "DSP28x_Project.h"

#include "f2802x_common/include/adc.h"
#include "f2802x_common/include/clk.h"
#include "f2802x_common/include/flash.h"
#include "f2802x_common/include/gpio.h"
#include "f2802x_common/include/pie.h"
#include "f2802x_common/include/pll.h"
#include "f2802x_common/include/spi.h"
#include "f2802x_common/include/wdog.h"

void delay_loop(void);
void spi_xmit(uint16_t a);
void spi_fifo_init(void);
void spi_init(void);
void error(void);

ADC_Handle myAdc;
CLK_Handle myClk;
FLASH_Handle myFlash;
GPIO_Handle myGpio;
PIE_Handle myPie;
SPI_Handle mySpi;

void main(void)
{

CPU_Handle myCpu;
PLL_Handle myPll;
WDOG_Handle myWDog;

// Initialize all the handles needed for this application
myAdc = ADC_init((void *)ADC_BASE_ADDR, sizeof(ADC_Obj));
myClk = CLK_init((void *)CLK_BASE_ADDR, sizeof(CLK_Obj));
myCpu = CPU_init((void *)NULL, sizeof(CPU_Obj));
myFlash = FLASH_init((void *)FLASH_BASE_ADDR, sizeof(FLASH_Obj));
myGpio = GPIO_init((void *)GPIO_BASE_ADDR, sizeof(GPIO_Obj));
myPie = PIE_init((void *)PIE_BASE_ADDR, sizeof(PIE_Obj));
myPll = PLL_init((void *)PLL_BASE_ADDR, sizeof(PLL_Obj));
mySpi = SPI_init((void *)SPIA_BASE_ADDR, sizeof(SPI_Obj));
myWDog = WDOG_init((void *)WDOG_BASE_ADDR, sizeof(WDOG_Obj));

// 初始化
WDOG_disable(myWDog);
CLK_enableAdcClock(myClk);
(*Device_cal)();


CLK_setOscSrc(myClk, CLK_OscSrc_Internal);

PLL_setup(myPll, PLL_Multiplier_10, PLL_DivideSelect_ClkIn_by_2);

PIE_disable(myPie);
PIE_disableAllInts(myPie);
CPU_disableGlobalInts(myCpu);
CPU_clearIntFlags(myCpu);


#ifdef _FLASH
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
#endif

// Initalize GPIO
GPIO_setPullUp(myGpio, GPIO_Number_16, GPIO_PullUp_Enable);
GPIO_setPullUp(myGpio, GPIO_Number_17, GPIO_PullUp_Enable);
GPIO_setPullUp(myGpio, GPIO_Number_18, GPIO_PullUp_Enable);
GPIO_setPullUp(myGpio, GPIO_Number_19, GPIO_PullUp_Enable);
GPIO_setQualification(myGpio, GPIO_Number_16, GPIO_Qual_ASync);
GPIO_setQualification(myGpio, GPIO_Number_17, GPIO_Qual_ASync);
GPIO_setQualification(myGpio, GPIO_Number_18, GPIO_Qual_ASync);
GPIO_setQualification(myGpio, GPIO_Number_19, GPIO_Qual_ASync);
GPIO_setMode(myGpio, GPIO_Number_16, GPIO_16_Mode_SPISIMOA);
GPIO_setMode(myGpio, GPIO_Number_17, GPIO_17_Mode_SPISOMIA);
GPIO_setMode(myGpio, GPIO_Number_18, GPIO_18_Mode_SPICLKA);
GPIO_setMode(myGpio, GPIO_Number_19, GPIO_19_Mode_SPISTEA_NOT);

PIE_setDebugIntVectorTable(myPie);
PIE_enable(myPie);

spi_init();
spi_fifo_init();

for(;;)
{

SPI_write(mySpi, 0xAA);


while(SPI_getRxFifoStatus(mySpi) == SPI_FifoStatus_Empty)
{
}

SPI_read(mySpi);

}
}


void delay_loop()
{
long i;

for (i = 0; i < 1000000; i++)
{
}

return;
}

void error(void)
{
asm(" ESTOP0"); // Test failed!! Stop!
for (;;)
{
}
}

void spi_init()
{
CLK_enableSpiaClock(myClk);

// Reset on, rising edge, 16-bit char bits
SPI_setCharLength(mySpi, SPI_CharLength_8_Bits);

// Enable master mode, normal phase,
// enable talk, and SPI int disabled.
SPI_setMode(mySpi, SPI_Mode_Master);
SPI_enableTx(mySpi);

SPI_setBaudRate(mySpi, SPI_BaudRate_500_KBaud);

// Relinquish SPI from Reset
//SPI_enableLoopBack(mySpi); //测试时候有用,环回测试.
SPI_enable(mySpi);

// Set so breakpoints don't disturb xmission
//优先级控制
/*
* 模式2:FreeRun:忽略中断
* 模式1:AfterRxRxSeq:
* 模式0:Immediate:
*/
SPI_setPriority(mySpi, SPI_Priority_FreeRun);

return;
}

void spi_fifo_init()
{

// Initialize SPI FIFO registers
SPI_enableChannels(mySpi);
SPI_enableFifoEnh(mySpi);
SPI_resetTxFifo(mySpi);
SPI_clearTxFifoInt(mySpi);
SPI_resetRxFifo(mySpi);
SPI_clearRxFifoInt(mySpi);
SPI_setRxFifoIntLevel(mySpi, SPI_FifoLevel_4_Words);

return;
}