PDMCC26XX_util.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2018, 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 
65 #include <ti/drivers/dpl/HwiP.h>
66 #include <ti/drivers/dpl/SemaphoreP.h>
67 
74 #define xI2S_DEBUG
75 
79 #define PDMCC26XX_I2S_MIN_ALLOWED_QUEUE_SIZE 3
80 
84 #ifdef I2S_DEBUG
85 #define I2S_BLOCK_OVERHEAD_IN_BYTES 16
86 #else //I2S_DEBUG
87 #define I2S_BLOCK_OVERHEAD_IN_BYTES 12
88 #endif //I2S_DEBUG
89 
91 #define PDMCC26XX_I2S_CMD_SUCCESS 0
92 
93 #define PDMCC26XX_I2S_CMD_UNDEFINED -1
94 
95 #define PDMCC26XX_I2S_CMD_NO_SUCCESS -2
96 
98 #define PDMCC26XX_I2S_GENERIC_DISABLED 0
99 
100 #define PDMCC26XX_I2S_GENERIC_ENABLED 1
101 
107 typedef void *(*PDMCC26XX_I2S_MallocFxn)(size_t memSize);
108 
115 typedef void (*PDMCC26XX_I2S_FreeFxn)(void *ptr, size_t memSize);
116 
121 
125 typedef enum PDMCC26XX_I2S_Status {
158 
163 typedef enum PDMCC26XX_I2S_Mode {
167 
176 #define PDMCC26XX_I2S_DEFAULT_SAMPLE_STAMP_MOD 0x0000FFFF
177 
191 #define PDMCC26XX_I2S_WordClockPhase_Single 0
192 
195 #define PDMCC26XX_I2S_WordClockPhase_Dual 1
196 
199 #define PDMCC26XX_I2S_WordClockPhase_UserDefined 2
200 
209 #define PDMCC26XX_I2S_SampleEdge_Negative 0
210 
213 #define PDMCC26XX_I2S_SampleEdge_Postive 1
214 
223 #define PDMCC26XX_I2S_WordClockSource_Ext 1
224 
227 #define PDMCC26XX_I2S_WordClockSource_Int 2
228 
237 #define PDMCC26XX_I2S_BitClockSource_Ext 0
238 
241 #define PDMCC26XX_I2S_BitClockSource_Int 1
242 
251 #define PDMCC26XX_I2S_ClockSource_Normal 0
252 
255 #define PDMCC26XX_I2S_ClockSource_Inverted 1
256 
266 #define PDMCC26XX_I2S_ADUsageDisabled 0
267 
270 #define PDMCC26XX_I2S_ADUsageInput 1
271 
274 #define PDMCC26XX_I2S_ADUsageOutput 2
275 
294 #define PDMCC26XX_I2S_CHAN0_ACT 0x00000001
295 
296 #define PDMCC26XX_I2S_CHAN1_ACT 0x00000002
297 
298 #define PDMCC26XX_I2S_CHAN2_ACT 0x00000004
299 
300 #define PDMCC26XX_I2S_CHAN3_ACT 0x00000008
301 
302 #define PDMCC26XX_I2S_CHAN4_ACT 0x00000010
303 
304 #define PDMCC26XX_I2S_CHAN5_ACT 0x00000020
305 
306 #define PDMCC26XX_I2S_CHAN6_ACT 0x00000040
307 
308 #define PDMCC26XX_I2S_CHAN7_ACT 0x00000080
309 
310 #define PDMCC26XX_I2S_MONO_MODE 0x00000001
311 
312 #define PDMCC26XX_I2S_STEREO_MODE 0x00000003
313 
314 #define PDMCC26XX_I2S_DISABLED_MODE 0x00000000
315 
316 #define PDMCC26XX_I2S_CHAN_CFG_MASK 0x000000FF
317 
327 #define PDMCC26XX_I2S_WordLengthMin 8
328 
329 #define PDMCC26XX_I2S_WordLength16 16
330 
331 #define PDMCC26XX_I2S_WordLengthMax 24
332 
341 #define PDMCC26XX_I2S_SinglePhase 0
342 
343 #define PDMCC26XX_I2S_DualPhase 1
344 
354 #define PDMCC26XX_I2S_NegativeEdge 0
355 
356 #define PDMCC26XX_I2S_PositiveEdge 1
357 
370 #define PDMCC26XX_I2S_MemLen16bit 0
371 
372 #define PDMCC26XX_I2S_MemLen24bit 1
373 
392 #define PDMCC26XX_I2S_FormatLJF 0
393 
394 #define PDMCC26XX_I2S_FormatI2SandDSP 1
395 
396 #define PDMCC26XX_I2S_FormatRJFmin 2
397 
398 #define PDMCC26XX_I2S_FormatRJFmax 255
399 
401 typedef uint32_t PDMCC26XX_I2S_TransferSize;
402 
408 typedef struct PDMCC26XX_I2S_Config {
410  void *object;
411 
413  void const *hwAttrs;
415 
418 
443 typedef struct PDMCC26XX_I2S_HWAttrs {
445  uint8_t intNum;
447  uint8_t intPriority;
449  PowerCC26XX_Resource powerMngrId;
459  uint32_t baseAddr;
461 
484  uint16_t wclkDiv;
488  uint16_t sampleOnPositiveEdge:1;
490  uint16_t wclkPhase:2;
492  uint16_t wclkInverted:1;
494  uint16_t wclkSource:2;
496  uint16_t bclkDiv:10;
498  uint16_t reserved:5;
500  uint16_t bclkSource:1;
502  uint16_t mclkDiv:10;
504 
528  struct {
530  uint16_t ad1;
532  uint16_t ad0;
533  } driverLibParams;
535  struct {
537  uint8_t ad1Usage:2;
539  uint8_t enableMclkPin:1;
541  uint8_t reserved:1;
543  uint8_t ad1NumOfChannels:4;
545  uint8_t ad1ChannelMask;
547  uint8_t ad0Usage:2;
549  uint8_t enableWclkPin:1;
551  uint8_t enableBclkPin:1;
553  uint8_t ad0NumOfChannels:4;
555  uint8_t ad0ChannelMask;
556  } bitFields;
561 #define PDMCC26XX_I2S_DIR_CHA_M (I2S_LINE_MASK | I2S_CHAN_CFG_MASK)
562 
581  uint8_t wordLength:5;
585  uint8_t sampleEdge:1;
587  uint8_t dualPhase:1;
589  uint8_t memLen:1;
591  uint8_t dataDelay;
593 
594 
613 
620  void *arg;
621  PDMCC26XX_I2S_Status status;
623 
642  void *bufferIn;
644  PDMCC26XX_I2S_Status status;
646 
657 
664 typedef void (*PDMCC26XX_I2S_CallbackFxn) (PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_StreamNotification *notification);
665 
670 typedef struct PDMCC26XX_I2S_Params {
671  uint8_t blockCount;
672  uint32_t requestTimeout;
673  PDMCC26XX_I2S_RequestMode requestMode;
674  PDMCC26XX_I2S_TransferSize blockSizeInSamples;
687 
693 typedef struct PDMCC26XX_I2S_Object {
694  bool isOpen;
695  uint8_t blockCount;
696  uint16_t blockSizeInBytes;
697  PDMCC26XX_I2S_RequestMode requestMode;
698  uint32_t requestTimeout;
699  int32_t sampleRate;
701  PDMCC26XX_I2S_TransferSize blockSizeInSamples;
710  HwiP_Struct hwi;
711  SemaphoreP_Struct blockComplete;
712  SemaphoreP_Struct semStopping;
716 
723 extern void PDMCC26XX_I2S_init(PDMCC26XX_I2S_Handle handle);
724 
747 extern PDMCC26XX_I2S_Handle PDMCC26XX_I2S_open(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_Params *params);
748 
763 extern void PDMCC26XX_I2S_close(PDMCC26XX_I2S_Handle handle);
764 
786 extern bool PDMCC26XX_I2S_startStream(PDMCC26XX_I2S_Handle handle);
787 
814 extern bool PDMCC26XX_I2S_stopStream(PDMCC26XX_I2S_Handle handle);
815 
844 extern bool PDMCC26XX_I2S_requestBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRequest *bufferRequest);
845 
864 extern void PDMCC26XX_I2S_releaseBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRelease *bufferRelease);
865 
866 #ifdef __cplusplus
867 }
868 #endif
869 
870 #endif /* ti_drivers_i2s_PDMCC26XX_I2S__include */
uint8_t PIN_Id
Pin identifier data type.
Definition: PIN.h:577
void PDMCC26XX_I2S_releaseBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRelease *bufferRelease)
Function for releasing buffer.
SemaphoreP_Struct blockComplete
Definition: PDMCC26XX_util.h:711
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.
uint8_t blockCount
Definition: PDMCC26XX_util.h:671
PDMCC26XX_I2S_Status status
Definition: PDMCC26XX_util.h:644
PDMCC26XX_I2S_Mode
Definitions for various PDMCC26XX_I2S modes of operation.
Definition: PDMCC26XX_util.h:163
PDMCC26XX_I2S_TransferSize blockSizeInSamples
Definition: PDMCC26XX_util.h:701
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.
Definition: PDMCC26XX_util.h:129
Definition: PDMCC26XX_util.h:144
void * bufferHandleIn
Definition: PDMCC26XX_util.h:655
Power Manager.
struct PDMCC26XX_I2S_Config * PDMCC26XX_I2S_Handle
A handle that is returned from a PDMCC26XX_I2S_open() call.
Definition: PDMCC26XX_util.h:120
PDMCC26XX_I2S_MallocFxn mallocFxn
Definition: PDMCC26XX_util.h:705
PDMCC26XX_I2S_StreamNotification * currentStream
Definition: PDMCC26XX_util.h:685
Power manager interface for CC26XX/CC13XX.
void const * hwAttrs
Definition: PDMCC26XX_util.h:413
uint16_t ad0
Definition: PDMCC26XX_util.h:532
PDMCC26XX_I2S_AudioPinConfig audioPinCfg
Definition: PDMCC26XX_util.h:709
Definition: PDMCC26XX_util.h:611
uint32_t requestTimeout
Definition: PDMCC26XX_util.h:698
PIN_Id ad0Pin
Definition: PDMCC26XX_util.h:457
PDMCC26XX_I2S_RequestMode requestMode
Definition: PDMCC26XX_util.h:697
Definition: PDMCC26XX_util.h:605
PDMCC26XX_I2S_FreeFxn freeFxn
Definition: PDMCC26XX_util.h:684
PDMCC26XX_I2S_MallocFxn mallocFxn
Definition: PDMCC26XX_util.h:683
uint8_t dataDelay
Definition: PDMCC26XX_util.h:591
A PDMCC26XX_I2S_BufferRequest data structure is used with PDMCC26XX_I2S_requestBuffer().
Definition: PDMCC26XX_util.h:641
Definition: PDMCC26XX_util.h:132
PDMCC26XX_I2S_RequestMode requestMode
Definition: PDMCC26XX_util.h:673
Definition: PDMCC26XX_util.h:127
uint16_t ad1
Definition: PDMCC26XX_util.h:530
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:664
PIN_Id wclkPin
Definition: PDMCC26XX_util.h:455
Definition: PDMCC26XX_util.h:126
Definition: PDMCC26XX_util.h:147
PDMCC26XX_I2S Hardware configuration.
Definition: PDMCC26XX_util.h:579
Definition: PDMCC26XX_util.h:165
PDMCC26XX_I2S_CallbackFxn callbackFxn
Definition: PDMCC26XX_util.h:681
A PDMCC26XX_I2S_BufferRelease data structure is used with PDMCC26XX_I2S_releaseBuffer().
Definition: PDMCC26XX_util.h:654
PIN_Id mclkPin
Definition: PDMCC26XX_util.h:451
void * bufferHandleIn
Definition: PDMCC26XX_util.h:643
Definition: PDMCC26XX_util.h:140
struct PDMCC26XX_I2S_AudioFormatConfig PDMCC26XX_I2S_AudioFormatConfig
PDMCC26XX_I2S Hardware configuration.
bool isOpen
Definition: PDMCC26XX_util.h:694
uint8_t blockCount
Definition: PDMCC26XX_util.h:695
PDMCC26XX_I2S_RequestMode
PDMCC26XX_I2S Object.
Definition: PDMCC26XX_util.h:600
Device-specific pin & GPIO driver for CC26xx family [def].
struct PDMCC26XX_I2S_BufferRequest PDMCC26XX_I2S_BufferRequest
A PDMCC26XX_I2S_BufferRequest data structure is used with PDMCC26XX_I2S_requestBuffer().
uint32_t requestTimeout
Definition: PDMCC26XX_util.h:672
bool PDMCC26XX_I2S_stopStream(PDMCC26XX_I2S_Handle handle)
Function for stopping an I2S interface.
uint16_t wclkDiv
Definition: PDMCC26XX_util.h:484
PDMCC26XX_I2S_StreamNotification * currentStream
Definition: PDMCC26XX_util.h:707
uint16_t blockSizeInBytes
Definition: PDMCC26XX_util.h:696
PDMCC26XX_I2S_AudioClockConfig audioClkCfg
Definition: PDMCC26XX_util.h:714
Definition: PDMCC26XX_util.h:153
PDMCC26XX_I2S_TransferSize blockSizeInSamples
Definition: PDMCC26XX_util.h:674
SemaphoreP_Struct semStopping
Definition: PDMCC26XX_util.h:712
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:670
void(* PDMCC26XX_I2S_FreeFxn)(void *ptr, size_t memSize)
PDMCC26XX_I2S_FreeFxn is a function pointer for the free function to be used by the driver...
Definition: PDMCC26XX_util.h:115
int32_t sampleRate
Definition: PDMCC26XX_util.h:699
PIN_State pinState
Definition: PDMCC26XX_util.h:713
void * arg
Definition: PDMCC26XX_util.h:620
PDMCC26XX_I2S_Status
Status codes that are set by the I2S driver.
Definition: PDMCC26XX_util.h:125
underlying data structure for type PIN_State
Definition: PIN.h:707
PDMCC26XX_I2S Object.
Definition: PDMCC26XX_util.h:693
bool PDMCC26XX_I2S_startStream(PDMCC26XX_I2S_Handle handle)
Function for starting an I2S interface.
Definition: PDMCC26XX_util.h:164
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:128
void * object
Definition: PDMCC26XX_util.h:410
PDMCC26XX_I2S_FreeFxn freeFxn
Definition: PDMCC26XX_util.h:706
PDMCC26XX_I2S Audio Clock configuration.
Definition: PDMCC26XX_util.h:482
uint8_t ad0ChannelMask
Definition: PDMCC26XX_util.h:555
HwiP_Struct hwi
Definition: PDMCC26XX_util.h:710
PowerCC26XX_Resource powerMngrId
Definition: PDMCC26XX_util.h:449
A PDMCC26XX_I2S_StreamNotification data structure is used with PDMCC26XX_I2S_CallbackFxn(). Provides notification about available buffers and potential errors.
Definition: PDMCC26XX_util.h:619
void * bufferIn
Definition: PDMCC26XX_util.h:642
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:443
PIN_Handle pinHandle
Definition: PDMCC26XX_util.h:700
The PDMCC26XX_I2S_Config structure contains a set of pointers used to characterize the PDMCC26XX_I2S ...
Definition: PDMCC26XX_util.h:408
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.
uint8_t ad1ChannelMask
Definition: PDMCC26XX_util.h:545
Definition: PDMCC26XX_util.h:137
PDMCC26XX_I2S Audio Pin configuration.
Definition: PDMCC26XX_util.h:526
PDMCC26XX_I2S_AudioFormatConfig audioFmtCfg
Definition: PDMCC26XX_util.h:708
uint8_t intNum
Definition: PDMCC26XX_util.h:445
uint8_t intPriority
Definition: PDMCC26XX_util.h:447
union PDMCC26XX_I2S_AudioPinConfig PDMCC26XX_I2S_AudioPinConfig
PDMCC26XX_I2S Audio Pin configuration.
uint32_t PDMCC26XX_I2S_TransferSize
Definition: PDMCC26XX_util.h:401
struct PDMCC26XX_I2S_Object PDMCC26XX_I2S_Object
PDMCC26XX_I2S Object.
void *(* PDMCC26XX_I2S_MallocFxn)(size_t memSize)
PDMCC26XX_I2S_MallocFxn is a function pointer for the malloc function to be used by the driver...
Definition: PDMCC26XX_util.h:107
PDMCC26XX_I2S_Status status
Definition: PDMCC26XX_util.h:621
uint32_t baseAddr
Definition: PDMCC26XX_util.h:459
const PDMCC26XX_I2S_Config PDMCC26XX_I2S_config[]
PIN_Id bclkPin
Definition: PDMCC26XX_util.h:453
void PDMCC26XX_I2S_init(PDMCC26XX_I2S_Handle handle)
I2S CC26XX initialization.
PDMCC26XX_I2S_CallbackFxn callbackFxn
Definition: PDMCC26XX_util.h:704
© Copyright 1995-2019, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale