PDMCC26XX_util.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2023, 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 #include <ti/drivers/Power.h>
59 
60 #include <ti/drivers/dpl/HwiP.h>
61 #include <ti/drivers/dpl/SemaphoreP.h>
62 
63 /* Enable backwards-compatibility for legacy terminology if specified. */
64 #ifdef ENABLE_LEGACY_TERMINOLOGY
66 #endif
67 
68 #ifdef __cplusplus
69 extern "C" {
70 #endif
71 
78 #define xI2S_DEBUG
79 
83 #define PDMCC26XX_I2S_MIN_ALLOWED_QUEUE_SIZE 3
84 
88 #ifdef I2S_DEBUG
89  #define I2S_BLOCK_OVERHEAD_IN_BYTES 16
90 #else // I2S_DEBUG
91  #define I2S_BLOCK_OVERHEAD_IN_BYTES 12
92 #endif // I2S_DEBUG
93 
95 #define PDMCC26XX_I2S_CMD_SUCCESS 0
96 
97 #define PDMCC26XX_I2S_CMD_UNDEFINED -1
98 
99 #define PDMCC26XX_I2S_CMD_NO_SUCCESS -2
100 
102 #define PDMCC26XX_I2S_GENERIC_DISABLED 0
103 
104 #define PDMCC26XX_I2S_GENERIC_ENABLED 1
105 
111 typedef void *(*PDMCC26XX_I2S_MallocFxn)(size_t memSize);
112 
119 typedef void (*PDMCC26XX_I2S_FreeFxn)(void *ptr, size_t memSize);
120 
126 typedef struct
127 {
129  void *object;
130 
132  void const *hwAttrs;
134 
139 
143 typedef enum
144 {
177 
182 typedef enum
183 {
187 
196 #define PDMCC26XX_I2S_DEFAULT_SAMPLE_STAMP_MOD 0x0000FFFF
197 
211 #define PDMCC26XX_I2S_WordClockPhase_Single 0
212 
215 #define PDMCC26XX_I2S_WordClockPhase_Dual 1
216 
219 #define PDMCC26XX_I2S_WordClockPhase_UserDefined 2
220 
229 #define PDMCC26XX_I2S_SampleEdge_Negative 0
230 
233 #define PDMCC26XX_I2S_SampleEdge_Postive 1
234 
243 #define PDMCC26XX_I2S_WordClockSource_Ext 1
244 
247 #define PDMCC26XX_I2S_WordClockSource_Int 2
248 
257 #define PDMCC26XX_I2S_BitClockSource_Ext 0
258 
261 #define PDMCC26XX_I2S_BitClockSource_Int 1
262 
271 #define PDMCC26XX_I2S_ClockSource_Normal 0
272 
275 #define PDMCC26XX_I2S_ClockSource_Inverted 1
276 
286 #define PDMCC26XX_I2S_ADUsageDisabled 0
287 
290 #define PDMCC26XX_I2S_ADUsageInput 1
291 
294 #define PDMCC26XX_I2S_ADUsageOutput 2
295 
314 #define PDMCC26XX_I2S_CHAN0_ACT 0x00000001
315 
316 #define PDMCC26XX_I2S_CHAN1_ACT 0x00000002
317 
318 #define PDMCC26XX_I2S_CHAN2_ACT 0x00000004
319 
320 #define PDMCC26XX_I2S_CHAN3_ACT 0x00000008
321 
322 #define PDMCC26XX_I2S_CHAN4_ACT 0x00000010
323 
324 #define PDMCC26XX_I2S_CHAN5_ACT 0x00000020
325 
326 #define PDMCC26XX_I2S_CHAN6_ACT 0x00000040
327 
328 #define PDMCC26XX_I2S_CHAN7_ACT 0x00000080
329 
330 #define PDMCC26XX_I2S_MONO_MODE 0x00000001
331 
332 #define PDMCC26XX_I2S_STEREO_MODE 0x00000003
333 
334 #define PDMCC26XX_I2S_DISABLED_MODE 0x00000000
335 
336 #define PDMCC26XX_I2S_CHAN_CFG_MASK 0x000000FF
337 
347 #define PDMCC26XX_I2S_WordLengthMin 8
348 
349 #define PDMCC26XX_I2S_WordLength16 16
350 
351 #define PDMCC26XX_I2S_WordLengthMax 24
352 
361 #define PDMCC26XX_I2S_SinglePhase 0
362 
363 #define PDMCC26XX_I2S_DualPhase 1
364 
374 #define PDMCC26XX_I2S_NegativeEdge 0
375 
376 #define PDMCC26XX_I2S_PositiveEdge 1
377 
390 #define PDMCC26XX_I2S_MemLen16bit 0
391 
392 #define PDMCC26XX_I2S_MemLen24bit 1
393 
412 #define PDMCC26XX_I2S_FormatLJF 0
413 
414 #define PDMCC26XX_I2S_FormatI2SandDSP 1
415 
416 #define PDMCC26XX_I2S_FormatRJFmin 2
417 
418 #define PDMCC26XX_I2S_FormatRJFmax 255
419 
421 typedef uint32_t PDMCC26XX_I2S_TransferSize;
422 
447 typedef struct
448 {
450  uint8_t intNum;
452  uint8_t intPriority;
454  PowerCC26XX_Resource powerMngrId;
456  uint_least8_t cclkPin;
458  uint_least8_t bclkPin;
460  uint_least8_t wclkPin;
462  uint_least8_t ad0Pin;
464  uint32_t baseAddr;
466 
487 typedef struct
488 {
490  uint16_t wclkDiv;
494  uint16_t sampleOnPositiveEdge:1;
497  uint16_t wclkPhase:2;
499  uint16_t wclkInverted:1;
501  uint16_t wclkSource:2;
503  uint16_t bclkDiv:10;
505  uint16_t reserved:5;
507  uint16_t bclkSource:1;
509  uint16_t cclkDiv:10;
511 
534 {
536  struct
537  {
539  uint16_t ad1;
541  uint16_t ad0;
542  } driverLibParams;
544  struct
545  {
547  uint8_t ad1Usage:2;
549  uint8_t enableCclkPin:1;
551  uint8_t reserved:1;
553  uint8_t ad1NumOfChannels:4;
555  uint8_t ad1ChannelMask;
557  uint8_t ad0Usage:2;
559  uint8_t enableWclkPin:1;
561  uint8_t enableBclkPin:1;
563  uint8_t ad0NumOfChannels:4;
565  uint8_t ad0ChannelMask;
566  } bitFields;
571 #define PDMCC26XX_I2S_DIR_CHA_M (I2S_LINE_MASK | I2S_CHAN_CFG_MASK)
572 
589 typedef struct
590 {
592  uint8_t wordLength:5;
596  uint8_t sampleEdge:1;
598  uint8_t dualPhase:1;
600  uint8_t memLen:1;
602  uint8_t dataDelay;
604 
610 typedef enum
611 {
624 
630 typedef struct
631 {
632  void *arg;
633  PDMCC26XX_I2S_Status status;
635 
653 typedef struct
654 {
655  void *bufferIn;
657  PDMCC26XX_I2S_Status status;
659 
667 typedef struct
668 {
671 
678 typedef void (*PDMCC26XX_I2S_CallbackFxn)(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_StreamNotification *notification);
679 
684 typedef struct
685 {
686  uint8_t blockCount;
688  uint32_t requestTimeout;
689  PDMCC26XX_I2S_RequestMode requestMode;
690  PDMCC26XX_I2S_TransferSize blockSizeInSamples;
704 
710 typedef struct
711 {
712  bool isOpen;
713  uint8_t blockCount;
715  uint16_t blockSizeInBytes;
716  PDMCC26XX_I2S_RequestMode requestMode;
717  uint32_t requestTimeout;
718  int32_t sampleRate;
720  PDMCC26XX_I2S_TransferSize blockSizeInSamples;
730  HwiP_Struct hwi;
731  SemaphoreP_Struct blockComplete;
732  SemaphoreP_Struct semStopping;
735 
742 extern void PDMCC26XX_I2S_init(PDMCC26XX_I2S_Handle handle);
743 
766 extern PDMCC26XX_I2S_Handle PDMCC26XX_I2S_open(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_Params *params);
767 
782 extern void PDMCC26XX_I2S_close(PDMCC26XX_I2S_Handle handle);
783 
805 extern bool PDMCC26XX_I2S_startStream(PDMCC26XX_I2S_Handle handle);
806 
833 extern bool PDMCC26XX_I2S_stopStream(PDMCC26XX_I2S_Handle handle);
834 
863 extern bool PDMCC26XX_I2S_requestBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRequest *bufferRequest);
864 
883 extern void PDMCC26XX_I2S_releaseBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRelease *bufferRelease);
884 
885 #ifdef __cplusplus
886 }
887 #endif
888 
889 #endif /* ti_drivers_i2s_PDMCC26XX_I2S__include */
void PDMCC26XX_I2S_releaseBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRelease *bufferRelease)
Function for releasing buffer.
uint_least8_t bclkPin
Definition: PDMCC26XX_util.h:458
ADC_Params params
Definition: Driver_Init.h:11
SemaphoreP_Struct blockComplete
Definition: PDMCC26XX_util.h:731
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:686
PDMCC26XX_I2S_Status status
Definition: PDMCC26XX_util.h:657
PDMCC26XX_I2S_Mode
Definitions for various PDMCC26XX_I2S modes of operation.
Definition: PDMCC26XX_util.h:182
PDMCC26XX_I2S_TransferSize blockSizeInSamples
Definition: PDMCC26XX_util.h:720
uint_least8_t ad0Pin
Definition: PDMCC26XX_util.h:462
Definition: PDMCC26XX_util.h:148
Definition: PDMCC26XX_util.h:163
void * bufferHandleIn
Definition: PDMCC26XX_util.h:669
Power Manager.
PDMCC26XX_I2S_MallocFxn mallocFxn
Definition: PDMCC26XX_util.h:725
PDMCC26XX_I2S_StreamNotification * currentStream
Definition: PDMCC26XX_util.h:701
Power manager interface for CC26XX/CC13XX.
void const * hwAttrs
Definition: PDMCC26XX_util.h:132
uint16_t ad0
Definition: PDMCC26XX_util.h:541
PDMCC26XX_I2S_AudioPinConfig audioPinCfg
Definition: PDMCC26XX_util.h:729
Definition: PDMCC26XX_util.h:622
uint8_t enableBclkPin
Definition: PDMCC26XX_util.h:561
uint32_t requestTimeout
Definition: PDMCC26XX_util.h:717
PDMCC26XX_I2S_RequestMode requestMode
Definition: PDMCC26XX_util.h:716
Definition: PDMCC26XX_util.h:616
PDMCC26XX_I2S_FreeFxn freeFxn
Definition: PDMCC26XX_util.h:700
uint8_t reserved
Definition: PDMCC26XX_util.h:551
PDMCC26XX_I2S_MallocFxn mallocFxn
Definition: PDMCC26XX_util.h:699
uint8_t dataDelay
Definition: PDMCC26XX_util.h:602
struct PDMCC26XX_I2S_AudioPinConfig::@2 driverLibParams
A PDMCC26XX_I2S_BufferRequest data structure is used with PDMCC26XX_I2S_requestBuffer().
Definition: PDMCC26XX_util.h:653
Definition: PDMCC26XX_util.h:151
PDMCC26XX_I2S_RequestMode requestMode
Definition: PDMCC26XX_util.h:689
Definition: PDMCC26XX_util.h:146
uint16_t ad1
Definition: PDMCC26XX_util.h:539
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:678
Definition: PDMCC26XX_util.h:145
Definition: PDMCC26XX_util.h:166
PDMCC26XX_I2S Hardware configuration.
Definition: PDMCC26XX_util.h:589
Definition: PDMCC26XX_util.h:185
PDMCC26XX_I2S_CallbackFxn callbackFxn
Definition: PDMCC26XX_util.h:697
A PDMCC26XX_I2S_BufferRelease data structure is used with PDMCC26XX_I2S_releaseBuffer().
Definition: PDMCC26XX_util.h:667
void * bufferHandleIn
Definition: PDMCC26XX_util.h:656
Definition: PDMCC26XX_util.h:159
bool isOpen
Definition: PDMCC26XX_util.h:712
PDMCC26XX_I2S_Config * PDMCC26XX_I2S_Handle
A handle that is returned from a PDMCC26XX_I2S_open() call.
Definition: PDMCC26XX_util.h:138
uint8_t blockCount
Definition: PDMCC26XX_util.h:713
PDMCC26XX_I2S_RequestMode
PDMCC26XX_I2S Object.
Definition: PDMCC26XX_util.h:610
uint32_t requestTimeout
Definition: PDMCC26XX_util.h:688
bool PDMCC26XX_I2S_stopStream(PDMCC26XX_I2S_Handle handle)
Function for stopping an I2S interface.
uint16_t wclkDiv
Definition: PDMCC26XX_util.h:490
PDMCC26XX_I2S_StreamNotification * currentStream
Definition: PDMCC26XX_util.h:727
uint16_t blockSizeInBytes
Definition: PDMCC26XX_util.h:715
PDMCC26XX_I2S_AudioClockConfig audioClkCfg
Definition: PDMCC26XX_util.h:733
uint8_t ad1NumOfChannels
Definition: PDMCC26XX_util.h:553
Definition: PDMCC26XX_util.h:172
PDMCC26XX_I2S_TransferSize blockSizeInSamples
Definition: PDMCC26XX_util.h:690
SemaphoreP_Struct semStopping
Definition: PDMCC26XX_util.h:732
PDMCC26XX I2S Parameters are used when calling PDMCC26XX_I2S_open().
Definition: PDMCC26XX_util.h:684
uint8_t enableWclkPin
Definition: PDMCC26XX_util.h:559
uint8_t ad0Usage
Definition: PDMCC26XX_util.h:557
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:119
int32_t sampleRate
Definition: PDMCC26XX_util.h:718
uint_least8_t wclkPin
Definition: PDMCC26XX_util.h:460
void * arg
Definition: PDMCC26XX_util.h:632
PDMCC26XX_I2S_Status
Status codes that are set by the I2S driver.
Definition: PDMCC26XX_util.h:143
uint8_t ad1Usage
Definition: PDMCC26XX_util.h:547
PDMCC26XX_I2S Object.
Definition: PDMCC26XX_util.h:710
bool PDMCC26XX_I2S_startStream(PDMCC26XX_I2S_Handle handle)
Function for starting an I2S interface.
Definition: PDMCC26XX_util.h:184
void PDMCC26XX_I2S_close(PDMCC26XX_I2S_Handle handle)
Function to close a given CC26XX I2S peripheral specified by the I2S handle.
uint_least8_t cclkPin
Definition: PDMCC26XX_util.h:456
Definition: PDMCC26XX_util.h:147
void * object
Definition: PDMCC26XX_util.h:129
PDMCC26XX_I2S_FreeFxn freeFxn
Definition: PDMCC26XX_util.h:726
PDMCC26XX_I2S Audio Clock configuration.
Definition: PDMCC26XX_util.h:487
uint8_t ad0ChannelMask
Definition: PDMCC26XX_util.h:565
HwiP_Struct hwi
Definition: PDMCC26XX_util.h:730
PowerCC26XX_Resource powerMngrId
Definition: PDMCC26XX_util.h:454
A PDMCC26XX_I2S_StreamNotification data structure is used with PDMCC26XX_I2S_CallbackFxn(). Provides notification about available buffers and potential errors.
Definition: PDMCC26XX_util.h:630
void * bufferIn
Definition: PDMCC26XX_util.h:655
PDMCC26XX_I2S Hardware attributes.
Definition: PDMCC26XX_util.h:447
uint8_t enableCclkPin
Definition: PDMCC26XX_util.h:549
uint8_t ad0NumOfChannels
Definition: PDMCC26XX_util.h:563
The PDMCC26XX_I2S_Config structure contains a set of pointers used to characterize the PDMCC26XX_I2S ...
Definition: PDMCC26XX_util.h:126
uint8_t ad1ChannelMask
Definition: PDMCC26XX_util.h:555
Definition: PDMCC26XX_util.h:156
struct PDMCC26XX_I2S_AudioPinConfig::@3 bitFields
PDMCC26XX_I2S Audio Pin configuration.
Definition: PDMCC26XX_util.h:533
PDMCC26XX_I2S_AudioFormatConfig audioFmtCfg
Definition: PDMCC26XX_util.h:728
uint8_t intNum
Definition: PDMCC26XX_util.h:450
uint8_t intPriority
Definition: PDMCC26XX_util.h:452
union PDMCC26XX_I2S_AudioPinConfig PDMCC26XX_I2S_AudioPinConfig
PDMCC26XX_I2S Audio Pin configuration.
uint32_t PDMCC26XX_I2S_TransferSize
Definition: PDMCC26XX_util.h:421
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:111
PDMCC26XX_I2S_Status status
Definition: PDMCC26XX_util.h:633
uint32_t baseAddr
Definition: PDMCC26XX_util.h:464
Provide a translation layer for legacy terminology.
void PDMCC26XX_I2S_init(PDMCC26XX_I2S_Handle handle)
I2S CC26XX initialization.
PDMCC26XX_I2S_CallbackFxn callbackFxn
Definition: PDMCC26XX_util.h:724
© Copyright 1995-2023, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale