BLE-Stack APIs  1.00.00
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 
61 #include <ti/drivers/pin/PINCC26XX.h>
62 #include <ti/drivers/Power.h>
63 #include <ti/drivers/power/PowerCC26XX.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 
112 typedef void *(*PDMCC26XX_I2S_MallocFxn)(size_t memSize);
113 
120 typedef void (*PDMCC26XX_I2S_FreeFxn)(void *ptr, size_t memSize);
121 
126 
130 typedef enum PDMCC26XX_I2S_Status {
163 
168 typedef enum PDMCC26XX_I2S_Mode {
172 
181 #define PDMCC26XX_I2S_DEFAULT_SAMPLE_STAMP_MOD 0x0000FFFF
182 
196 #define PDMCC26XX_I2S_WordClockPhase_Single 0
197 
200 #define PDMCC26XX_I2S_WordClockPhase_Dual 1
201 
204 #define PDMCC26XX_I2S_WordClockPhase_UserDefined 2
205 
214 #define PDMCC26XX_I2S_SampleEdge_Negative 0
215 
218 #define PDMCC26XX_I2S_SampleEdge_Postive 1
219 
228 #define PDMCC26XX_I2S_WordClockSource_Ext 1
229 
232 #define PDMCC26XX_I2S_WordClockSource_Int 2
233 
242 #define PDMCC26XX_I2S_BitClockSource_Ext 0
243 
246 #define PDMCC26XX_I2S_BitClockSource_Int 1
247 
256 #define PDMCC26XX_I2S_ClockSource_Normal 0
257 
260 #define PDMCC26XX_I2S_ClockSource_Inverted 1
261 
271 #define PDMCC26XX_I2S_ADUsageDisabled 0
272 
275 #define PDMCC26XX_I2S_ADUsageInput 1
276 
279 #define PDMCC26XX_I2S_ADUsageOutput 2
280 
299 #define PDMCC26XX_I2S_CHAN0_ACT 0x00000001
300 
301 #define PDMCC26XX_I2S_CHAN1_ACT 0x00000002
302 
303 #define PDMCC26XX_I2S_CHAN2_ACT 0x00000004
304 
305 #define PDMCC26XX_I2S_CHAN3_ACT 0x00000008
306 
307 #define PDMCC26XX_I2S_CHAN4_ACT 0x00000010
308 
309 #define PDMCC26XX_I2S_CHAN5_ACT 0x00000020
310 
311 #define PDMCC26XX_I2S_CHAN6_ACT 0x00000040
312 
313 #define PDMCC26XX_I2S_CHAN7_ACT 0x00000080
314 
315 #define PDMCC26XX_I2S_MONO_MODE 0x00000001
316 
317 #define PDMCC26XX_I2S_STEREO_MODE 0x00000003
318 
319 #define PDMCC26XX_I2S_DISABLED_MODE 0x00000000
320 
321 #define PDMCC26XX_I2S_CHAN_CFG_MASK 0x000000FF
322 
332 #define PDMCC26XX_I2S_WordLengthMin 8
333 
334 #define PDMCC26XX_I2S_WordLength16 16
335 
336 #define PDMCC26XX_I2S_WordLengthMax 24
337 
346 #define PDMCC26XX_I2S_SinglePhase 0
347 
348 #define PDMCC26XX_I2S_DualPhase 1
349 
359 #define PDMCC26XX_I2S_NegativeEdge 0
360 
361 #define PDMCC26XX_I2S_PositiveEdge 1
362 
375 #define PDMCC26XX_I2S_MemLen16bit 0
376 
377 #define PDMCC26XX_I2S_MemLen24bit 1
378 
397 #define PDMCC26XX_I2S_FormatLJF 0
398 
399 #define PDMCC26XX_I2S_FormatI2SandDSP 1
400 
401 #define PDMCC26XX_I2S_FormatRJFmin 2
402 
403 #define PDMCC26XX_I2S_FormatRJFmax 255
404 
406 typedef uint32_t PDMCC26XX_I2S_TransferSize;
407 
413 typedef struct PDMCC26XX_I2S_Config {
415  void *object;
416 
418  void const *hwAttrs;
420 
423 
448 typedef struct PDMCC26XX_I2S_HWAttrs {
450  uint8_t intNum;
452  uint8_t intPriority;
454  PowerCC26XX_Resource powerMngrId;
456  PIN_Id mclkPin;
458  PIN_Id bclkPin;
460  PIN_Id wclkPin;
462  PIN_Id ad0Pin;
464  uint32_t baseAddr;
466 
489  uint16_t wclkDiv;
493  uint16_t sampleOnPositiveEdge:1;
495  uint16_t wclkPhase:2;
497  uint16_t wclkInverted:1;
499  uint16_t wclkSource:2;
501  uint16_t bclkDiv:10;
503  uint16_t reserved:5;
505  uint16_t bclkSource:1;
507  uint16_t mclkDiv:10;
509 
533  struct {
535  uint16_t ad1;
537  uint16_t ad0;
538  } driverLibParams;
540  struct {
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 
586  uint8_t wordLength:5;
590  uint8_t sampleEdge:1;
592  uint8_t dualPhase:1;
594  uint8_t memLen:1;
596  uint8_t dataDelay;
598 
599 
618 
625  void *arg;
626  PDMCC26XX_I2S_Status status;
628 
647  void *bufferIn;
649  PDMCC26XX_I2S_Status status;
651 
662 
669 typedef void (*PDMCC26XX_I2S_CallbackFxn) (PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_StreamNotification *notification);
670 
675 typedef struct PDMCC26XX_I2S_Params {
676  uint8_t blockCount;
677  uint32_t requestTimeout;
678  PDMCC26XX_I2S_RequestMode requestMode;
679  PDMCC26XX_I2S_TransferSize blockSizeInSamples;
692 
698 typedef struct PDMCC26XX_I2S_Object {
699  bool isOpen;
700  uint8_t blockCount;
701  uint16_t blockSizeInBytes;
702  PDMCC26XX_I2S_RequestMode requestMode;
703  uint32_t requestTimeout;
704  int32_t sampleRate;
705  PIN_Handle pinHandle;
706  PDMCC26XX_I2S_TransferSize blockSizeInSamples;
715  ti_sysbios_family_arm_m3_Hwi_Struct hwi;
716  Semaphore_Struct blockComplete;
717  Semaphore_Struct semStopping;
718  PIN_State pinState;
721 
728 extern void PDMCC26XX_I2S_init(PDMCC26XX_I2S_Handle handle);
729 
749 extern bool PDMCC26XX_I2S_Params_init(PDMCC26XX_I2S_Params *params, PDMCC26XX_I2S_Mode mode, void *modeSpecificParams);
750 
775 extern PDMCC26XX_I2S_Handle PDMCC26XX_I2S_open(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_Params *params);
776 
791 extern void PDMCC26XX_I2S_close(PDMCC26XX_I2S_Handle handle);
792 
814 extern bool PDMCC26XX_I2S_startStream(PDMCC26XX_I2S_Handle handle);
815 
842 extern bool PDMCC26XX_I2S_stopStream(PDMCC26XX_I2S_Handle handle);
843 
872 extern bool PDMCC26XX_I2S_requestBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRequest *bufferRequest);
873 
892 extern Void PDMCC26XX_I2S_releaseBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRelease *bufferRelease);
893 
894 /* Do not interfere with the app if they include the family Hwi module */
895 #undef ti_sysbios_family_arm_m3_Hwi__nolocalnames
896 
897 #ifdef __cplusplus
898 }
899 #endif
900 
901 #endif /* ti_drivers_i2s_PDMCC26XX_I2S__include */
PIN_Id wclkPin
Definition: PDMCC26XX_util.h:460
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.
PDMCC26XX_I2S_AudioPinConfig audioPinCfg
Definition: PDMCC26XX_util.h:714
uint8_t ad0ChannelMask
Definition: PDMCC26XX_util.h:560
bool PDMCC26XX_I2S_requestBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRequest *bufferRequest)
Function for requesting buffer.
PDMCC26XX_I2S_Mode
Definitions for various PDMCC26XX_I2S modes of operation.
Definition: PDMCC26XX_util.h:168
void * arg
Definition: PDMCC26XX_util.h:625
Semaphore_Struct blockComplete
Definition: PDMCC26XX_util.h:716
struct PDMCC26XX_I2S_Config PDMCC26XX_I2S_Config
The PDMCC26XX_I2S_Config structure contains a set of pointers used to characterize the PDMCC26XX_I2S ...
PDMCC26XX_I2S_TransferSize blockSizeInSamples
Definition: PDMCC26XX_util.h:679
uint8_t intNum
Definition: PDMCC26XX_util.h:450
struct PDMCC26XX_I2S_AudioClockConfig PDMCC26XX_I2S_AudioClockConfig
PDMCC26XX_I2S Audio Clock configuration.
uint16_t ad0
Definition: PDMCC26XX_util.h:537
Definition: PDMCC26XX_util.h:134
Definition: PDMCC26XX_util.h:149
uint16_t blockSizeInBytes
Definition: PDMCC26XX_util.h:701
uint8_t ad1ChannelMask
Definition: PDMCC26XX_util.h:550
PDMCC26XX_I2S_FreeFxn freeFxn
Definition: PDMCC26XX_util.h:689
struct PDMCC26XX_I2S_Config * PDMCC26XX_I2S_Handle
A handle that is returned from a PDMCC26XX_I2S_open() call.
Definition: PDMCC26XX_util.h:125
PIN_Id bclkPin
Definition: PDMCC26XX_util.h:458
uint32_t requestTimeout
Definition: PDMCC26XX_util.h:677
PDMCC26XX_I2S_MallocFxn mallocFxn
Definition: PDMCC26XX_util.h:688
Semaphore_Struct semStopping
Definition: PDMCC26XX_util.h:717
Definition: PDMCC26XX_util.h:616
uint32_t baseAddr
Definition: PDMCC26XX_util.h:464
Definition: PDMCC26XX_util.h:610
PDMCC26XX_I2S_MallocFxn mallocFxn
Definition: PDMCC26XX_util.h:710
A PDMCC26XX_I2S_BufferRequest data structure is used with PDMCC26XX_I2S_requestBuffer().
Definition: PDMCC26XX_util.h:646
Definition: PDMCC26XX_util.h:137
Definition: PDMCC26XX_util.h:132
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:669
Definition: PDMCC26XX_util.h:131
Definition: PDMCC26XX_util.h:152
PDMCC26XX_I2S_Status status
Definition: PDMCC26XX_util.h:626
PDMCC26XX_I2S Hardware configuration.
Definition: PDMCC26XX_util.h:584
Definition: PDMCC26XX_util.h:170
A PDMCC26XX_I2S_BufferRelease data structure is used with PDMCC26XX_I2S_releaseBuffer().
Definition: PDMCC26XX_util.h:659
Definition: PDMCC26XX_util.h:145
struct PDMCC26XX_I2S_AudioFormatConfig PDMCC26XX_I2S_AudioFormatConfig
PDMCC26XX_I2S Hardware configuration.
PDMCC26XX_I2S_RequestMode
PDMCC26XX_I2S Object.
Definition: PDMCC26XX_util.h:605
Void PDMCC26XX_I2S_releaseBuffer(PDMCC26XX_I2S_Handle handle, PDMCC26XX_I2S_BufferRelease *bufferRelease)
Function for releasing buffer.
uint8_t blockCount
Definition: PDMCC26XX_util.h:676
PDMCC26XX_I2S_AudioFormatConfig audioFmtCfg
Definition: PDMCC26XX_util.h:713
void * bufferHandleIn
Definition: PDMCC26XX_util.h:660
PDMCC26XX_I2S_CallbackFxn callbackFxn
Definition: PDMCC26XX_util.h:686
struct PDMCC26XX_I2S_BufferRequest PDMCC26XX_I2S_BufferRequest
A PDMCC26XX_I2S_BufferRequest data structure is used with PDMCC26XX_I2S_requestBuffer().
bool PDMCC26XX_I2S_stopStream(PDMCC26XX_I2S_Handle handle)
Function for stopping an I2S interface.
PIN_Handle pinHandle
Definition: PDMCC26XX_util.h:705
Definition: PDMCC26XX_util.h:158
void * object
Definition: PDMCC26XX_util.h:415
PDMCC26XX_I2S_RequestMode requestMode
Definition: PDMCC26XX_util.h:678
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:675
uint16_t wclkDiv
Definition: PDMCC26XX_util.h:489
void * bufferHandleIn
Definition: PDMCC26XX_util.h:648
PDMCC26XX_I2S_CallbackFxn callbackFxn
Definition: PDMCC26XX_util.h:709
PIN_State pinState
Definition: PDMCC26XX_util.h:718
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:120
PDMCC26XX_I2S_Status status
Definition: PDMCC26XX_util.h:649
uint8_t dataDelay
Definition: PDMCC26XX_util.h:596
PDMCC26XX_I2S_Status
Status codes that are set by the I2S driver.
Definition: PDMCC26XX_util.h:130
void * bufferIn
Definition: PDMCC26XX_util.h:647
bool isOpen
Definition: PDMCC26XX_util.h:699
uint8_t intPriority
Definition: PDMCC26XX_util.h:452
PDMCC26XX_I2S Object.
Definition: PDMCC26XX_util.h:698
bool PDMCC26XX_I2S_startStream(PDMCC26XX_I2S_Handle handle)
Function for starting an I2S interface.
Definition: PDMCC26XX_util.h:169
void PDMCC26XX_I2S_close(PDMCC26XX_I2S_Handle handle)
Function to close a given CC26XX I2S peripheral specified by the I2S handle.
PDMCC26XX_I2S_TransferSize blockSizeInSamples
Definition: PDMCC26XX_util.h:706
uint16_t ad1
Definition: PDMCC26XX_util.h:535
Definition: PDMCC26XX_util.h:133
PDMCC26XX_I2S_AudioClockConfig audioClkCfg
Definition: PDMCC26XX_util.h:719
PDMCC26XX_I2S Audio Clock configuration.
Definition: PDMCC26XX_util.h:487
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:624
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:448
PDMCC26XX_I2S_StreamNotification * currentStream
Definition: PDMCC26XX_util.h:712
PDMCC26XX_I2S_FreeFxn freeFxn
Definition: PDMCC26XX_util.h:711
The PDMCC26XX_I2S_Config structure contains a set of pointers used to characterize the PDMCC26XX_I2S ...
Definition: PDMCC26XX_util.h:413
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.
Definition: PDMCC26XX_util.h:142
PDMCC26XX_I2S Audio Pin configuration.
Definition: PDMCC26XX_util.h:531
int32_t sampleRate
Definition: PDMCC26XX_util.h:704
PIN_Id mclkPin
Definition: PDMCC26XX_util.h:456
ti_sysbios_family_arm_m3_Hwi_Struct hwi
Definition: PDMCC26XX_util.h:715
union PDMCC26XX_I2S_AudioPinConfig PDMCC26XX_I2S_AudioPinConfig
PDMCC26XX_I2S Audio Pin configuration.
PIN_Id ad0Pin
Definition: PDMCC26XX_util.h:462
uint32_t requestTimeout
Definition: PDMCC26XX_util.h:703
bool PDMCC26XX_I2S_Params_init(PDMCC26XX_I2S_Params *params, PDMCC26XX_I2S_Mode mode, void *modeSpecificParams)
Function to set initialization parameters for the audio interface.
PDMCC26XX_I2S_RequestMode requestMode
Definition: PDMCC26XX_util.h:702
void const * hwAttrs
Definition: PDMCC26XX_util.h:418
uint32_t PDMCC26XX_I2S_TransferSize
Definition: PDMCC26XX_util.h:406
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:112
const PDMCC26XX_I2S_Config PDMCC26XX_I2S_config[]
void PDMCC26XX_I2S_init(PDMCC26XX_I2S_Handle handle)
I2S CC26XX initialization.
PDMCC26XX_I2S_StreamNotification * currentStream
Definition: PDMCC26XX_util.h:690
uint8_t blockCount
Definition: PDMCC26XX_util.h:700
Copyright 2017, Texas Instruments Incorporated