summaryrefslogtreecommitdiffstats
path: root/host/include
diff options
context:
space:
mode:
authorJosh Blum <josh@joshknows.com>2010-04-07 00:46:42 -0700
committerJosh Blum <josh@joshknows.com>2010-04-07 00:46:42 -0700
commitb66a74ff1f629af714e26040b410d472c08be522 (patch)
treee7a60cb4e3c3d113fd081c8df0d4405eb569f3dc /host/include
parente6151334096167d1d26609f7233105020af91f40 (diff)
downloaduhd-b66a74ff1f629af714e26040b410d472c08be522.tar.gz
uhd-b66a74ff1f629af714e26040b410d472c08be522.tar.bz2
uhd-b66a74ff1f629af714e26040b410d472c08be522.zip
Reworked the spi part of the dboard interface.
It turns out to be more complicated. The integer type is better for holding the bits. The edges can be different, so the spi config hold 2 edge setting for mosi and miso.
Diffstat (limited to 'host/include')
-rw-r--r--host/include/uhd/usrp/dboard_interface.hpp100
1 files changed, 55 insertions, 45 deletions
diff --git a/host/include/uhd/usrp/dboard_interface.hpp b/host/include/uhd/usrp/dboard_interface.hpp
index b3bab131d..dab5a2281 100644
--- a/host/include/uhd/usrp/dboard_interface.hpp
+++ b/host/include/uhd/usrp/dboard_interface.hpp
@@ -42,16 +42,31 @@ public:
UNIT_TYPE_TX = 't'
};
- //tells the host which device to use
- enum spi_dev_t{
- SPI_DEV_RX = 'r',
- SPI_DEV_TX = 't'
- };
-
- //args for spi format
- enum spi_edge_t{
- SPI_EDGE_RISE = 'r',
- SPI_EDGE_FALL = 'f'
+ //spi configuration struct
+ struct UHD_API spi_config_t{
+ /*!
+ * The edge type specifies when data is valid
+ * relative to the edge of the serial clock.
+ */
+ enum edge_t{
+ EDGE_RISE = 'r',
+ EDGE_FALL = 'f'
+ };
+
+ //! on what edge is the mosi data valid?
+ edge_t mosi_edge;
+
+ //! on what edge is the miso data valid?
+ edge_t miso_edge;
+
+ /*!
+ * Create a new spi config.
+ * \param edge the default edge for mosi and miso
+ */
+ spi_config_t(edge_t edge = EDGE_RISE){
+ mosi_edge = edge;
+ miso_edge = edge;
+ }
};
//tell the host which gpio bank
@@ -68,10 +83,6 @@ public:
ATR_REG_FULL_DUPLEX = 'f'
};
- //structors
- dboard_interface(void);
- virtual ~dboard_interface(void);
-
/*!
* Write to an aux dac.
* \param unit which unit rx or tx
@@ -131,61 +142,60 @@ public:
/*!
* \brief Write data to SPI bus peripheral.
*
- * \param dev which spi device
- * \param edge args for format
- * \param buf the data to write
+ * \param unit which unit, rx or tx
+ * \param config configuration settings
+ * \param data the bits to write LSB first
+ * \param num_bits the number of bits in data
*/
- void write_spi(spi_dev_t dev, spi_edge_t edge, const byte_vector_t &buf);
+ virtual void write_spi(
+ unit_type_t unit,
+ const spi_config_t &config,
+ boost::uint32_t data,
+ size_t num_bits
+ ) = 0;
/*!
* \brief Read data to SPI bus peripheral.
*
- * \param dev which spi device
- * \param edge args for format
- * \param num_bytes number of bytes to read
+ * \param unit which unit, rx or tx
+ * \param config configuration settings
+ * \param num_bits the number of bits
* \return the data that was read
*/
- byte_vector_t read_spi(spi_dev_t dev, spi_edge_t edge, size_t num_bytes);
+ virtual boost::uint32_t read_spi(
+ unit_type_t unit,
+ const spi_config_t &config,
+ size_t num_bits
+ ) = 0;
/*!
* \brief Read and write data to SPI bus peripheral.
* The data read back will be the same length as the input buffer.
*
- * \param dev which spi device
- * \param edge args for format
- * \param buf the data to write
+ * \param unit which unit, rx or tx
+ * \param config configuration settings
+ * \param data the bits to write LSB first
+ * \param num_bits the number of bits in data
* \return the data that was read
*/
- byte_vector_t read_write_spi(spi_dev_t dev, spi_edge_t edge, const byte_vector_t &buf);
+ virtual boost::uint32_t read_write_spi(
+ unit_type_t unit,
+ const spi_config_t &config,
+ boost::uint32_t data,
+ size_t num_bits
+ ) = 0;
/*!
* \brief Get the rate of the rx dboard clock.
- * \return the clock rate
+ * \return the clock rate in Hz
*/
virtual double get_rx_clock_rate(void) = 0;
/*!
* \brief Get the rate of the tx dboard clock.
- * \return the clock rate
+ * \return the clock rate in Hz
*/
virtual double get_tx_clock_rate(void) = 0;
-
-private:
- /*!
- * \brief Read and write data to SPI bus peripheral.
- *
- * \param dev which spi device
- * \param edge args for format
- * \param buf the data to write
- * \param readback false for write only
- * \return the data that was read
- */
- virtual byte_vector_t transact_spi(
- spi_dev_t dev,
- spi_edge_t edge,
- const byte_vector_t &buf,
- bool readback
- ) = 0;
};
}} //namespace