summaryrefslogtreecommitdiff
path: root/boot_loader/bl_ssi.c
diff options
context:
space:
mode:
authorYuval Adam <yuval@y3xz.com>2015-03-13 12:24:52 +0200
committerYuval Adam <yuval@y3xz.com>2015-03-13 12:24:52 +0200
commit4085ae3ddfbbf10c8ccbd3dccd43452c40a1fe40 (patch)
treeac63581949a49511136e7e9e47d265bfb4119b26 /boot_loader/bl_ssi.c
parent788db64b8642bf31de6930d18a62177c64163ee0 (diff)
Add bootloader, nfclib and sensorlib
Diffstat (limited to 'boot_loader/bl_ssi.c')
-rw-r--r--boot_loader/bl_ssi.c161
1 files changed, 161 insertions, 0 deletions
diff --git a/boot_loader/bl_ssi.c b/boot_loader/bl_ssi.c
new file mode 100644
index 0000000..ca10517
--- /dev/null
+++ b/boot_loader/bl_ssi.c
@@ -0,0 +1,161 @@
+//*****************************************************************************
+//
+// bl_ssi.c - Functions used to transfer data via the SSI port.
+//
+// Copyright (c) 2006-2014 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 2.1.0.12573 of the Tiva Firmware Development Package.
+//
+//*****************************************************************************
+
+#include <stdint.h>
+#include "inc/hw_gpio.h"
+#include "inc/hw_memmap.h"
+#include "inc/hw_ssi.h"
+#include "inc/hw_sysctl.h"
+#include "inc/hw_types.h"
+#include "bl_config.h"
+#include "boot_loader/bl_ssi.h"
+
+//*****************************************************************************
+//
+//! \addtogroup bl_ssi_api
+//! @{
+//
+//*****************************************************************************
+#if defined(SSI_ENABLE_UPDATE) || defined(DOXYGEN)
+
+//*****************************************************************************
+//
+//! Sends data via the SSI port in slave mode.
+//!
+//! \param pui8Data is the location of the data to send through the SSI port.
+//! \param ui32Size is the number of bytes of data to send.
+//!
+//! This function sends data through the SSI port in slave mode. This function
+//! will not return until all bytes are sent.
+//!
+//! \return None.
+//
+//*****************************************************************************
+void
+SSISend(const uint8_t *pui8Data, uint32_t ui32Size)
+{
+ //
+ // Send the requested number of bytes over the SSI port.
+ //
+ while(ui32Size--)
+ {
+ //
+ // Wait until there is space in the SSI FIFO.
+ //
+ while(!(HWREG(SSI0_BASE + SSI_O_SR) & SSI_SR_TNF))
+ {
+ }
+
+ //
+ // Write the next byte to the SSI port.
+ //
+ HWREG(SSI0_BASE + SSI_O_DR) = *pui8Data++;
+ }
+
+ //
+ // Empty the receive FIFO.
+ //
+ while(HWREG(SSI0_BASE + SSI_O_SR) & SSI_SR_RNE)
+ {
+ HWREG(SSI0_BASE + SSI_O_DR);
+ }
+}
+
+//*****************************************************************************
+//
+//! Waits until all data has been transmitted by the SSI port.
+//!
+//! This function waits until all data written to the SSI port has been read by
+//! the master.
+//!
+//! \return None.
+//
+//*****************************************************************************
+void
+SSIFlush(void)
+{
+ //
+ // Wait until the transmit FIFO is empty.
+ //
+ while(!(HWREG(SSI0_BASE + SSI_O_SR) & SSI_SR_TFE))
+ {
+ }
+
+ //
+ // Wait until the interface is not busy.
+ //
+ while(HWREG(SSI0_BASE + SSI_O_SR) & SSI_SR_BSY)
+ {
+ }
+}
+
+//*****************************************************************************
+//
+//! Receives data from the SSI port in slave mode.
+//!
+//! \param pui8Data is the location to store the data received from the SSI
+//! port.
+//! \param ui32Size is the number of bytes of data to receive.
+//!
+//! This function receives data from the SSI port in slave mode. The function
+//! will not return until \e ui32Size number of bytes have been received.
+//!
+//! \return None.
+//
+//*****************************************************************************
+void
+SSIReceive(uint8_t *pui8Data, uint32_t ui32Size)
+{
+ //
+ // Ensure that we are sending out zeros so that we don't confuse the host.
+ //
+ HWREG(SSI0_BASE + SSI_O_DR) = 0;
+
+ //
+ // Wait for the requested number of bytes.
+ //
+ while(ui32Size--)
+ {
+ //
+ // Wait until there is data in the FIFO.
+ //
+ while(!(HWREG(SSI0_BASE + SSI_O_SR) & SSI_SR_RNE))
+ {
+ }
+
+ //
+ // Read the next byte from the FIFO.
+ //
+ *pui8Data++ = HWREG(SSI0_BASE + SSI_O_DR);
+ HWREG(SSI0_BASE + SSI_O_DR) = 0;
+ }
+}
+
+//*****************************************************************************
+//
+// Close the Doxygen group.
+//! @}
+//
+//*****************************************************************************
+#endif