File indexing completed on 2025-05-11 08:23:35
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #ifndef STM32H7xx_HAL_I2S_H
0021 #define STM32H7xx_HAL_I2S_H
0022
0023 #ifdef __cplusplus
0024 extern "C" {
0025 #endif
0026
0027
0028 #include "stm32h7xx_hal_def.h"
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047 typedef struct
0048 {
0049 uint32_t Mode;
0050
0051
0052 uint32_t Standard;
0053
0054
0055 uint32_t DataFormat;
0056
0057
0058 uint32_t MCLKOutput;
0059
0060
0061 uint32_t AudioFreq;
0062
0063
0064 uint32_t CPOL;
0065
0066
0067 uint32_t FirstBit;
0068
0069
0070 uint32_t WSInversion;
0071
0072
0073 uint32_t Data24BitAlignment;
0074
0075
0076 uint32_t MasterKeepIOState;
0077
0078
0079 } I2S_InitTypeDef;
0080
0081
0082
0083
0084 typedef enum
0085 {
0086 HAL_I2S_STATE_RESET = 0x00UL,
0087 HAL_I2S_STATE_READY = 0x01UL,
0088 HAL_I2S_STATE_BUSY = 0x02UL,
0089 HAL_I2S_STATE_BUSY_TX = 0x03UL,
0090 HAL_I2S_STATE_BUSY_RX = 0x04UL,
0091 HAL_I2S_STATE_BUSY_TX_RX = 0x05UL,
0092 HAL_I2S_STATE_TIMEOUT = 0x06UL,
0093 HAL_I2S_STATE_ERROR = 0x07UL
0094 } HAL_I2S_StateTypeDef;
0095
0096
0097
0098
0099 typedef struct __I2S_HandleTypeDef
0100 {
0101 SPI_TypeDef *Instance;
0102
0103 I2S_InitTypeDef Init;
0104
0105 const uint16_t *pTxBuffPtr;
0106
0107 __IO uint16_t TxXferSize;
0108
0109 __IO uint16_t TxXferCount;
0110
0111 uint16_t *pRxBuffPtr;
0112
0113 __IO uint16_t RxXferSize;
0114
0115 __IO uint16_t RxXferCount;
0116
0117
0118
0119
0120
0121
0122 void (*RxISR)(struct __I2S_HandleTypeDef *hi2s);
0123
0124 void (*TxISR)(struct __I2S_HandleTypeDef *hi2s);
0125
0126 DMA_HandleTypeDef *hdmatx;
0127
0128 DMA_HandleTypeDef *hdmarx;
0129
0130 __IO HAL_LockTypeDef Lock;
0131
0132 __IO HAL_I2S_StateTypeDef State;
0133
0134 __IO uint32_t ErrorCode;
0135
0136
0137 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1U)
0138 void (* TxCpltCallback)(struct __I2S_HandleTypeDef *hi2s);
0139 void (* RxCpltCallback)(struct __I2S_HandleTypeDef *hi2s);
0140 void (* TxRxCpltCallback)(struct __I2S_HandleTypeDef *hi2s);
0141 void (* TxHalfCpltCallback)(struct __I2S_HandleTypeDef *hi2s);
0142 void (* RxHalfCpltCallback)(struct __I2S_HandleTypeDef *hi2s);
0143 void (* TxRxHalfCpltCallback)(struct __I2S_HandleTypeDef *hi2s);
0144 void (* ErrorCallback)(struct __I2S_HandleTypeDef *hi2s);
0145 void (* MspInitCallback)(struct __I2S_HandleTypeDef *hi2s);
0146 void (* MspDeInitCallback)(struct __I2S_HandleTypeDef *hi2s);
0147
0148 #endif
0149 } I2S_HandleTypeDef;
0150
0151 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
0152
0153
0154
0155
0156 typedef enum
0157 {
0158 HAL_I2S_TX_COMPLETE_CB_ID = 0x00UL,
0159 HAL_I2S_RX_COMPLETE_CB_ID = 0x01UL,
0160 HAL_I2S_TX_RX_COMPLETE_CB_ID = 0x02UL,
0161 HAL_I2S_TX_HALF_COMPLETE_CB_ID = 0x03UL,
0162 HAL_I2S_RX_HALF_COMPLETE_CB_ID = 0x04UL,
0163 HAL_I2S_TX_RX_HALF_COMPLETE_CB_ID = 0x05UL,
0164 HAL_I2S_ERROR_CB_ID = 0x06UL,
0165 HAL_I2S_MSPINIT_CB_ID = 0x07UL,
0166 HAL_I2S_MSPDEINIT_CB_ID = 0x08UL
0167
0168 } HAL_I2S_CallbackIDTypeDef;
0169
0170
0171
0172
0173 typedef void (*pI2S_CallbackTypeDef)(I2S_HandleTypeDef *hi2s);
0174
0175 #endif
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189 #define HAL_I2S_ERROR_NONE (0x00000000UL)
0190 #define HAL_I2S_ERROR_TIMEOUT (0x00000001UL)
0191 #define HAL_I2S_ERROR_OVR (0x00000002UL)
0192 #define HAL_I2S_ERROR_UDR (0x00000004UL)
0193 #define HAL_I2S_ERROR_DMA (0x00000008UL)
0194 #define HAL_I2S_ERROR_PRESCALER (0x00000010UL)
0195 #define HAL_I2S_ERROR_FRE (0x00000020UL)
0196 #define HAL_I2S_ERROR_NO_OGT (0x00000040UL)
0197 #define HAL_I2S_ERROR_NOT_SUPPORTED (0x00000080UL)
0198 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
0199 #define HAL_I2S_ERROR_INVALID_CALLBACK (0x00000100UL)
0200 #endif
0201
0202
0203
0204
0205
0206
0207
0208
0209 #define I2S_MODE_SLAVE_TX (0x00000000UL)
0210 #define I2S_MODE_SLAVE_RX (SPI_I2SCFGR_I2SCFG_0)
0211 #define I2S_MODE_MASTER_TX (SPI_I2SCFGR_I2SCFG_1)
0212 #define I2S_MODE_MASTER_RX (SPI_I2SCFGR_I2SCFG_0 | SPI_I2SCFGR_I2SCFG_1)
0213 #define I2S_MODE_SLAVE_FULLDUPLEX (SPI_I2SCFGR_I2SCFG_2)
0214 #define I2S_MODE_MASTER_FULLDUPLEX (SPI_I2SCFGR_I2SCFG_2 | SPI_I2SCFGR_I2SCFG_0)
0215
0216
0217
0218
0219
0220
0221
0222
0223 #define I2S_STANDARD_PHILIPS (0x00000000UL)
0224 #define I2S_STANDARD_MSB (SPI_I2SCFGR_I2SSTD_0)
0225 #define I2S_STANDARD_LSB (SPI_I2SCFGR_I2SSTD_1)
0226 #define I2S_STANDARD_PCM_SHORT (SPI_I2SCFGR_I2SSTD_0 | SPI_I2SCFGR_I2SSTD_1)
0227 #define I2S_STANDARD_PCM_LONG (SPI_I2SCFGR_I2SSTD_0 | SPI_I2SCFGR_I2SSTD_1 | SPI_I2SCFGR_PCMSYNC)
0228
0229
0230
0231
0232
0233
0234
0235
0236 #define I2S_DATAFORMAT_16B (0x00000000UL)
0237 #define I2S_DATAFORMAT_16B_EXTENDED (SPI_I2SCFGR_CHLEN)
0238 #define I2S_DATAFORMAT_24B (SPI_I2SCFGR_DATLEN_0)
0239 #define I2S_DATAFORMAT_32B (SPI_I2SCFGR_DATLEN_1)
0240
0241
0242
0243
0244
0245
0246
0247
0248 #define I2S_MCLKOUTPUT_ENABLE (SPI_I2SCFGR_MCKOE)
0249 #define I2S_MCLKOUTPUT_DISABLE (0x00000000UL)
0250
0251
0252
0253
0254
0255
0256
0257
0258 #define I2S_AUDIOFREQ_192K (192000UL)
0259 #define I2S_AUDIOFREQ_96K (96000UL)
0260 #define I2S_AUDIOFREQ_48K (48000UL)
0261 #define I2S_AUDIOFREQ_44K (44100UL)
0262 #define I2S_AUDIOFREQ_32K (32000UL)
0263 #define I2S_AUDIOFREQ_22K (22050UL)
0264 #define I2S_AUDIOFREQ_16K (16000UL)
0265 #define I2S_AUDIOFREQ_11K (11025UL)
0266 #define I2S_AUDIOFREQ_8K (8000UL)
0267 #define I2S_AUDIOFREQ_DEFAULT (2UL)
0268
0269
0270
0271
0272
0273
0274
0275
0276 #define I2S_CPOL_LOW (0x00000000UL)
0277 #define I2S_CPOL_HIGH (SPI_I2SCFGR_CKPOL)
0278
0279
0280
0281
0282
0283
0284
0285
0286 #define I2S_FIRSTBIT_MSB (0x00000000UL)
0287 #define I2S_FIRSTBIT_LSB SPI_CFG2_LSBFRST
0288
0289
0290
0291
0292
0293
0294
0295
0296 #define I2S_WS_INVERSION_DISABLE (0x00000000UL)
0297 #define I2S_WS_INVERSION_ENABLE SPI_I2SCFGR_WSINV
0298
0299
0300
0301
0302
0303
0304
0305
0306 #define I2S_DATA_24BIT_ALIGNMENT_RIGHT (0x00000000UL)
0307 #define I2S_DATA_24BIT_ALIGNMENT_LEFT SPI_I2SCFGR_DATFMT
0308
0309
0310
0311
0312
0313
0314
0315
0316 #define I2S_MASTER_KEEP_IO_STATE_DISABLE (0x00000000U)
0317 #define I2S_MASTER_KEEP_IO_STATE_ENABLE SPI_CFG2_AFCNTR
0318
0319
0320
0321
0322
0323
0324
0325
0326 #define I2S_IT_RXP SPI_IER_RXPIE
0327 #define I2S_IT_TXP SPI_IER_TXPIE
0328 #define I2S_IT_DXP SPI_IER_DXPIE
0329 #define I2S_IT_UDR SPI_IER_UDRIE
0330 #define I2S_IT_OVR SPI_IER_OVRIE
0331 #define I2S_IT_FRE SPI_IER_TIFREIE
0332 #define I2S_IT_ERR (SPI_IER_UDRIE | SPI_IER_OVRIE | SPI_IER_TIFREIE)
0333
0334
0335
0336
0337
0338
0339
0340
0341 #define I2S_FLAG_RXP SPI_SR_RXP
0342 #define I2S_FLAG_TXP SPI_SR_TXP
0343 #define I2S_FLAG_DXP SPI_SR_DXP
0344 #define I2S_FLAG_UDR SPI_SR_UDR
0345 #define I2S_FLAG_OVR SPI_SR_OVR
0346 #define I2S_FLAG_FRE SPI_SR_TIFRE
0347
0348 #define I2S_FLAG_MASK (SPI_SR_RXP | SPI_SR_TXP | SPI_SR_DXP |SPI_SR_UDR | SPI_SR_OVR | SPI_SR_TIFRE)
0349
0350
0351
0352
0353
0354
0355
0356
0357
0358
0359
0360
0361
0362
0363
0364
0365
0366
0367 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
0368 #define __HAL_I2S_RESET_HANDLE_STATE(__HANDLE__) do{ \
0369 (__HANDLE__)->State = HAL_I2S_STATE_RESET; \
0370 (__HANDLE__)->MspInitCallback = NULL; \
0371 (__HANDLE__)->MspDeInitCallback = NULL; \
0372 } while(0)
0373 #else
0374 #define __HAL_I2S_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_I2S_STATE_RESET)
0375 #endif
0376
0377
0378
0379
0380
0381 #define __HAL_I2S_ENABLE(__HANDLE__) (SET_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE))
0382
0383
0384
0385
0386
0387 #define __HAL_I2S_DISABLE(__HANDLE__) (CLEAR_BIT((__HANDLE__)->Instance->CR1, SPI_CR1_SPE))
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402 #define __HAL_I2S_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER |= (__INTERRUPT__))
0403
0404
0405
0406
0407
0408
0409
0410
0411
0412
0413
0414
0415
0416
0417 #define __HAL_I2S_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER &= (~(__INTERRUPT__)))
0418
0419
0420
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430
0431
0432
0433 #define __HAL_I2S_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IER\
0434 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
0435
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447
0448 #define __HAL_I2S_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
0449
0450
0451
0452
0453
0454 #define __HAL_I2S_CLEAR_OVRFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_OVRC)
0455
0456
0457
0458
0459
0460 #define __HAL_I2S_CLEAR_UDRFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_UDRC)
0461
0462
0463
0464
0465
0466 #define __HAL_I2S_CLEAR_TIFREFLAG(__HANDLE__) SET_BIT((__HANDLE__)->Instance->IFCR , SPI_IFCR_TIFREC)
0467
0468
0469
0470
0471
0472
0473
0474
0475
0476
0477
0478
0479
0480
0481 HAL_StatusTypeDef HAL_I2S_Init(I2S_HandleTypeDef *hi2s);
0482 HAL_StatusTypeDef HAL_I2S_DeInit(I2S_HandleTypeDef *hi2s);
0483 void HAL_I2S_MspInit(I2S_HandleTypeDef *hi2s);
0484 void HAL_I2S_MspDeInit(I2S_HandleTypeDef *hi2s);
0485
0486
0487 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
0488 HAL_StatusTypeDef HAL_I2S_RegisterCallback(I2S_HandleTypeDef *hi2s, HAL_I2S_CallbackIDTypeDef CallbackID,
0489 pI2S_CallbackTypeDef pCallback);
0490 HAL_StatusTypeDef HAL_I2S_UnRegisterCallback(I2S_HandleTypeDef *hi2s, HAL_I2S_CallbackIDTypeDef CallbackID);
0491 #endif
0492
0493
0494
0495
0496
0497
0498
0499
0500
0501 HAL_StatusTypeDef HAL_I2S_Transmit(I2S_HandleTypeDef *hi2s, const uint16_t *pData, uint16_t Size, uint32_t Timeout);
0502 HAL_StatusTypeDef HAL_I2S_Receive(I2S_HandleTypeDef *hi2s, uint16_t *pData, uint16_t Size, uint32_t Timeout);
0503 HAL_StatusTypeDef HAL_I2SEx_TransmitReceive(I2S_HandleTypeDef *hi2s, const uint16_t *pTxData, uint16_t *pRxData,
0504 uint16_t Size, uint32_t Timeout);
0505
0506
0507 HAL_StatusTypeDef HAL_I2S_Transmit_IT(I2S_HandleTypeDef *hi2s, const uint16_t *pData, uint16_t Size);
0508 HAL_StatusTypeDef HAL_I2S_Receive_IT(I2S_HandleTypeDef *hi2s, uint16_t *pData, uint16_t Size);
0509 HAL_StatusTypeDef HAL_I2SEx_TransmitReceive_IT(I2S_HandleTypeDef *hi2s, const uint16_t *pTxData, uint16_t *pRxData,
0510 uint16_t Size);
0511
0512 void HAL_I2S_IRQHandler(I2S_HandleTypeDef *hi2s);
0513
0514
0515 HAL_StatusTypeDef HAL_I2S_Transmit_DMA(I2S_HandleTypeDef *hi2s, const uint16_t *pData, uint16_t Size);
0516 HAL_StatusTypeDef HAL_I2S_Receive_DMA(I2S_HandleTypeDef *hi2s, uint16_t *pData, uint16_t Size);
0517 HAL_StatusTypeDef HAL_I2SEx_TransmitReceive_DMA(I2S_HandleTypeDef *hi2s, const uint16_t *pTxData, uint16_t *pRxData,
0518 uint16_t Size);
0519
0520 HAL_StatusTypeDef HAL_I2S_DMAPause(I2S_HandleTypeDef *hi2s);
0521 HAL_StatusTypeDef HAL_I2S_DMAResume(I2S_HandleTypeDef *hi2s);
0522 HAL_StatusTypeDef HAL_I2S_DMAStop(I2S_HandleTypeDef *hi2s);
0523
0524
0525 void HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s);
0526 void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s);
0527 void HAL_I2S_RxHalfCpltCallback(I2S_HandleTypeDef *hi2s);
0528 void HAL_I2S_RxCpltCallback(I2S_HandleTypeDef *hi2s);
0529 void HAL_I2SEx_TxRxHalfCpltCallback(I2S_HandleTypeDef *hi2s);
0530 void HAL_I2SEx_TxRxCpltCallback(I2S_HandleTypeDef *hi2s);
0531 void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s);
0532
0533
0534
0535
0536
0537
0538
0539
0540 HAL_I2S_StateTypeDef HAL_I2S_GetState(const I2S_HandleTypeDef *hi2s);
0541 uint32_t HAL_I2S_GetError(const I2S_HandleTypeDef *hi2s);
0542
0543
0544
0545
0546
0547
0548
0549
0550
0551
0552
0553
0554
0555
0556
0557
0558
0559
0560
0561
0562
0563
0564
0565
0566
0567
0568
0569
0570
0571
0572
0573
0574
0575
0576
0577
0578
0579
0580
0581
0582
0583
0584
0585
0586
0587
0588
0589 #define I2S_CHECK_FLAG(__SR__, __FLAG__) ((((__SR__)\
0590 & ((__FLAG__) & I2S_FLAG_MASK)) == ((__FLAG__) & I2S_FLAG_MASK))\
0591 ? SET : RESET)
0592
0593
0594
0595
0596
0597
0598
0599
0600
0601
0602
0603
0604
0605 #define I2S_CHECK_IT_SOURCE(__IER__, __INTERRUPT__) ((((__IER__)\
0606 & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
0607
0608
0609
0610
0611
0612
0613 #define IS_I2S_MODE(__MODE__) (((__MODE__) == I2S_MODE_SLAVE_TX) || \
0614 ((__MODE__) == I2S_MODE_SLAVE_RX) || \
0615 ((__MODE__) == I2S_MODE_MASTER_TX) || \
0616 ((__MODE__) == I2S_MODE_MASTER_RX) || \
0617 ((__MODE__) == I2S_MODE_SLAVE_FULLDUPLEX) || \
0618 ((__MODE__) == I2S_MODE_MASTER_FULLDUPLEX))
0619
0620 #define IS_I2S_MASTER(__MODE__) (((__MODE__) == I2S_MODE_MASTER_TX) || \
0621 ((__MODE__) == I2S_MODE_MASTER_RX) || \
0622 ((__MODE__) == I2S_MODE_MASTER_FULLDUPLEX))
0623
0624 #define IS_I2S_SLAVE(__MODE__) (((__MODE__) == I2S_MODE_SLAVE_TX) || \
0625 ((__MODE__) == I2S_MODE_SLAVE_RX) || \
0626 ((__MODE__) == I2S_MODE_SLAVE_FULLDUPLEX))
0627
0628 #define IS_I2S_FULLDUPLEX(__MODE__) (((__MODE__) == I2S_MODE_MASTER_FULLDUPLEX) || \
0629 ((__MODE__) == I2S_MODE_SLAVE_FULLDUPLEX))
0630
0631 #define IS_I2S_STANDARD(__STANDARD__) (((__STANDARD__) == I2S_STANDARD_PHILIPS) || \
0632 ((__STANDARD__) == I2S_STANDARD_MSB) || \
0633 ((__STANDARD__) == I2S_STANDARD_LSB) || \
0634 ((__STANDARD__) == I2S_STANDARD_PCM_SHORT) || \
0635 ((__STANDARD__) == I2S_STANDARD_PCM_LONG))
0636
0637 #define IS_I2S_DATA_FORMAT(__FORMAT__) (((__FORMAT__) == I2S_DATAFORMAT_16B) || \
0638 ((__FORMAT__) == I2S_DATAFORMAT_16B_EXTENDED) || \
0639 ((__FORMAT__) == I2S_DATAFORMAT_24B) || \
0640 ((__FORMAT__) == I2S_DATAFORMAT_32B))
0641
0642 #define IS_I2S_MCLK_OUTPUT(__OUTPUT__) (((__OUTPUT__) == I2S_MCLKOUTPUT_ENABLE) || \
0643 ((__OUTPUT__) == I2S_MCLKOUTPUT_DISABLE))
0644
0645 #define IS_I2S_AUDIO_FREQ(__FREQ__) ((((__FREQ__) >= I2S_AUDIOFREQ_8K) && \
0646 ((__FREQ__) <= I2S_AUDIOFREQ_192K)) || \
0647 ((__FREQ__) == I2S_AUDIOFREQ_DEFAULT))
0648
0649 #define IS_I2S_CPOL(__CPOL__) (((__CPOL__) == I2S_CPOL_LOW) || \
0650 ((__CPOL__) == I2S_CPOL_HIGH))
0651
0652 #define IS_I2S_FIRST_BIT(__BIT__) (((__BIT__) == I2S_FIRSTBIT_MSB) || \
0653 ((__BIT__) == I2S_FIRSTBIT_LSB))
0654
0655 #define IS_I2S_WS_INVERSION(__WSINV__) (((__WSINV__) == I2S_WS_INVERSION_DISABLE) || \
0656 ((__WSINV__) == I2S_WS_INVERSION_ENABLE))
0657
0658 #define IS_I2S_DATA_24BIT_ALIGNMENT(__ALIGNMENT__) (((__ALIGNMENT__) == I2S_DATA_24BIT_ALIGNMENT_RIGHT) || \
0659 ((__ALIGNMENT__) == I2S_DATA_24BIT_ALIGNMENT_LEFT))
0660
0661 #define IS_I2S_MASTER_KEEP_IO_STATE(__AFCNTR__) (((__AFCNTR__) == I2S_MASTER_KEEP_IO_STATE_DISABLE) || \
0662 ((__AFCNTR__) == I2S_MASTER_KEEP_IO_STATE_ENABLE))
0663
0664
0665
0666
0667
0668
0669
0670
0671
0672
0673
0674
0675
0676
0677 #ifdef __cplusplus
0678 }
0679 #endif
0680
0681 #endif
0682