Add i2s implementation for the sam3x.
[bertos.git] / bertos / cpu / cortex-m3 / drv / i2s_sam3.h
index 62a962599613c9326d81a31227b4e00278df5aa4..6df9b3e74550e519b510dd788cb733bba7ae6d43 100644 (file)
  *
  * \brief I2S driver functions.
  *
- * This driver uses a double buffering technique to keep i2s bus busy. First fill in the two buffers
- * using i2s_getBuffer(), then start audio playing with i2s_start(). Then call i2s_getFreeBuffer()
- * until you have finished your samples. The reproduction will automatically stop if you don't
- * call i2s_getFreeBuffer() frequently enough.
- *
- * Example:
- * \code
- * // fill in the buffers before start
- * buf = i2s_getBuffer(I2S_FIRST_BUF);
- * // ...
- * buf = i2s_getBuffer(I2S_SECOND_BUF);
- * // ...
- * // here the driver will play only the first two buffers...
- * i2s_start();
- * // ...call getFreeBuffer() to continue playing.
- * while (!(buf = i2s_getFreeBuffer()))
- *     ;
- * // now fill the buffer again
- * \endcode
- *
  * \author Daniele Basile <asterix@develer.com>
- *
- * $WIZ$ module_name = "i2s"
- * $WIZ$ module_configuration = "bertos/cfg/cfg_i2s.h"
- * $WIZ$ module_supports = "sam3"
  */
 
 #ifndef DRV_I2S_SAM3_H
 #define DRV_I2S_SAM3_H
 
-
-#include <cfg/compiler.h>
-#include <cfg/macros.h>
 #include <io/cm3.h>
 
-/**
- * First buffer.
- */
-#define I2S_FIRST_BUF  0
-/**
- * Second buffer.
- */
-#define I2S_SECOND_BUF 1
-
-/**
- * Initializes the module and sets current buffer to I2S_FIRST_BUF.
- */
-void i2s_init(void);
-
-/**
- * Returns one of the two buffers or NULL if none is available.
- *
- * You can't call this function if you have already started the player.
- * \param buf_num The number of the buffer, ie I2S_FIRST_BUF or I2S_SECOND_BUF.
- * \return A pointer to the buffer if the buffer is available (not full), 0 on errors
- */
-uint8_t *i2s_getBuffer(unsigned buf_num);
+enum
+{
+       SSC0,
 
-/**
- * Returns a buffer that will be played after the current one.
- *
- * You should fill it faster than your reproduction time. You can't call this function
- * if the player is not running
- * \return The next buffer to be played, 0 if both are busy.
- */
-uint8_t *i2s_getFreeBuffer(void);
+       SSC_CNT
+};
 
-/**
- * Starts playing from I2S_FIRST_BUFFER.
- *
- * You must have filled both buffers before calling this function. Does nothing if already playing.
- * \return false on errors, true otherwise.
- */
-bool i2s_start(void);
-void i2s_stop(void);
 
-INLINE bool i2s_isPlaying(void)
-{
-       return !(SSC_SR & BV(SSC_TXEMPTY));
-}
+#define I2S_SAM3X MAKE_ID('I', '2', 'S', '3')
 
 #endif /* DRV_I2S_SAM3_H */