TI中文支持网
TI专业的中文技术问题搜集分享网站

CC3200 作为 SPI Master

利用SPI_Transfer函数.一次传一个字节.逻辑分析仪测量MOSI正常.MISO上测量到信号的与函数得到的不同.利用ccs调试,memory里Tx正常(与发出的字节相同),Rx是不知道是什么的字节

gaoyang9992006:

CC3200提供的有个SPI例程,条件编译包含主机模式和从机模式

//*****************************************************************************
//
// Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com///////Redistribution and use in source and binary forms, with or without//modification, are permitted provided that the following conditions//are met:
//
//Redistributions of source code must retain the above copyright//notice, this list of conditions and the following disclaimer.
//
//Redistributions in binary form must reproduce the above copyright
//notice, this list of conditions and the following disclaimer in the//documentation and/or other materials provided with the//distribution.
//
//Neither the name of Texas Instruments Incorporated nor the names of
//its contributors may be used to endorse or promote products derived
//from this software without specific prior written permission.
//
//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS//"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT//LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
//A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT//OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,//SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT//LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
//DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
//THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT//(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE//OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//*****************************************************************************//*****************************************************************************
//
// Application Name- SPI Demo
// Application Overview - The demo application focuses on showing the required//initialization sequence to enable the CC3200 SPI//module in full duplex 4-wire master and slave mode(s).
// Application Details-
// http://processors.wiki.ti.com/index.php/CC32xx_SPI_Demo
// or
// docs\examples\CC32xx_SPI_Demo.pdf
//
//*****************************************************************************//*****************************************************************************
//
//! \addtogroup SPI_Demo
//! @{
//
//*****************************************************************************// Standard includes
#include <string.h>// Driverlib includes
#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"// Common interface includes
#include "uart_if.h"
#include "pinmux.h"#define APPLICATION_VERSION"1.1.1"
//*****************************************************************************
//
// Application Master/Slave mode selector macro
//
// MASTER_MODE = 1 : Application in master mode
// MASTER_MODE = 0 : Application in slave mode
//
//*****************************************************************************
#define MASTER_MODE0#define SPI_IF_BIT_RATE100000
#define TR_BUFF_SIZE100#define MASTER_MSG"This is CC3200 SPI Master Application\n\r"
#define SLAVE_MSG"This is CC3200 SPI Slave Application\n\r"//*****************************************************************************
//GLOBAL VARIABLES -- Start
//*****************************************************************************
static unsigned char g_ucTxBuff[TR_BUFF_SIZE];
static unsigned char g_ucRxBuff[TR_BUFF_SIZE];
static unsigned char ucTxBuffNdx;
static unsigned char ucRxBuffNdx;#if defined(ccs)
extern void (* const g_pfnVectors[])(void);
#endif
#if defined(ewarm)
extern uVectorEntry __vector_table;
#endif
//*****************************************************************************
//GLOBAL VARIABLES -- End
//*****************************************************************************//*****************************************************************************
//
//! SPI Slave Interrupt handler
//!
//! This function is invoked when SPI slave has its receive register full or
//! transmit register empty.
//!
//! \return None.
//
//*****************************************************************************
static void SlaveIntHandler()
{unsigned long ulRecvData;unsigned long ulStatus;ulStatus = MAP_SPIIntStatus(GSPI_BASE,true);MAP_SPIIntClear(GSPI_BASE,SPI_INT_RX_FULL|SPI_INT_TX_EMPTY);if(ulStatus & SPI_INT_TX_EMPTY){MAP_SPIDataPut(GSPI_BASE,g_ucTxBuff[ucTxBuffNdx%TR_BUFF_SIZE]);ucTxBuffNdx++;}if(ulStatus & SPI_INT_RX_FULL){MAP_SPIDataGetNonBlocking(GSPI_BASE,&ulRecvData);g_ucTxBuff[ucRxBuffNdx%TR_BUFF_SIZE] = ulRecvData;Report("%c",ulRecvData);ucRxBuffNdx++;}
}//*****************************************************************************
//
//! SPI Master mode main loop
//!
//! This function configures SPI modelue as master and enables the channel for
//! communication
//!
//! \return None.
//
//*****************************************************************************
void MasterMain()
{unsigned long ulUserData;unsigned long ulDummy;//// Initialize the message//memcpy(g_ucTxBuff,MASTER_MSG,sizeof(MASTER_MSG));//// Set Tx buffer index//ucTxBuffNdx = 0;ucRxBuffNdx = 0;//// Reset SPI//MAP_SPIReset(GSPI_BASE);//// Configure SPI interface//MAP_SPIConfigSetExpClk(GSPI_BASE,MAP_PRCMPeripheralClockGet(PRCM_GSPI),SPI_IF_BIT_RATE,SPI_MODE_MASTER,SPI_SUB_MODE_0,(SPI_SW_CTRL_CS |SPI_4PIN_MODE |SPI_TURBO_OFF |SPI_CS_ACTIVEHIGH |SPI_WL_8));//// Enable SPI for communication//MAP_SPIEnable(GSPI_BASE);//// Print mode on uart//Message("Enabled SPI Interface in Master Mode\n\r");//// User input//Report("Press any key to transmit data....");//// Read a character from UART terminal//ulUserData = MAP_UARTCharGet(UARTA0_BASE);//// Send the string to slave. Chip Select(CS) needs to be// asserted at start of transfer and deasserted at the end.//MAP_SPITransfer(GSPI_BASE,g_ucTxBuff,g_ucRxBuff,50,SPI_CS_ENABLE|SPI_CS_DISABLE);//// Report to the user//Report("\n\rSend%s",g_ucTxBuff);Report("Received%s",g_ucRxBuff);//// Print a message//Report("\n\rType here (Press enter to exit) :");//// Initialize variable//ulUserData = 0;//// Enable Chip select//MAP_SPICSEnable(GSPI_BASE);//// Loop until user "Enter Key" is// pressed//while(ulUserData != '\r'){//// Read a character from UART terminal//ulUserData = MAP_UARTCharGet(UARTA0_BASE);//// Echo it back//MAP_UARTCharPut(UARTA0_BASE,ulUserData);//// Push the character over SPI//MAP_SPIDataPut(GSPI_BASE,ulUserData);//// Clean up the receive register into a dummy// variable//MAP_SPIDataGet(GSPI_BASE,&ulDummy);}//// Disable chip select//MAP_SPICSDisable(GSPI_BASE);
}//*****************************************************************************
//
//! SPI Slave mode main loop
//!
//! This function configures SPI modelue as slave and enables the channel for
//! communication
//!
//! \return None.
//
//*****************************************************************************
void SlaveMain()
{//// Initialize the message//memcpy(g_ucTxBuff,SLAVE_MSG,sizeof(SLAVE_MSG));//// Set Tx buffer index//ucTxBuffNdx = 0;ucRxBuffNdx = 0;//// Reset SPI//MAP_SPIReset(GSPI_BASE);//// Configure SPI interface//MAP_SPIConfigSetExpClk(GSPI_BASE,MAP_PRCMPeripheralClockGet(PRCM_GSPI),SPI_IF_BIT_RATE,SPI_MODE_SLAVE,SPI_SUB_MODE_0,(SPI_HW_CTRL_CS |SPI_4PIN_MODE |SPI_TURBO_OFF |SPI_CS_ACTIVEHIGH |SPI_WL_8));//// Register Interrupt Handler//MAP_SPIIntRegister(GSPI_BASE,SlaveIntHandler);//// Enable Interrupts//MAP_SPIIntEnable(GSPI_BASE,SPI_INT_RX_FULL|SPI_INT_TX_EMPTY);//// Enable SPI for communication//MAP_SPIEnable(GSPI_BASE);//// Print mode on uart//Message("Enabled SPI Interface in Slave Mode\n\rReceived : ");
}//*****************************************************************************
//
//! Board Initialization & Configuration
//!
//! \paramNone
//!
//! \return None
//
//*****************************************************************************
static void
BoardInit(void)
{
/* In case of TI-RTOS vector table is initialize by OS itself */
#ifndef USE_TIRTOS//// Set vector table base//
#if defined(ccs)MAP_IntVTableBaseSet((unsigned long)&g_pfnVectors[0]);
#endif
#if defined(ewarm)MAP_IntVTableBaseSet((unsigned long)&__vector_table);
#endif
#endif//// Enable Processor//MAP_IntMasterEnable();MAP_IntEnable(FAULT_SYSTICK);PRCMCC3200MCUInit();
}//*****************************************************************************
//
//! Main function for spi demo application
//!
//! \param none
//!
//! \return None.
//
//*****************************************************************************
void main()
{//// Initialize Board configurations//BoardInit();//// Muxing UART and SPI lines.//PinMuxConfig();//// Enable the SPI module clock//MAP_PRCMPeripheralClkEnable(PRCM_GSPI,PRCM_RUN_MODE_CLK);//// Initialising the Terminal.//InitTerm();//// Clearing the Terminal.//ClearTerm();//// Display the Banner//Message("\n\n\n\r");Message("\t\t********************************************\n\r");Message("\t\tCC3200 SPI Demo Application\n\r");Message("\t\t********************************************\n\r");Message("\n\n\n\r");//// Reset the peripheral//MAP_PRCMPeripheralReset(PRCM_GSPI);#if MASTER_MODEMasterMain();#elseSlaveMain();#endifwhile(1){}}

Yizhou Jiang1:

回复 gaoyang9992006:

Init部分是根据这个demo改的.

赞(0)
未经允许不得转载:TI中文支持网 » CC3200 作为 SPI Master
分享到: 更多 (0)