PDMCC26XX_util.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2019, 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 
58 #include <ti/drivers/Power.h>
60 
61 #include <ti/drivers/dpl/HwiP.h>
62 #include <ti/drivers/dpl/SemaphoreP.h>
63 
64 #ifdef __cplusplus
65 extern "C" {
66 #endif
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 
122 typedef struct {
124  void *object;
125 
127  void const *hwAttrs;
129 
134 
138 typedef enum {
171 
176 typedef enum {
180 
189 #define PDMCC26XX_I2S_DEFAULT_SAMPLE_STAMP_MOD 0x0000FFFF
190 
204 #define PDMCC26XX_I2S_WordClockPhase_Single 0
205 
208 #define PDMCC26XX_I2S_WordClockPhase_Dual 1
209 
212 #define PDMCC26XX_I2S_WordClockPhase_UserDefined 2
213 
222 #define PDMCC26XX_I2S_SampleEdge_Negative 0
223 
226 #define PDMCC26XX_I2S_SampleEdge_Postive 1
227 
236 #define PDMCC26XX_I2S_WordClockSource_Ext 1
237 
240 #define PDMCC26XX_I2S_WordClockSource_Int 2
241 
250 #define PDMCC26XX_I2S_BitClockSource_Ext 0
251 
254 #define PDMCC26XX_I2S_BitClockSource_Int 1
255 
264 #define PDMCC26XX_I2S_ClockSource_Normal 0
265 
268 #define PDMCC26XX_I2S_ClockSource_Inverted 1
269 
279 #define PDMCC26XX_I2S_ADUsageDisabled 0
280 
283 #define PDMCC26XX_I2S_ADUsageInput 1
284 
287 #define PDMCC26XX_I2S_ADUsageOutput 2
288 
307 #define PDMCC26XX_I2S_CHAN0_ACT 0x00000001
308 
309 #define PDMCC26XX_I2S_CHAN1_ACT 0x00000002
310 
311 #define PDMCC26XX_I2S_CHAN2_ACT 0x00000004
312 
313 #define PDMCC26XX_I2S_CHAN3_ACT 0x00000008
314 
315 #define PDMCC26XX_I2S_CHAN4_ACT 0x00000010
316 
317 #define PDMCC26XX_I2S_CHAN5_ACT 0x00000020
318 
319 #define PDMCC26XX_I2S_CHAN6_ACT 0x00000040
320 
321 #define PDMCC26XX_I2S_CHAN7_ACT 0x00000080
322 
323 #define PDMCC26XX_I2S_MONO_MODE 0x00000001
324 
325 #define PDMCC26XX_I2S_STEREO_MODE 0x00000003
326 
327 #define PDMCC26XX_I2S_DISABLED_MODE 0x00000000
328 
329 #define PDMCC26XX_I2S_CHAN_CFG_MASK 0x000000FF
330 
340 #define PDMCC26XX_I2S_WordLengthMin 8
341 
342 #define PDMCC26XX_I2S_WordLength16 16
343 
344 #define PDMCC26XX_I2S_WordLengthMax 24
345 
354 #define PDMCC26XX_I2S_SinglePhase 0
355 
356 #define PDMCC26XX_I2S_DualPhase 1
357 
367 #define PDMCC26XX_I2S_NegativeEdge 0
368 
369 #define PDMCC26XX_I2S_PositiveEdge 1
370 
383 #define PDMCC26XX_I2S_MemLen16bit 0
384 
385 #define PDMCC26XX_I2S_MemLen24bit 1
386 
405 #define PDMCC26XX_I2S_FormatLJF 0
406 
407 #define PDMCC26XX_I2S_FormatI2SandDSP 1
408 
409 #define PDMCC26XX_I2S_FormatRJFmin 2
410 
411 #define PDMCC26XX_I2S_FormatRJFmax 255
412 
414 typedef uint32_t PDMCC26XX_I2S_TransferSize;
415 
440 typedef struct {
442  uint8_t intNum;
444  uint8_t intPriority;
446  PowerCC26XX_Resource powerMngrId;
456  uint32_t baseAddr;
458 
479 typedef struct {
481  uint16_t wclkDiv;
485  uint16_t sampleOnPositiveEdge:1;
487  uint16_t wclkPhase:2;
489  uint16_t wclkInverted:1;
491  uint16_t wclkSource:2;
493  uint16_t bclkDiv:10;
495  uint16_t reserved:5;
497  uint16_t bclkSource:1;
499  uint16_t mclkDiv:10;
501 
525  struct {
527  uint16_t ad1;
529  uint16_t ad0;
530  } driverLibParams;
532  struct {
534  uint8_t ad1Usage:2;
536  uint8_t enableMclkPin:1;
538  uint8_t reserved:1;
540  uint8_t ad1NumOfChannels:4;
542  uint8_t ad1ChannelMask;
544  uint8_t ad0Usage:2;
546  uint8_t enableWclkPin:1;
548  uint8_t enableBclkPin:1;
550  uint8_t ad0NumOfChannels:4;
552  uint8_t ad0ChannelMask;
553  } bitFields;
558 #define PDMCC26XX_I2S_DIR_CHA_M (I2S_LINE_MASK | I2S_CHAN_CFG_MASK)
559 
576 typedef struct {
578  uint8_t wordLength:5;
582  uint8_t sampleEdge:1;
584  uint8_t dualPhase:1;
586  uint8_t memLen:1;
588  uint8_t dataDelay;
590 
591 
597 typedef enum {
610 
616 typedef struct {
617  void *arg;
618  PDMCC26XX_I2S_Status status;
620 
638 typedef struct {
639  void *bufferIn;
641  PDMCC26XX_I2S_Status status;
643 
651 typedef struct {
654 
661 typedef void (*PDMCC26XX_I2S_CallbackFxn) (PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_StreamNotification *notification);
662 
667 typedef struct {
668  uint8_t blockCount;
669  uint32_t requestTimeout;
670  PDMCC26XX_I2S_RequestMode requestMode;
671  PDMCC26XX_I2S_TransferSize blockSizeInSamples;
684 
690 typedef struct {
691  bool isOpen;
692  uint8_t blockCount;
693  uint16_t blockSizeInBytes;
694  PDMCC26XX_I2S_RequestMode requestMode;
695  uint32_t requestTimeout;
696  int32_t sampleRate;
698  PDMCC26XX_I2S_TransferSize blockSizeInSamples;
707  HwiP_Struct hwi;
708  SemaphoreP_Struct blockComplete;
709  SemaphoreP_Struct semStopping;
713 
720 extern void PDMCC26XX_I2S_init(PDMCC26XX_I2S_Handle handle);
721 
744 extern PDMCC26XX_I2S_Handle PDMCC26XX_I2S_open(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_Params *params);
745 
760 extern void PDMCC26XX_I2S_close(PDMCC26XX_I2S_Handle handle);
761 
783 extern bool PDMCC26XX_I2S_startStream(PDMCC26XX_I2S_Handle handle);
784 
811 extern bool PDMCC26XX_I2S_stopStream(PDMCC26XX_I2S_Handle handle);
812 
841 extern bool PDMCC26XX_I2S_requestBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRequest *bufferRequest);
842 
861 extern void PDMCC26XX_I2S_releaseBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRelease *bufferRelease);
862 
863 #ifdef __cplusplus
864 }
865 #endif
866 
867 #endif /* ti_drivers_i2s_PDMCC26XX_I2S__include */
uint8_t PIN_Id
Pin identifier data type.
Definition: PIN.h:578
void PDMCC26XX_I2S_releaseBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRelease *bufferRelease)
Function for releasing buffer.
SemaphoreP_Struct blockComplete
Definition: PDMCC26XX_util.h:708
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:668
PDMCC26XX_I2S_Status status
Definition: PDMCC26XX_util.h:641
PDMCC26XX_I2S_Mode
Definitions for various PDMCC26XX_I2S modes of operation.
Definition: PDMCC26XX_util.h:176
PDMCC26XX_I2S_TransferSize blockSizeInSamples
Definition: PDMCC26XX_util.h:698
Definition: PDMCC26XX_util.h:142
Definition: PDMCC26XX_util.h:157
void * bufferHandleIn
Definition: PDMCC26XX_util.h:652
Power Manager.
PDMCC26XX_I2S_MallocFxn mallocFxn
Definition: PDMCC26XX_util.h:702
PDMCC26XX_I2S_StreamNotification * currentStream
Definition: PDMCC26XX_util.h:682
Power manager interface for CC26XX/CC13XX.
void const * hwAttrs
Definition: PDMCC26XX_util.h:127
uint16_t ad0
Definition: PDMCC26XX_util.h:529
PDMCC26XX_I2S_AudioPinConfig audioPinCfg
Definition: PDMCC26XX_util.h:706
Definition: PDMCC26XX_util.h:608
uint8_t enableBclkPin
Definition: PDMCC26XX_util.h:548
uint32_t requestTimeout
Definition: PDMCC26XX_util.h:695
PIN_Id ad0Pin
Definition: PDMCC26XX_util.h:454
PDMCC26XX_I2S_RequestMode requestMode
Definition: PDMCC26XX_util.h:694
Definition: PDMCC26XX_util.h:602
PDMCC26XX_I2S_FreeFxn freeFxn
Definition: PDMCC26XX_util.h:681
uint8_t reserved
Definition: PDMCC26XX_util.h:538
PDMCC26XX_I2S_MallocFxn mallocFxn
Definition: PDMCC26XX_util.h:680
uint8_t dataDelay
Definition: PDMCC26XX_util.h:588
A PDMCC26XX_I2S_BufferRequest data structure is used with PDMCC26XX_I2S_requestBuffer().
Definition: PDMCC26XX_util.h:638
Definition: PDMCC26XX_util.h:145
PDMCC26XX_I2S_RequestMode requestMode
Definition: PDMCC26XX_util.h:670
Definition: PDMCC26XX_util.h:140
uint16_t ad1
Definition: PDMCC26XX_util.h:527
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:661
PIN_Id wclkPin
Definition: PDMCC26XX_util.h:452
Definition: PDMCC26XX_util.h:139
Definition: PDMCC26XX_util.h:160
PDMCC26XX_I2S Hardware configuration.
Definition: PDMCC26XX_util.h:576
Definition: PDMCC26XX_util.h:178
PDMCC26XX_I2S_CallbackFxn callbackFxn
Definition: PDMCC26XX_util.h:678
A PDMCC26XX_I2S_BufferRelease data structure is used with PDMCC26XX_I2S_releaseBuffer().
Definition: PDMCC26XX_util.h:651
PIN_Id mclkPin
Definition: PDMCC26XX_util.h:448
void * bufferHandleIn
Definition: PDMCC26XX_util.h:640
Definition: PDMCC26XX_util.h:153
bool isOpen
Definition: PDMCC26XX_util.h:691
PDMCC26XX_I2S_Config * PDMCC26XX_I2S_Handle
A handle that is returned from a PDMCC26XX_I2S_open() call.
Definition: PDMCC26XX_util.h:133
uint8_t blockCount
Definition: PDMCC26XX_util.h:692
PDMCC26XX_I2S_RequestMode
PDMCC26XX_I2S Object.
Definition: PDMCC26XX_util.h:597
Device-specific pin & GPIO driver for CC26xx family [def].
uint32_t requestTimeout
Definition: PDMCC26XX_util.h:669
bool PDMCC26XX_I2S_stopStream(PDMCC26XX_I2S_Handle handle)
Function for stopping an I2S interface.
uint16_t wclkDiv
Definition: PDMCC26XX_util.h:481
PDMCC26XX_I2S_StreamNotification * currentStream
Definition: PDMCC26XX_util.h:704
uint16_t blockSizeInBytes
Definition: PDMCC26XX_util.h:693
PDMCC26XX_I2S_AudioClockConfig audioClkCfg
Definition: PDMCC26XX_util.h:711
uint8_t ad1NumOfChannels
Definition: PDMCC26XX_util.h:540
Definition: PDMCC26XX_util.h:166
PDMCC26XX_I2S_TransferSize blockSizeInSamples
Definition: PDMCC26XX_util.h:671
SemaphoreP_Struct semStopping
Definition: PDMCC26XX_util.h:709
PDMCC26XX I2S Parameters are used when calling PDMCC26XX_I2S_open().
Definition: PDMCC26XX_util.h:667
uint8_t enableWclkPin
Definition: PDMCC26XX_util.h:546
uint8_t ad0Usage
Definition: PDMCC26XX_util.h:544
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:696
PIN_State pinState
Definition: PDMCC26XX_util.h:710
void * arg
Definition: PDMCC26XX_util.h:617
PDMCC26XX_I2S_Status
Status codes that are set by the I2S driver.
Definition: PDMCC26XX_util.h:138
uint8_t ad1Usage
Definition: PDMCC26XX_util.h:534
underlying data structure for type PIN_State
Definition: PIN.h:708
PDMCC26XX_I2S Object.
Definition: PDMCC26XX_util.h:690
bool PDMCC26XX_I2S_startStream(PDMCC26XX_I2S_Handle handle)
Function for starting an I2S interface.
Definition: PDMCC26XX_util.h:177
struct PDMCC26XX_I2S_AudioPinConfig::@2 bitFields
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:141
void * object
Definition: PDMCC26XX_util.h:124
PDMCC26XX_I2S_FreeFxn freeFxn
Definition: PDMCC26XX_util.h:703
PDMCC26XX_I2S Audio Clock configuration.
Definition: PDMCC26XX_util.h:479
uint8_t ad0ChannelMask
Definition: PDMCC26XX_util.h:552
HwiP_Struct hwi
Definition: PDMCC26XX_util.h:707
PowerCC26XX_Resource powerMngrId
Definition: PDMCC26XX_util.h:446
A PDMCC26XX_I2S_StreamNotification data structure is used with PDMCC26XX_I2S_CallbackFxn(). Provides notification about available buffers and potential errors.
Definition: PDMCC26XX_util.h:616
void * bufferIn
Definition: PDMCC26XX_util.h:639
PDMCC26XX_I2S Hardware attributes.
Definition: PDMCC26XX_util.h:440
PIN_Handle pinHandle
Definition: PDMCC26XX_util.h:697
uint8_t ad0NumOfChannels
Definition: PDMCC26XX_util.h:550
The PDMCC26XX_I2S_Config structure contains a set of pointers used to characterize the PDMCC26XX_I2S ...
Definition: PDMCC26XX_util.h:122
uint8_t ad1ChannelMask
Definition: PDMCC26XX_util.h:542
Definition: PDMCC26XX_util.h:150
PDMCC26XX_I2S Audio Pin configuration.
Definition: PDMCC26XX_util.h:523
PDMCC26XX_I2S_AudioFormatConfig audioFmtCfg
Definition: PDMCC26XX_util.h:705
uint8_t intNum
Definition: PDMCC26XX_util.h:442
uint8_t intPriority
Definition: PDMCC26XX_util.h:444
union PDMCC26XX_I2S_AudioPinConfig PDMCC26XX_I2S_AudioPinConfig
PDMCC26XX_I2S Audio Pin configuration.
uint32_t PDMCC26XX_I2S_TransferSize
Definition: PDMCC26XX_util.h:414
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:618
uint32_t baseAddr
Definition: PDMCC26XX_util.h:456
struct PDMCC26XX_I2S_AudioPinConfig::@1 driverLibParams
PIN_Id bclkPin
Definition: PDMCC26XX_util.h:450
void PDMCC26XX_I2S_init(PDMCC26XX_I2S_Handle handle)
I2S CC26XX initialization.
uint8_t enableMclkPin
Definition: PDMCC26XX_util.h:536
PDMCC26XX_I2S_CallbackFxn callbackFxn
Definition: PDMCC26XX_util.h:701
© Copyright 1995-2019, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale