PDMCC26XX_util.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015-2022, 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 #ifdef __cplusplus
64 extern "C" {
65 #endif
66 
73 #define xI2S_DEBUG
74 
78 #define PDMCC26XX_I2S_MIN_ALLOWED_QUEUE_SIZE 3
79 
83 #ifdef I2S_DEBUG
84  #define I2S_BLOCK_OVERHEAD_IN_BYTES 16
85 #else // I2S_DEBUG
86  #define I2S_BLOCK_OVERHEAD_IN_BYTES 12
87 #endif // I2S_DEBUG
88 
90 #define PDMCC26XX_I2S_CMD_SUCCESS 0
91 
92 #define PDMCC26XX_I2S_CMD_UNDEFINED -1
93 
94 #define PDMCC26XX_I2S_CMD_NO_SUCCESS -2
95 
97 #define PDMCC26XX_I2S_GENERIC_DISABLED 0
98 
99 #define PDMCC26XX_I2S_GENERIC_ENABLED 1
100 
106 typedef void *(*PDMCC26XX_I2S_MallocFxn)(size_t memSize);
107 
114 typedef void (*PDMCC26XX_I2S_FreeFxn)(void *ptr, size_t memSize);
115 
121 typedef struct
122 {
124  void *object;
125 
127  void const *hwAttrs;
129 
134 
138 typedef enum
139 {
172 
177 typedef enum
178 {
182 
191 #define PDMCC26XX_I2S_DEFAULT_SAMPLE_STAMP_MOD 0x0000FFFF
192 
206 #define PDMCC26XX_I2S_WordClockPhase_Single 0
207 
210 #define PDMCC26XX_I2S_WordClockPhase_Dual 1
211 
214 #define PDMCC26XX_I2S_WordClockPhase_UserDefined 2
215 
224 #define PDMCC26XX_I2S_SampleEdge_Negative 0
225 
228 #define PDMCC26XX_I2S_SampleEdge_Postive 1
229 
238 #define PDMCC26XX_I2S_WordClockSource_Ext 1
239 
242 #define PDMCC26XX_I2S_WordClockSource_Int 2
243 
252 #define PDMCC26XX_I2S_BitClockSource_Ext 0
253 
256 #define PDMCC26XX_I2S_BitClockSource_Int 1
257 
266 #define PDMCC26XX_I2S_ClockSource_Normal 0
267 
270 #define PDMCC26XX_I2S_ClockSource_Inverted 1
271 
281 #define PDMCC26XX_I2S_ADUsageDisabled 0
282 
285 #define PDMCC26XX_I2S_ADUsageInput 1
286 
289 #define PDMCC26XX_I2S_ADUsageOutput 2
290 
309 #define PDMCC26XX_I2S_CHAN0_ACT 0x00000001
310 
311 #define PDMCC26XX_I2S_CHAN1_ACT 0x00000002
312 
313 #define PDMCC26XX_I2S_CHAN2_ACT 0x00000004
314 
315 #define PDMCC26XX_I2S_CHAN3_ACT 0x00000008
316 
317 #define PDMCC26XX_I2S_CHAN4_ACT 0x00000010
318 
319 #define PDMCC26XX_I2S_CHAN5_ACT 0x00000020
320 
321 #define PDMCC26XX_I2S_CHAN6_ACT 0x00000040
322 
323 #define PDMCC26XX_I2S_CHAN7_ACT 0x00000080
324 
325 #define PDMCC26XX_I2S_MONO_MODE 0x00000001
326 
327 #define PDMCC26XX_I2S_STEREO_MODE 0x00000003
328 
329 #define PDMCC26XX_I2S_DISABLED_MODE 0x00000000
330 
331 #define PDMCC26XX_I2S_CHAN_CFG_MASK 0x000000FF
332 
342 #define PDMCC26XX_I2S_WordLengthMin 8
343 
344 #define PDMCC26XX_I2S_WordLength16 16
345 
346 #define PDMCC26XX_I2S_WordLengthMax 24
347 
356 #define PDMCC26XX_I2S_SinglePhase 0
357 
358 #define PDMCC26XX_I2S_DualPhase 1
359 
369 #define PDMCC26XX_I2S_NegativeEdge 0
370 
371 #define PDMCC26XX_I2S_PositiveEdge 1
372 
385 #define PDMCC26XX_I2S_MemLen16bit 0
386 
387 #define PDMCC26XX_I2S_MemLen24bit 1
388 
407 #define PDMCC26XX_I2S_FormatLJF 0
408 
409 #define PDMCC26XX_I2S_FormatI2SandDSP 1
410 
411 #define PDMCC26XX_I2S_FormatRJFmin 2
412 
413 #define PDMCC26XX_I2S_FormatRJFmax 255
414 
416 typedef uint32_t PDMCC26XX_I2S_TransferSize;
417 
442 typedef struct
443 {
445  uint8_t intNum;
447  uint8_t intPriority;
449  PowerCC26XX_Resource powerMngrId;
451  uint_least8_t mclkPin;
453  uint_least8_t bclkPin;
455  uint_least8_t wclkPin;
457  uint_least8_t ad0Pin;
459  uint32_t baseAddr;
461 
482 typedef struct
483 {
485  uint16_t wclkDiv;
489  uint16_t sampleOnPositiveEdge:1;
492  uint16_t wclkPhase:2;
494  uint16_t wclkInverted:1;
496  uint16_t wclkSource:2;
498  uint16_t bclkDiv:10;
500  uint16_t reserved:5;
502  uint16_t bclkSource:1;
504  uint16_t mclkDiv:10;
506 
529 {
531  struct
532  {
534  uint16_t ad1;
536  uint16_t ad0;
537  } driverLibParams;
539  struct
540  {
542  uint8_t ad1Usage:2;
544  uint8_t enableMclkPin:1;
546  uint8_t reserved:1;
548  uint8_t ad1NumOfChannels:4;
550  uint8_t ad1ChannelMask;
552  uint8_t ad0Usage:2;
554  uint8_t enableWclkPin:1;
556  uint8_t enableBclkPin:1;
558  uint8_t ad0NumOfChannels:4;
560  uint8_t ad0ChannelMask;
561  } bitFields;
566 #define PDMCC26XX_I2S_DIR_CHA_M (I2S_LINE_MASK | I2S_CHAN_CFG_MASK)
567 
584 typedef struct
585 {
587  uint8_t wordLength:5;
591  uint8_t sampleEdge:1;
593  uint8_t dualPhase:1;
595  uint8_t memLen:1;
597  uint8_t dataDelay;
599 
605 typedef enum
606 {
619 
625 typedef struct
626 {
627  void *arg;
628  PDMCC26XX_I2S_Status status;
630 
648 typedef struct
649 {
650  void *bufferIn;
652  PDMCC26XX_I2S_Status status;
654 
662 typedef struct
663 {
666 
673 typedef void (*PDMCC26XX_I2S_CallbackFxn)(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_StreamNotification *notification);
674 
679 typedef struct
680 {
681  uint8_t blockCount;
683  uint32_t requestTimeout;
684  PDMCC26XX_I2S_RequestMode requestMode;
685  PDMCC26XX_I2S_TransferSize blockSizeInSamples;
699 
705 typedef struct
706 {
707  bool isOpen;
708  uint8_t blockCount;
710  uint16_t blockSizeInBytes;
711  PDMCC26XX_I2S_RequestMode requestMode;
712  uint32_t requestTimeout;
713  int32_t sampleRate;
715  PDMCC26XX_I2S_TransferSize blockSizeInSamples;
725  HwiP_Struct hwi;
726  SemaphoreP_Struct blockComplete;
727  SemaphoreP_Struct semStopping;
730 
737 extern void PDMCC26XX_I2S_init(PDMCC26XX_I2S_Handle handle);
738 
761 extern PDMCC26XX_I2S_Handle PDMCC26XX_I2S_open(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_Params *params);
762 
777 extern void PDMCC26XX_I2S_close(PDMCC26XX_I2S_Handle handle);
778 
800 extern bool PDMCC26XX_I2S_startStream(PDMCC26XX_I2S_Handle handle);
801 
828 extern bool PDMCC26XX_I2S_stopStream(PDMCC26XX_I2S_Handle handle);
829 
858 extern bool PDMCC26XX_I2S_requestBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRequest *bufferRequest);
859 
878 extern void PDMCC26XX_I2S_releaseBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRelease *bufferRelease);
879 
880 #ifdef __cplusplus
881 }
882 #endif
883 
884 #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:453
ADC_Params params
Definition: Driver_Init.h:11
SemaphoreP_Struct blockComplete
Definition: PDMCC26XX_util.h:726
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:681
PDMCC26XX_I2S_Status status
Definition: PDMCC26XX_util.h:652
PDMCC26XX_I2S_Mode
Definitions for various PDMCC26XX_I2S modes of operation.
Definition: PDMCC26XX_util.h:177
PDMCC26XX_I2S_TransferSize blockSizeInSamples
Definition: PDMCC26XX_util.h:715
uint_least8_t ad0Pin
Definition: PDMCC26XX_util.h:457
Definition: PDMCC26XX_util.h:143
Definition: PDMCC26XX_util.h:158
void * bufferHandleIn
Definition: PDMCC26XX_util.h:664
Power Manager.
PDMCC26XX_I2S_MallocFxn mallocFxn
Definition: PDMCC26XX_util.h:720
PDMCC26XX_I2S_StreamNotification * currentStream
Definition: PDMCC26XX_util.h:696
Power manager interface for CC26XX/CC13XX.
void const * hwAttrs
Definition: PDMCC26XX_util.h:127
uint16_t ad0
Definition: PDMCC26XX_util.h:536
PDMCC26XX_I2S_AudioPinConfig audioPinCfg
Definition: PDMCC26XX_util.h:724
Definition: PDMCC26XX_util.h:617
uint8_t enableBclkPin
Definition: PDMCC26XX_util.h:556
uint32_t requestTimeout
Definition: PDMCC26XX_util.h:712
PDMCC26XX_I2S_RequestMode requestMode
Definition: PDMCC26XX_util.h:711
Definition: PDMCC26XX_util.h:611
PDMCC26XX_I2S_FreeFxn freeFxn
Definition: PDMCC26XX_util.h:695
uint8_t reserved
Definition: PDMCC26XX_util.h:546
PDMCC26XX_I2S_MallocFxn mallocFxn
Definition: PDMCC26XX_util.h:694
uint8_t dataDelay
Definition: PDMCC26XX_util.h:597
struct PDMCC26XX_I2S_AudioPinConfig::@2 driverLibParams
A PDMCC26XX_I2S_BufferRequest data structure is used with PDMCC26XX_I2S_requestBuffer().
Definition: PDMCC26XX_util.h:648
Definition: PDMCC26XX_util.h:146
PDMCC26XX_I2S_RequestMode requestMode
Definition: PDMCC26XX_util.h:684
Definition: PDMCC26XX_util.h:141
uint16_t ad1
Definition: PDMCC26XX_util.h:534
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:673
Definition: PDMCC26XX_util.h:140
Definition: PDMCC26XX_util.h:161
PDMCC26XX_I2S Hardware configuration.
Definition: PDMCC26XX_util.h:584
Definition: PDMCC26XX_util.h:180
PDMCC26XX_I2S_CallbackFxn callbackFxn
Definition: PDMCC26XX_util.h:692
A PDMCC26XX_I2S_BufferRelease data structure is used with PDMCC26XX_I2S_releaseBuffer().
Definition: PDMCC26XX_util.h:662
void * bufferHandleIn
Definition: PDMCC26XX_util.h:651
Definition: PDMCC26XX_util.h:154
bool isOpen
Definition: PDMCC26XX_util.h:707
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:708
PDMCC26XX_I2S_RequestMode
PDMCC26XX_I2S Object.
Definition: PDMCC26XX_util.h:605
uint32_t requestTimeout
Definition: PDMCC26XX_util.h:683
bool PDMCC26XX_I2S_stopStream(PDMCC26XX_I2S_Handle handle)
Function for stopping an I2S interface.
uint16_t wclkDiv
Definition: PDMCC26XX_util.h:485
PDMCC26XX_I2S_StreamNotification * currentStream
Definition: PDMCC26XX_util.h:722
uint16_t blockSizeInBytes
Definition: PDMCC26XX_util.h:710
PDMCC26XX_I2S_AudioClockConfig audioClkCfg
Definition: PDMCC26XX_util.h:728
uint8_t ad1NumOfChannels
Definition: PDMCC26XX_util.h:548
Definition: PDMCC26XX_util.h:167
PDMCC26XX_I2S_TransferSize blockSizeInSamples
Definition: PDMCC26XX_util.h:685
SemaphoreP_Struct semStopping
Definition: PDMCC26XX_util.h:727
PDMCC26XX I2S Parameters are used when calling PDMCC26XX_I2S_open().
Definition: PDMCC26XX_util.h:679
uint8_t enableWclkPin
Definition: PDMCC26XX_util.h:554
uint8_t ad0Usage
Definition: PDMCC26XX_util.h:552
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:114
int32_t sampleRate
Definition: PDMCC26XX_util.h:713
uint_least8_t wclkPin
Definition: PDMCC26XX_util.h:455
void * arg
Definition: PDMCC26XX_util.h:627
PDMCC26XX_I2S_Status
Status codes that are set by the I2S driver.
Definition: PDMCC26XX_util.h:138
uint8_t ad1Usage
Definition: PDMCC26XX_util.h:542
PDMCC26XX_I2S Object.
Definition: PDMCC26XX_util.h:705
bool PDMCC26XX_I2S_startStream(PDMCC26XX_I2S_Handle handle)
Function for starting an I2S interface.
Definition: PDMCC26XX_util.h:179
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:142
void * object
Definition: PDMCC26XX_util.h:124
PDMCC26XX_I2S_FreeFxn freeFxn
Definition: PDMCC26XX_util.h:721
PDMCC26XX_I2S Audio Clock configuration.
Definition: PDMCC26XX_util.h:482
uint8_t ad0ChannelMask
Definition: PDMCC26XX_util.h:560
HwiP_Struct hwi
Definition: PDMCC26XX_util.h:725
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:625
void * bufferIn
Definition: PDMCC26XX_util.h:650
PDMCC26XX_I2S Hardware attributes.
Definition: PDMCC26XX_util.h:442
uint_least8_t mclkPin
Definition: PDMCC26XX_util.h:451
uint8_t ad0NumOfChannels
Definition: PDMCC26XX_util.h:558
The PDMCC26XX_I2S_Config structure contains a set of pointers used to characterize the PDMCC26XX_I2S ...
Definition: PDMCC26XX_util.h:121
uint8_t ad1ChannelMask
Definition: PDMCC26XX_util.h:550
Definition: PDMCC26XX_util.h:151
struct PDMCC26XX_I2S_AudioPinConfig::@3 bitFields
PDMCC26XX_I2S Audio Pin configuration.
Definition: PDMCC26XX_util.h:528
PDMCC26XX_I2S_AudioFormatConfig audioFmtCfg
Definition: PDMCC26XX_util.h:723
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:416
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:106
PDMCC26XX_I2S_Status status
Definition: PDMCC26XX_util.h:628
uint32_t baseAddr
Definition: PDMCC26XX_util.h:459
void PDMCC26XX_I2S_init(PDMCC26XX_I2S_Handle handle)
I2S CC26XX initialization.
uint8_t enableMclkPin
Definition: PDMCC26XX_util.h:544
PDMCC26XX_I2S_CallbackFxn callbackFxn
Definition: PDMCC26XX_util.h:719
© Copyright 1995-2022, Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy policy | Terms of use | Terms of sale