Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
//*****************************************************************************
//
// softssi.h - Defines and macros for the SoftSSI.
//
// Copyright (c) 2010-2013 Texas Instruments Incorporated. All rights reserved.
// Software License Agreement
//
// Texas Instruments (TI) is supplying this software for use solely and
// exclusively on TI's microcontroller products. The software is owned by
// TI and/or its suppliers, and is protected under applicable copyright
// laws. You may not combine this software with "viral" open-source
// software in order to form a larger program.
//
// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
// DAMAGES, FOR ANY REASON WHATSOEVER.
//
// This is part of revision 1.1 of the Tiva Utility Library.
//
//*****************************************************************************
#ifndef __SOFTSSI_H__
#define __SOFTSSI_H__
//*****************************************************************************
//
// If building with a C++ compiler, make all of the definitions in this header
// have a C binding.
//
//*****************************************************************************
#ifdef __cplusplus
extern "C"
{
#endif
//*****************************************************************************
//
//! \addtogroup softssi_api
//! @{
//
//*****************************************************************************
//*****************************************************************************
//
//! This structure contains the state of a single instance of a SoftSSI module.
//
//*****************************************************************************
typedef struct
{
//
//! The address of the callback function that is called to simulate the
//! interrupts that would be produced by a hardware SSI implementation.
//! This address can be set via a direct structure access or using the
//! SoftSSICallbackSet function.
//
void (*pfnIntCallback)(void);
//
//! The address of the GPIO pin to be used for the Fss signal. If this
//! member is zero, the Fss signal is not generated. This member can be
//! set via a direct structure access or using the SoftSSIFssGPIOSet
//! function.
///
uint32_t ui32FssGPIO;
//
//! The address of the GPIO pin to be used for the Clk signal. This member
//! can be set via a direct structure access or using the SoftSSIClkGPIOSet
//! function.
//
uint32_t ui32ClkGPIO;
//
//! The address of the GPIO pin to be used for the Tx signal. This member
//! can be set via a direct structure access or using the SoftSSITxGPIOSet
//! function.
//
uint32_t ui32TxGPIO;
//
//! The address of the GPIO pin to be used for the Rx signal. If this
//! member is zero, the Rx signal is not read. This member can be set via
//! a direct structure access or using the SoftSSIRxGPIOSet function.
//
uint32_t ui32RxGPIO;
//
//! The address of the data buffer used for the transmit FIFO. This member
//! can be set via a direct structure access or using the
//! SoftSSITxBufferSet function.
//
uint16_t *pui16TxBuffer;
//
//! The address of the data buffer used for the receive FIFO. This member
//! can be set via a direct structure access or using the
//! SoftSSIRxBufferSet function.
//
uint16_t *pui16RxBuffer;
//
//! The length of the transmit FIFO. This member can be set via a direct
//! structure access or using the SoftSSITxBufferSet function.
//
uint16_t ui16TxBufferLen;
//
//! The index into the transmit FIFO of the next word to be transmitted.
//! This member should be initialized to zero, but should not be accessed
//! or modified by the application.
//
uint16_t ui16TxBufferRead;
//
//! The index into the transmit FIFO of the next location to store data
//! into the FIFO. This member should be initialized to zero, but should
//! not be accessed or modified by the application.
//
uint16_t ui16TxBufferWrite;
//
//! The length of the receive FIFO. This member can be set via a direct
//! structure access or using the SoftSSIRxBufferSet function.
//
uint16_t ui16RxBufferLen;
//
//! The index into the receive FIFO of the next word to be read from the
//! FIFO. This member should be initialized to zero, but should not be
//! accessed or modified by the application.
//
uint16_t ui16RxBufferRead;
//
//! The index into the receive FIFO of the location to store the next word
//! received. This member should be initialized to zero, but should not be
//! accessed or modified by the application.
//
uint16_t ui16RxBufferWrite;
//
//! The word that is currently being transmitted. This member should not
//! be accessed or modified by the application.
//
uint16_t ui16TxData;
//
//! The word that is currently being received. This member should not be
//! accessed or modified by the application.
//
uint16_t ui16RxData;
//
//! The flags that control the operation of the SoftSSI module. This
//! member should not be accessed or modified by the application.
//
uint8_t ui8Flags;
//
//! The number of data bits in each SoftSSI frame, which also specifies the
//! width of each data item in the transmit and receive FIFOs. This member
//! can be set via a direct structure access or using the SoftSSIConfigSet
//! function.
//
uint8_t ui8Bits;
//
//! The current state of the SoftSSI state machine. This member should not
//! be accessed or modified by the application.
//
uint8_t ui8State;
//
//! The number of bits that have been transmitted and received in the
//! current frame. This member should not be accessed or modified by the
//! application.
//
uint8_t ui8CurrentBit;
//
//! The set of virtual interrupts that should be sent to the callback
//! function. This member should not be accessed or modified by the
//! application.
//
uint8_t ui8IntMask;
//
//! The set of virtual interrupts that are currently asserted. This member
//! should not be accessed or modified by the application.
//
uint8_t ui8IntStatus;
//
//! The number of tick counts that the SoftSSI module has been idle with
//! data stored in the receive FIFO, which is used to generate the receive
//! timeout interrupt. This member should not be accessed or modified by
//! the application.
//
uint8_t ui8IdleCount;
}
tSoftSSI;
//*****************************************************************************
//
// Close the Doxygen group.
//! @}
//
//*****************************************************************************
//*****************************************************************************
//
// Values that can be passed to SoftSSIIntEnable, SoftSSIIntDisable, and
// SoftSSIIntClear as the ui32IntFlags parameter, and returned by
// SoftSSIIntStatus.
//
//*****************************************************************************
#define SOFTSSI_TXEOT 0x00000010 // TX end of transmit
#define SOFTSSI_TXFF 0x00000008 // TX FIFO half full or less
#define SOFTSSI_RXFF 0x00000004 // RX FIFO half full or more
#define SOFTSSI_RXTO 0x00000002 // RX timeout
#define SOFTSSI_RXOR 0x00000001 // RX overrun
//*****************************************************************************
//
// Values that can be passed to SoftSSIConfigSet.
//
//*****************************************************************************
#define SOFTSSI_FRF_MOTO_MODE_0 0x00000000 // Moto fmt, polarity 0, phase 0
#define SOFTSSI_FRF_MOTO_MODE_1 0x00000002 // Moto fmt, polarity 0, phase 1
#define SOFTSSI_FRF_MOTO_MODE_2 0x00000001 // Moto fmt, polarity 1, phase 0
#define SOFTSSI_FRF_MOTO_MODE_3 0x00000003 // Moto fmt, polarity 1, phase 1
//*****************************************************************************
//
// Prototypes for the APIs.
//
//*****************************************************************************
extern bool SoftSSIBusy(tSoftSSI *psSSI);
extern void SoftSSICallbackSet(tSoftSSI *psSSI, void (*pfnCallback)(void));
extern void SoftSSIClkGPIOSet(tSoftSSI *psSSI, uint32_t ui32Base,
uint8_t ui8Pin);
extern void SoftSSIConfigSet(tSoftSSI *psSSI, uint8_t ui8Protocol,
uint8_t ui8Bits);
extern bool SoftSSIDataAvail(tSoftSSI *psSSI);
extern void SoftSSIDataGet(tSoftSSI *psSSI, uint32_t *pui32Data);
extern int32_t SoftSSIDataGetNonBlocking(tSoftSSI *psSSI, uint32_t *pui32Data);
extern void SoftSSIDataPut(tSoftSSI *psSSI, uint32_t ui32Data);
extern int32_t SoftSSIDataPutNonBlocking(tSoftSSI *psSSI, uint32_t ui32Data);
extern void SoftSSIDisable(tSoftSSI *psSSI);
extern void SoftSSIEnable(tSoftSSI *psSSI);
extern void SoftSSIFssGPIOSet(tSoftSSI *psSSI, uint32_t ui32Base,
uint8_t ui8Pin);
extern void SoftSSIIntClear(tSoftSSI *psSSI, uint32_t ui32IntFlags);
extern void SoftSSIIntDisable(tSoftSSI *psSSI, uint32_t ui32IntFlags);
extern void SoftSSIIntEnable(tSoftSSI *psSSI, uint32_t ui32IntFlags);
extern uint32_t SoftSSIIntStatus(tSoftSSI *psSSI, bool bMasked);
extern void SoftSSIRxBufferSet(tSoftSSI *psSSI, uint16_t *pui16RxBuffer,
uint16_t ui16Len);
extern void SoftSSIRxGPIOSet(tSoftSSI *psSSI, uint32_t ui32Base,
uint8_t ui8Pin);
extern bool SoftSSISpaceAvail(tSoftSSI *psSSI);
extern void SoftSSITimerTick(tSoftSSI *psSSI);
extern void SoftSSITxBufferSet(tSoftSSI *psSSI, uint16_t *pui16TxBuffer,
uint16_t ui16Len);
extern void SoftSSITxGPIOSet(tSoftSSI *psSSI, uint32_t ui32Base,
uint8_t ui8Pin);
//*****************************************************************************
//
// Mark the end of the C bindings section for C++ compilers.
//
//*****************************************************************************
#ifdef __cplusplus
}
#endif
#endif // __SOFTSSI_H__
c60021a68This file is pinned to the selected release. Download the original to open it in your design tool.