TI-RTOS Drivers  tidrivers_full_2_20_01_10
PDMCC26XX_util.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2016, Texas Instruments Incorporated
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  *
9  * * Redistributions of source code must retain the above copyright
10  * notice, this list of conditions and the following disclaimer.
11  *
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in the
14  * documentation and/or other materials provided with the distribution.
15  *
16  * * Neither the name of Texas Instruments Incorporated nor the names of
17  * its contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
27  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
29  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
30  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
54 #ifndef ti_drivers_i2s_PDMCC26XX_I2S__include
55 #define ti_drivers_i2s_PDMCC26XX_I2S__include
56 
57 #ifdef __cplusplus
58 extern "C" {
59 #endif
60 
62 #include <ti/drivers/Power.h>
64 
69 #define ti_sysbios_family_arm_m3_Hwi__nolocalnames
70 #include <ti/sysbios/knl/Semaphore.h>
71 #include <ti/sysbios/family/arm/m3/Hwi.h>
72 
79 #define xI2S_DEBUG
80 
84 #define PDMCC26XX_I2S_MIN_ALLOWED_QUEUE_SIZE 3
85 
89 #ifdef I2S_DEBUG
90 #define I2S_BLOCK_OVERHEAD_IN_BYTES 16
91 #else //I2S_DEBUG
92 #define I2S_BLOCK_OVERHEAD_IN_BYTES 12
93 #endif //I2S_DEBUG
94 
96 #define PDMCC26XX_I2S_CMD_SUCCESS 0
97 
98 #define PDMCC26XX_I2S_CMD_UNDEFINED -1
99 
100 #define PDMCC26XX_I2S_CMD_NO_SUCCESS -2
101 
103 #define PDMCC26XX_I2S_GENERIC_DISABLED 0
104 
105 #define PDMCC26XX_I2S_GENERIC_ENABLED 1
106 
111 
115 typedef enum PDMCC26XX_I2S_Status {
146 
151 typedef enum PDMCC26XX_I2S_Mode {
155 
164 #define PDMCC26XX_I2S_DEFAULT_SAMPLE_STAMP_MOD 0x0000FFFF
165 
179 #define PDMCC26XX_I2S_WordClockPhase_Single 0
180 
183 #define PDMCC26XX_I2S_WordClockPhase_Dual 1
184 
187 #define PDMCC26XX_I2S_WordClockPhase_UserDefined 2
188 
197 #define PDMCC26XX_I2S_SampleEdge_Negative 0
198 
201 #define PDMCC26XX_I2S_SampleEdge_Postive 1
202 
211 #define PDMCC26XX_I2S_WordClockSource_Ext 1
212 
215 #define PDMCC26XX_I2S_WordClockSource_Int 2
216 
225 #define PDMCC26XX_I2S_BitClockSource_Ext 0
226 
229 #define PDMCC26XX_I2S_BitClockSource_Int 1
230 
239 #define PDMCC26XX_I2S_ClockSource_Normal 0
240 
243 #define PDMCC26XX_I2S_ClockSource_Inverted 1
244 
254 #define PDMCC26XX_I2S_ADUsageDisabled 0
255 
258 #define PDMCC26XX_I2S_ADUsageInput 1
259 
262 #define PDMCC26XX_I2S_ADUsageOutput 2
263 
282 #define PDMCC26XX_I2S_CHAN0_ACT 0x00000001
283 
284 #define PDMCC26XX_I2S_CHAN1_ACT 0x00000002
285 
286 #define PDMCC26XX_I2S_CHAN2_ACT 0x00000004
287 
288 #define PDMCC26XX_I2S_CHAN3_ACT 0x00000008
289 
290 #define PDMCC26XX_I2S_CHAN4_ACT 0x00000010
291 
292 #define PDMCC26XX_I2S_CHAN5_ACT 0x00000020
293 
294 #define PDMCC26XX_I2S_CHAN6_ACT 0x00000040
295 
296 #define PDMCC26XX_I2S_CHAN7_ACT 0x00000080
297 
298 #define PDMCC26XX_I2S_MONO_MODE 0x00000001
299 
300 #define PDMCC26XX_I2S_STEREO_MODE 0x00000003
301 
302 #define PDMCC26XX_I2S_DISABLED_MODE 0x00000000
303 
304 #define PDMCC26XX_I2S_CHAN_CFG_MASK 0x000000FF
305 
315 #define PDMCC26XX_I2S_WordLengthMin 8
316 
317 #define PDMCC26XX_I2S_WordLength16 16
318 
319 #define PDMCC26XX_I2S_WordLengthMax 24
320 
329 #define PDMCC26XX_I2S_SinglePhase 0
330 
331 #define PDMCC26XX_I2S_DualPhase 1
332 
342 #define PDMCC26XX_I2S_NegativeEdge 0
343 
344 #define PDMCC26XX_I2S_PositiveEdge 1
345 
358 #define PDMCC26XX_I2S_MemLen16bit 0
359 
360 #define PDMCC26XX_I2S_MemLen24bit 1
361 
380 #define PDMCC26XX_I2S_FormatLJF 0
381 
382 #define PDMCC26XX_I2S_FormatI2SandDSP 1
383 
384 #define PDMCC26XX_I2S_FormatRJFmin 2
385 
386 #define PDMCC26XX_I2S_FormatRJFmax 255
387 
389 typedef uint32_t PDMCC26XX_I2S_TransferSize;
390 
396 typedef struct PDMCC26XX_I2S_Config {
398  void *object;
399 
401  void const *hwAttrs;
403 
406 
431 typedef struct PDMCC26XX_I2S_HWAttrs {
433  uint32_t baseAddr;
435  uint8_t intNum;
437  uint8_t intPriority;
449 
472  uint16_t wclkDiv;
478  uint16_t wclkPhase:2;
480  uint16_t wclkInverted:1;
482  uint16_t wclkSource:2;
484  uint16_t bclkDiv:10;
486  uint16_t reserved:5;
488  uint16_t bclkSource:1;
490  uint16_t mclkDiv:10;
492 
516  struct {
518  uint16_t ad1;
520  uint16_t ad0;
521  } driverLibParams;
523  struct {
525  uint8_t ad1Usage:2;
527  uint8_t enableMclkPin:1;
529  uint8_t reserved:1;
531  uint8_t ad1NumOfChannels:4;
533  uint8_t ad1ChannelMask;
535  uint8_t ad0Usage:2;
537  uint8_t enableWclkPin:1;
539  uint8_t enableBclkPin:1;
541  uint8_t ad0NumOfChannels:4;
543  uint8_t ad0ChannelMask;
544  } bitFields;
549 #define PDMCC26XX_I2S_DIR_CHA_M (I2S_LINE_MASK | I2S_CHAN_CFG_MASK)
550 
569  uint8_t wordLength:5;
573  uint8_t sampleEdge:1;
575  uint8_t dualPhase:1;
577  uint8_t memLen:1;
579  uint8_t dataDelay;
581 
582 
601 
608  void *arg;
611 
630  void *bufferIn;
634 
645 
652 typedef void (*PDMCC26XX_I2S_CallbackFxn) (PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_StreamNotification *notification);
653 
658 typedef struct PDMCC26XX_I2S_Params {
659  /* I2S control variables */
663  PDMCC26XX_I2S_TransferSize blockSize;
670  /* I2S stream variables */
671  void *pvContBuffer;
688 
694 typedef struct PDMCC26XX_I2S_Object {
695  /* I2S control variables */
699  int32_t i32SampleRate;
703  PDMCC26XX_I2S_TransferSize blockSize;
705  /* I2S stream variables */
706  void *pvContBuffer;
712  /* I2S SYS/BIOS objects */
713  ti_sysbios_family_arm_m3_Hwi_Struct hwi;
714  Semaphore_Struct blockComplete;
715  Semaphore_Struct semStopping;
717  /* PIN driver state object and handle */
721  bool isOpen;
723 
730 extern void PDMCC26XX_I2S_init(PDMCC26XX_I2S_Handle handle);
731 
751 extern bool PDMCC26XX_I2S_Params_init(PDMCC26XX_I2S_Params *params, PDMCC26XX_I2S_Mode mode, void *modeSpecificParams);
752 
777 extern PDMCC26XX_I2S_Handle PDMCC26XX_I2S_open(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_Params *params);
778 
793 extern void PDMCC26XX_I2S_close(PDMCC26XX_I2S_Handle handle);
794 
816 extern bool PDMCC26XX_I2S_startStream(PDMCC26XX_I2S_Handle handle);
817 
844 extern bool PDMCC26XX_I2S_stopStream(PDMCC26XX_I2S_Handle handle);
845 
874 extern bool PDMCC26XX_I2S_requestBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRequest *bufferRequest);
875 
894 extern Void PDMCC26XX_I2S_releaseBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRelease *bufferRelease);
895 
896 /* Do not interfere with the app if they include the family Hwi module */
897 #undef ti_sysbios_family_arm_m3_Hwi__nolocalnames
898 
899 #ifdef __cplusplus
900 }
901 #endif
902 
903 #endif /* ti_drivers_i2s_PDMCC26XX_I2S__include */
uint8_t wordLength
Definition: PDMCC26XX_util.h:569
uint8_t PIN_Id
Pin identifier data type.
Definition: PIN.h:557
uint16_t reserved
Definition: PDMCC26XX_util.h:486
PDMCC26XX_I2S_Handle PDMCC26XX_I2S_open(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_Params *params)
Function to open a given CC26XX I2S peripheral specified by the I2S handle.
bool PDMCC26XX_I2S_requestBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRequest *bufferRequest)
Function for requesting buffer.
uint32_t ui32conMgtBufTotalSize
Definition: PDMCC26XX_util.h:709
PDMCC26XX_I2S_Status status
Definition: PDMCC26XX_util.h:632
uint16_t wclkInverted
Definition: PDMCC26XX_util.h:480
PDMCC26XX_I2S_Mode
Definitions for various PDMCC26XX_I2S modes of operation.
Definition: PDMCC26XX_util.h:151
struct PDMCC26XX_I2S_AudioPinConfig::@0 driverLibParams
struct PDMCC26XX_I2S_Config PDMCC26XX_I2S_Config
The PDMCC26XX_I2S_Config structure contains a set of pointers used to characterize the PDMCC26XX_I2S ...
struct PDMCC26XX_I2S_AudioClockConfig PDMCC26XX_I2S_AudioClockConfig
PDMCC26XX_I2S Audio Clock configuration.
Semaphore_Struct semStopping
Definition: PDMCC26XX_util.h:715
uint8_t sampleEdge
Definition: PDMCC26XX_util.h:573
Definition: PDMCC26XX_util.h:119
Definition: PDMCC26XX_util.h:135
void * bufferHandleIn
Definition: PDMCC26XX_util.h:643
Power manager interface.
struct PDMCC26XX_I2S_Config * PDMCC26XX_I2S_Handle
A handle that is returned from a PDMCC26XX_I2S_open() call.
Definition: PDMCC26XX_util.h:110
PDMCC26XX_I2S_StreamNotification * currentStream
Definition: PDMCC26XX_util.h:685
Power manager interface for CC26XX.
void const * hwAttrs
Definition: PDMCC26XX_util.h:401
uint16_t ad0
Definition: PDMCC26XX_util.h:520
PDMCC26XX_I2S_AudioPinConfig audioPinCfg
Definition: PDMCC26XX_util.h:701
Definition: PDMCC26XX_util.h:599
uint8_t PowerCC26XX_Resource
Definition: PowerCC26XX.h:66
uint8_t enableBclkPin
Definition: PDMCC26XX_util.h:539
PIN_Id ad0Pin
Definition: PDMCC26XX_util.h:447
PDMCC26XX_I2S_RequestMode requestMode
Definition: PDMCC26XX_util.h:696
Definition: PDMCC26XX_util.h:593
uint8_t reserved
Definition: PDMCC26XX_util.h:529
uint8_t dataDelay
Definition: PDMCC26XX_util.h:579
A PDMCC26XX_I2S_BufferRequest data structure is used with PDMCC26XX_I2S_requestBuffer().
Definition: PDMCC26XX_util.h:629
Definition: PDMCC26XX_util.h:121
PDMCC26XX_I2S_RequestMode requestMode
Definition: PDMCC26XX_util.h:660
Definition: PDMCC26XX_util.h:117
uint16_t wclkPhase
Definition: PDMCC26XX_util.h:478
uint16_t ad1
Definition: PDMCC26XX_util.h:518
void(* PDMCC26XX_I2S_CallbackFxn)(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_StreamNotification *notification)
The definition of a callback function used when wakeup on chip select is enabled. ...
Definition: PDMCC26XX_util.h:652
PIN_Id wclkPin
Definition: PDMCC26XX_util.h:445
Definition: PDMCC26XX_util.h:116
Definition: PDMCC26XX_util.h:137
PDMCC26XX_I2S Hardware configuration.
Definition: PDMCC26XX_util.h:567
Definition: PDMCC26XX_util.h:153
PDMCC26XX_I2S_CallbackFxn callbackFxn
Definition: PDMCC26XX_util.h:662
A PDMCC26XX_I2S_BufferRelease data structure is used with PDMCC26XX_I2S_releaseBuffer().
Definition: PDMCC26XX_util.h:642
uint16_t sampleOnPositiveEdge
Definition: PDMCC26XX_util.h:476
PIN_Id mclkPin
Definition: PDMCC26XX_util.h:441
void * bufferHandleIn
Definition: PDMCC26XX_util.h:631
PDMCC26XX_I2S_TransferSize blockSize
Definition: PDMCC26XX_util.h:703
struct PDMCC26XX_I2S_AudioFormatConfig PDMCC26XX_I2S_AudioFormatConfig
PDMCC26XX_I2S Hardware configuration.
bool isOpen
Definition: PDMCC26XX_util.h:721
uint16_t mclkDiv
Definition: PDMCC26XX_util.h:490
PDMCC26XX_I2S_RequestMode
PDMCC26XX_I2S Object.
Definition: PDMCC26XX_util.h:588
Void PDMCC26XX_I2S_releaseBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRelease *bufferRelease)
Function for releasing buffer.
Device-specific pin & GPIO driver for CC26xx family [def].
uint8_t memLen
Definition: PDMCC26XX_util.h:577
struct PDMCC26XX_I2S_BufferRequest PDMCC26XX_I2S_BufferRequest
A PDMCC26XX_I2S_BufferRequest data structure is used with PDMCC26XX_I2S_requestBuffer().
uint32_t ui32conBufTotalSize
Definition: PDMCC26XX_util.h:707
bool PDMCC26XX_I2S_stopStream(PDMCC26XX_I2S_Handle handle)
Function for stopping an I2S interface.
uint16_t wclkDiv
Definition: PDMCC26XX_util.h:472
void * pvContMgtBuffer
Definition: PDMCC26XX_util.h:678
PDMCC26XX_I2S_StreamNotification * currentStream
Definition: PDMCC26XX_util.h:710
PDMCC26XX_I2S_AudioClockConfig audioClkCfg
Definition: PDMCC26XX_util.h:700
ti_sysbios_family_arm_m3_Hwi_Struct hwi
Definition: PDMCC26XX_util.h:713
uint8_t ad1NumOfChannels
Definition: PDMCC26XX_util.h:531
Definition: PDMCC26XX_util.h:142
uint32_t ui32conMgtBufTotalSize
Definition: PDMCC26XX_util.h:681
uint32_t ui32requestTimeout
Definition: PDMCC26XX_util.h:661
struct PDMCC26XX_I2S_Params PDMCC26XX_I2S_Params
PDMCC26XX I2S Parameters are used when calling PDMCC26XX_I2S_open().
PDMCC26XX I2S Parameters are used when calling PDMCC26XX_I2S_open().
Definition: PDMCC26XX_util.h:658
void * pvContMgtBuffer
Definition: PDMCC26XX_util.h:708
uint8_t enableWclkPin
Definition: PDMCC26XX_util.h:537
struct PDMCC26XX_I2S_AudioPinConfig::@1 bitFields
uint8_t ad0Usage
Definition: PDMCC26XX_util.h:535
PIN_State pinState
Definition: PDMCC26XX_util.h:718
void * arg
Definition: PDMCC26XX_util.h:608
uint16_t bclkDiv
Definition: PDMCC26XX_util.h:484
PDMCC26XX_I2S_Status
Status codes that are set by the I2S driver.
Definition: PDMCC26XX_util.h:115
uint8_t ad1Usage
Definition: PDMCC26XX_util.h:525
uint8_t dualPhase
Definition: PDMCC26XX_util.h:575
uint16_t wclkSource
Definition: PDMCC26XX_util.h:482
underlying data structure for type PIN_State
Definition: PIN.h:687
PDMCC26XX_I2S Object.
Definition: PDMCC26XX_util.h:694
bool PDMCC26XX_I2S_startStream(PDMCC26XX_I2S_Handle handle)
Function for starting an I2S interface.
Definition: PDMCC26XX_util.h:152
void PDMCC26XX_I2S_close(PDMCC26XX_I2S_Handle handle)
Function to close a given CC26XX I2S peripheral specified by the I2S handle.
Definition: PDMCC26XX_util.h:118
void * pvContBuffer
Definition: PDMCC26XX_util.h:671
void * object
Definition: PDMCC26XX_util.h:398
PDMCC26XX_I2S Audio Clock configuration.
Definition: PDMCC26XX_util.h:470
uint8_t ad0ChannelMask
Definition: PDMCC26XX_util.h:543
uint32_t ui32requestTimeout
Definition: PDMCC26XX_util.h:697
uint16_t bclkSource
Definition: PDMCC26XX_util.h:488
PowerCC26XX_Resource powerMngrId
Definition: PDMCC26XX_util.h:439
A PDMCC26XX_I2S_StreamNotification data structure is used with PDMCC26XX_I2S_CallbackFxn(). Provides notification about available buffers and potential errors.
Definition: PDMCC26XX_util.h:607
void * bufferIn
Definition: PDMCC26XX_util.h:630
struct PDMCC26XX_I2S_HWAttrs PDMCC26XX_I2S_HWAttrs
PDMCC26XX_I2S Hardware attributes.
struct PDMCC26XX_I2S_BufferRelease PDMCC26XX_I2S_BufferRelease
A PDMCC26XX_I2S_BufferRelease data structure is used with PDMCC26XX_I2S_releaseBuffer().
PDMCC26XX_I2S Hardware attributes.
Definition: PDMCC26XX_util.h:431
PIN_Handle pinHandle
Definition: PDMCC26XX_util.h:719
uint8_t ad0NumOfChannels
Definition: PDMCC26XX_util.h:541
The PDMCC26XX_I2S_Config structure contains a set of pointers used to characterize the PDMCC26XX_I2S ...
Definition: PDMCC26XX_util.h:396
struct PDMCC26XX_I2S_StreamNotification PDMCC26XX_I2S_StreamNotification
A PDMCC26XX_I2S_StreamNotification data structure is used with PDMCC26XX_I2S_CallbackFxn(). Provides notification about available buffers and potential errors.
PDMCC26XX_I2S_TransferSize blockSize
Definition: PDMCC26XX_util.h:663
uint8_t ad1ChannelMask
Definition: PDMCC26XX_util.h:533
void * pvContBuffer
Definition: PDMCC26XX_util.h:706
Definition: PDMCC26XX_util.h:125
PDMCC26XX_I2S Audio Pin configuration.
Definition: PDMCC26XX_util.h:514
Semaphore_Struct blockComplete
Definition: PDMCC26XX_util.h:714
PDMCC26XX_I2S_AudioFormatConfig audioFmtCfg
Definition: PDMCC26XX_util.h:702
uint8_t intNum
Definition: PDMCC26XX_util.h:435
int32_t i32SampleRate
Definition: PDMCC26XX_util.h:699
uint8_t intPriority
Definition: PDMCC26XX_util.h:437
union PDMCC26XX_I2S_AudioPinConfig PDMCC26XX_I2S_AudioPinConfig
PDMCC26XX_I2S Audio Pin configuration.
uint32_t ui32conBufTotalSize
Definition: PDMCC26XX_util.h:674
bool PDMCC26XX_I2S_Params_init(PDMCC26XX_I2S_Params *params, PDMCC26XX_I2S_Mode mode, void *modeSpecificParams)
Function to set initialization parameters for the audio interface.
uint32_t PDMCC26XX_I2S_TransferSize
Definition: PDMCC26XX_util.h:389
struct PDMCC26XX_I2S_Object PDMCC26XX_I2S_Object
PDMCC26XX_I2S Object.
PDMCC26XX_I2S_Status status
Definition: PDMCC26XX_util.h:609
uint32_t baseAddr
Definition: PDMCC26XX_util.h:433
const PDMCC26XX_I2S_Config PDMCC26XX_I2S_config[]
PIN_Id bclkPin
Definition: PDMCC26XX_util.h:443
void PDMCC26XX_I2S_init(PDMCC26XX_I2S_Handle handle)
I2S CC26XX initialization.
uint8_t enableMclkPin
Definition: PDMCC26XX_util.h:527
PDMCC26XX_I2S_CallbackFxn callbackFxn
Definition: PDMCC26XX_util.h:698
Copyright 2016, Texas Instruments Incorporated