📄 its_spi.c
字号:
/******************************************************************************
Filename: ITS_spi.c
Copyright 2007 Texas Instruments, Inc.
******************************************************************************/
#include "ITS_types.h"
#include "ITS_defs.h"
#include "ITS_board.h"
#include "ITS_spi.h"
#include "ITS_spi_config.h"
//----------------------------------------------------------------------------------
// Target specific initialization of SPI interface in ITS_spi_config.c
//----------------------------------------------------------------------------------
//----------------------------------------------------------------------------------
// void ITSSpiWrite(uint8 addr, const uint8 *buffer, uint16 length)
//
// DESCRIPTION:
// Write data to device, starting at internal device address "addr".
// The device will increment the address internally for every new byte
// that is written. For single byte write, set length to 1.
//----------------------------------------------------------------------------------
uint8 ITSSpiWrite(uint8 addr, const uint8* data, uint16 length)
{
uint16 i;
uint8 rc;
HAL_SPI_BEGIN; //P1OUT &= ~BIT4;
#ifdef HAL_SPI_INTERFACE_BITBANG
rc = ITSSpiBitbangOut(addr);
for (i = 0; i < length; i++)
{
ITSSpiBitbangOut(data[i]);
}
#else
HAL_SPI_TXBUF_SET(addr);
HAL_SPI_WAIT_TXFIN;
rc = HAL_SPI_RXBUF;
for (i = 0; i < length; i++)
{
HAL_SPI_TXBUF_SET(data[i]);
HAL_SPI_WAIT_TXBUF;
}
#ifndef HAL_SPI_INTERFACE_USI
HAL_SPI_WAIT_TXFIN;
#endif
#endif
HAL_SPI_END; //P1OUT |= BIT4;
return(rc);
}
//----------------------------------------------------------------------------------
// uint8 ITSSpiRead(uint8 addr, uint8* data, uint16 length)
//
// DESCRIPTION:
// Read data from device, starting at internal device address "addr".
// The device will increment the address internally for every new byte
// that is read. Note that the master device needs to write a dummy byte
// (in this case 0) for every new byte in order to generate the clock to
// clock out the data. For single byte read, set length to 1.
//----------------------------------------------------------------------------------
uint8 ITSSpiRead(uint8 addr, uint8* data, uint16 length)
{
uint16 i;
uint8 rc;
HAL_SPI_BEGIN; //P1OUT &= ~BIT4;
#ifdef HAL_SPI_INTERFACE_BITBANG
rc = ITSSpiBitbangOut(addr);
for (i = 0; i < length; i++)
{
data[i] = ITSSpiBitbangIn();
}
#else
HAL_SPI_TXBUF_SET(addr); // U0TXBUF=addr
HAL_SPI_WAIT_TXFIN; //while(!(U0TCTL & TXEPT));
rc = HAL_SPI_RXBUF; //rc = U0RXBUF
for (i = 0; i < length; i++)
{
HAL_SPI_TXBUF_SET(0); // Dummy write to read data byte
HAL_SPI_WAIT_TXFIN;
data[i] = HAL_SPI_RXBUF; // Store data from last data RX
}
#endif
HAL_SPI_END; //P1OUT |= BIT4;
return(rc);
}
//----------------------------------------------------------------------------------
// uint8 ITSSpiStrobe(uint8 cmd)
//
// DESCRIPTION:
// Special write function, writing only one byte (cmd) to the device.
//----------------------------------------------------------------------------------
uint8 ITSSpiStrobe(uint8 cmd)
{
uint8 rc;
HAL_SPI_BEGIN;
#ifdef HAL_SPI_INTERFACE_BITBANG
rc = ITSSpiBitbangOut(cmd);
#else
HAL_SPI_TXBUF_SET(cmd);
HAL_SPI_WAIT_TXFIN;
rc = HAL_SPI_RXBUF;
#endif
HAL_SPI_END;
return(rc);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -