File indexing completed on 2025-05-11 08:23:08
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180 #include "stm32h7xx_hal.h"
0181
0182 #ifdef HAL_I2S_MODULE_ENABLED
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199
0200 #define I2S_TIMEOUT 0xFFFFUL
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212 static void I2S_DMATxCplt(DMA_HandleTypeDef *hdma);
0213 static void I2S_DMATxHalfCplt(DMA_HandleTypeDef *hdma);
0214 static void I2S_DMARxCplt(DMA_HandleTypeDef *hdma);
0215 static void I2S_DMARxHalfCplt(DMA_HandleTypeDef *hdma);
0216 static void I2SEx_DMATxRxCplt(DMA_HandleTypeDef *hdma);
0217 static void I2SEx_DMATxRxHalfCplt(DMA_HandleTypeDef *hdma);
0218 static void I2S_DMAError(DMA_HandleTypeDef *hdma);
0219 static void I2S_Transmit_16Bit_IT(I2S_HandleTypeDef *hi2s);
0220 static void I2S_Transmit_32Bit_IT(I2S_HandleTypeDef *hi2s);
0221 static void I2S_Receive_16Bit_IT(I2S_HandleTypeDef *hi2s);
0222 static void I2S_Receive_32Bit_IT(I2S_HandleTypeDef *hi2s);
0223 static HAL_StatusTypeDef I2S_WaitFlagStateUntilTimeout(I2S_HandleTypeDef *hi2s, uint32_t Flag, FlagStatus State,
0224 uint32_t Tickstart, uint32_t Timeout);
0225
0226
0227
0228
0229
0230
0231
0232
0233
0234
0235
0236
0237
0238
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250
0251
0252
0253
0254
0255
0256
0257
0258
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268
0269
0270
0271
0272 HAL_StatusTypeDef HAL_I2S_Init(I2S_HandleTypeDef *hi2s)
0273 {
0274 uint32_t i2sdiv;
0275 uint32_t i2sodd;
0276 uint32_t packetlength;
0277 uint32_t tmp;
0278 uint32_t i2sclk;
0279 uint32_t ispcm;
0280
0281
0282 if (hi2s == NULL)
0283 {
0284 return HAL_ERROR;
0285 }
0286
0287
0288 assert_param(IS_I2S_ALL_INSTANCE(hi2s->Instance));
0289 assert_param(IS_I2S_MODE(hi2s->Init.Mode));
0290 assert_param(IS_I2S_STANDARD(hi2s->Init.Standard));
0291 assert_param(IS_I2S_DATA_FORMAT(hi2s->Init.DataFormat));
0292 assert_param(IS_I2S_MCLK_OUTPUT(hi2s->Init.MCLKOutput));
0293 assert_param(IS_I2S_AUDIO_FREQ(hi2s->Init.AudioFreq));
0294 assert_param(IS_I2S_CPOL(hi2s->Init.CPOL));
0295 assert_param(IS_I2S_FIRST_BIT(hi2s->Init.FirstBit));
0296 assert_param(IS_I2S_WS_INVERSION(hi2s->Init.WSInversion));
0297 assert_param(IS_I2S_DATA_24BIT_ALIGNMENT(hi2s->Init.Data24BitAlignment));
0298 assert_param(IS_I2S_MASTER_KEEP_IO_STATE(hi2s->Init.MasterKeepIOState));
0299
0300 if (hi2s->State == HAL_I2S_STATE_RESET)
0301 {
0302
0303 hi2s->Lock = HAL_UNLOCKED;
0304
0305 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
0306
0307 hi2s->TxCpltCallback = HAL_I2S_TxCpltCallback;
0308 hi2s->RxCpltCallback = HAL_I2S_RxCpltCallback;
0309 hi2s->TxRxCpltCallback = HAL_I2SEx_TxRxCpltCallback;
0310 hi2s->TxHalfCpltCallback = HAL_I2S_TxHalfCpltCallback;
0311 hi2s->RxHalfCpltCallback = HAL_I2S_RxHalfCpltCallback;
0312 hi2s->TxRxHalfCpltCallback = HAL_I2SEx_TxRxHalfCpltCallback;
0313 hi2s->ErrorCallback = HAL_I2S_ErrorCallback;
0314
0315 if (hi2s->MspInitCallback == NULL)
0316 {
0317 hi2s->MspInitCallback = HAL_I2S_MspInit;
0318 }
0319
0320
0321 hi2s->MspInitCallback(hi2s);
0322 #else
0323
0324 HAL_I2S_MspInit(hi2s);
0325 #endif
0326 }
0327
0328 hi2s->State = HAL_I2S_STATE_BUSY;
0329
0330
0331 if ((hi2s->Instance->CR1 & SPI_CR1_SPE) == SPI_CR1_SPE)
0332 {
0333
0334 __HAL_I2S_DISABLE(hi2s);
0335 }
0336
0337
0338 CLEAR_REG(hi2s->Instance->I2SCFGR);
0339
0340 if (IS_I2S_MASTER(hi2s->Init.Mode))
0341 {
0342
0343
0344 if (hi2s->Init.AudioFreq != I2S_AUDIOFREQ_DEFAULT)
0345 {
0346
0347 if (hi2s->Init.DataFormat != I2S_DATAFORMAT_16B)
0348 {
0349
0350 packetlength = 2UL;
0351 }
0352 else
0353 {
0354
0355 packetlength = 1UL;
0356 }
0357
0358
0359 if ((hi2s->Init.Standard == I2S_STANDARD_PCM_SHORT) ||
0360 (hi2s->Init.Standard == I2S_STANDARD_PCM_LONG))
0361 {
0362 ispcm = 1UL;
0363 }
0364 else
0365 {
0366 ispcm = 0UL;
0367 }
0368
0369
0370 #if defined (SPI_SPI6I2S_SUPPORT)
0371 if (hi2s->Instance == SPI6)
0372 {
0373
0374 i2sclk = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_SPI6);
0375 }
0376 else
0377 {
0378
0379 i2sclk = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_SPI123);
0380 }
0381 #else
0382
0383 i2sclk = HAL_RCCEx_GetPeriphCLKFreq(RCC_PERIPHCLK_SPI123);
0384 #endif
0385
0386
0387 if (hi2s->Init.MCLKOutput == I2S_MCLKOUTPUT_ENABLE)
0388 {
0389
0390 tmp = (uint32_t)((((i2sclk / (256UL >> ispcm)) * 10UL) / hi2s->Init.AudioFreq) + 5UL);
0391 }
0392 else
0393 {
0394
0395 tmp = (uint32_t)((((i2sclk / ((32UL >> ispcm) * packetlength)) * 10UL) / hi2s->Init.AudioFreq) + 5UL);
0396 }
0397
0398
0399 tmp = tmp / 10UL;
0400
0401
0402 i2sodd = (uint32_t)(tmp & (uint32_t)1UL);
0403
0404
0405 i2sdiv = (uint32_t)((tmp - i2sodd) / 2UL);
0406 }
0407 else
0408 {
0409
0410 i2sdiv = 2UL;
0411 i2sodd = 0UL;
0412 }
0413
0414
0415 if (((i2sodd == 1UL) && (i2sdiv == 1UL)) || (i2sdiv > 0xFFUL))
0416 {
0417
0418 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_PRESCALER);
0419 return HAL_ERROR;
0420 }
0421
0422
0423 if (i2sdiv == 0UL)
0424 {
0425 i2sodd = 1UL;
0426 }
0427
0428 MODIFY_REG(hi2s->Instance->I2SCFGR, (SPI_I2SCFGR_I2SDIV | SPI_I2SCFGR_ODD),
0429 ((i2sdiv << SPI_I2SCFGR_I2SDIV_Pos) | (i2sodd << SPI_I2SCFGR_ODD_Pos)));
0430 }
0431
0432
0433
0434
0435 MODIFY_REG(hi2s->Instance->I2SCFGR, (SPI_I2SCFGR_I2SMOD | SPI_I2SCFGR_I2SCFG | \
0436 SPI_I2SCFGR_I2SSTD | SPI_I2SCFGR_PCMSYNC | \
0437 SPI_I2SCFGR_DATLEN | SPI_I2SCFGR_CHLEN | \
0438 SPI_I2SCFGR_CKPOL | SPI_I2SCFGR_WSINV | \
0439 SPI_I2SCFGR_DATFMT | SPI_I2SCFGR_MCKOE),
0440 (SPI_I2SCFGR_I2SMOD | hi2s->Init.Mode | \
0441 hi2s->Init.Standard | hi2s->Init.DataFormat | \
0442 hi2s->Init.CPOL | hi2s->Init.WSInversion | \
0443 hi2s->Init.Data24BitAlignment | hi2s->Init.MCLKOutput));
0444
0445 WRITE_REG(hi2s->Instance->IFCR, 0x0FF8);
0446
0447
0448
0449
0450 CLEAR_BIT(hi2s->Instance->CR1, SPI_CR1_IOLOCK);
0451
0452 MODIFY_REG(hi2s->Instance->CFG2, SPI_CFG2_LSBFRST, hi2s->Init.FirstBit);
0453
0454
0455 if (IS_I2S_MASTER(hi2s->Init.Mode))
0456 {
0457
0458 MODIFY_REG(hi2s->Instance->CFG2, SPI_CFG2_AFCNTR, (hi2s->Init.MasterKeepIOState));
0459 }
0460
0461 hi2s->ErrorCode = HAL_I2S_ERROR_NONE;
0462 hi2s->State = HAL_I2S_STATE_READY;
0463
0464 return HAL_OK;
0465 }
0466
0467
0468
0469
0470
0471
0472
0473 HAL_StatusTypeDef HAL_I2S_DeInit(I2S_HandleTypeDef *hi2s)
0474 {
0475
0476 if (hi2s == NULL)
0477 {
0478 return HAL_ERROR;
0479 }
0480
0481
0482 assert_param(IS_I2S_ALL_INSTANCE(hi2s->Instance));
0483
0484 hi2s->State = HAL_I2S_STATE_BUSY;
0485
0486
0487 __HAL_I2S_DISABLE(hi2s);
0488
0489 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
0490 if (hi2s->MspDeInitCallback == NULL)
0491 {
0492 hi2s->MspDeInitCallback = HAL_I2S_MspDeInit;
0493 }
0494
0495
0496 hi2s->MspDeInitCallback(hi2s);
0497 #else
0498
0499 HAL_I2S_MspDeInit(hi2s);
0500 #endif
0501
0502 hi2s->ErrorCode = HAL_I2S_ERROR_NONE;
0503 hi2s->State = HAL_I2S_STATE_RESET;
0504
0505
0506 __HAL_UNLOCK(hi2s);
0507
0508 return HAL_OK;
0509 }
0510
0511
0512
0513
0514
0515
0516
0517 __weak void HAL_I2S_MspInit(I2S_HandleTypeDef *hi2s)
0518 {
0519
0520 UNUSED(hi2s);
0521
0522
0523
0524
0525 }
0526
0527
0528
0529
0530
0531
0532
0533 __weak void HAL_I2S_MspDeInit(I2S_HandleTypeDef *hi2s)
0534 {
0535
0536 UNUSED(hi2s);
0537
0538
0539
0540
0541 }
0542
0543 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
0544
0545
0546
0547
0548
0549
0550
0551
0552
0553
0554
0555 HAL_StatusTypeDef HAL_I2S_RegisterCallback(I2S_HandleTypeDef *hi2s, HAL_I2S_CallbackIDTypeDef CallbackID,
0556 pI2S_CallbackTypeDef pCallback)
0557 {
0558 HAL_StatusTypeDef status = HAL_OK;
0559
0560 if (pCallback == NULL)
0561 {
0562
0563 hi2s->ErrorCode |= HAL_I2S_ERROR_INVALID_CALLBACK;
0564
0565 return HAL_ERROR;
0566 }
0567
0568 if (HAL_I2S_STATE_READY == hi2s->State)
0569 {
0570 switch (CallbackID)
0571 {
0572 case HAL_I2S_TX_COMPLETE_CB_ID :
0573 hi2s->TxCpltCallback = pCallback;
0574 break;
0575
0576 case HAL_I2S_RX_COMPLETE_CB_ID :
0577 hi2s->RxCpltCallback = pCallback;
0578 break;
0579
0580 case HAL_I2S_TX_RX_COMPLETE_CB_ID :
0581 hi2s->TxRxCpltCallback = pCallback;
0582 break;
0583
0584 case HAL_I2S_TX_HALF_COMPLETE_CB_ID :
0585 hi2s->TxHalfCpltCallback = pCallback;
0586 break;
0587
0588 case HAL_I2S_RX_HALF_COMPLETE_CB_ID :
0589 hi2s->RxHalfCpltCallback = pCallback;
0590 break;
0591
0592
0593 case HAL_I2S_TX_RX_HALF_COMPLETE_CB_ID :
0594 hi2s->TxRxHalfCpltCallback = pCallback;
0595 break;
0596
0597 case HAL_I2S_ERROR_CB_ID :
0598 hi2s->ErrorCallback = pCallback;
0599 break;
0600
0601 case HAL_I2S_MSPINIT_CB_ID :
0602 hi2s->MspInitCallback = pCallback;
0603 break;
0604
0605 case HAL_I2S_MSPDEINIT_CB_ID :
0606 hi2s->MspDeInitCallback = pCallback;
0607 break;
0608
0609 default :
0610
0611 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_INVALID_CALLBACK);
0612
0613
0614 status = HAL_ERROR;
0615 break;
0616 }
0617 }
0618 else if (HAL_I2S_STATE_RESET == hi2s->State)
0619 {
0620 switch (CallbackID)
0621 {
0622 case HAL_I2S_MSPINIT_CB_ID :
0623 hi2s->MspInitCallback = pCallback;
0624 break;
0625
0626 case HAL_I2S_MSPDEINIT_CB_ID :
0627 hi2s->MspDeInitCallback = pCallback;
0628 break;
0629
0630 default :
0631
0632 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_INVALID_CALLBACK);
0633
0634
0635 status = HAL_ERROR;
0636 break;
0637 }
0638 }
0639 else
0640 {
0641
0642 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_INVALID_CALLBACK);
0643
0644
0645 status = HAL_ERROR;
0646 }
0647
0648 return status;
0649 }
0650
0651
0652
0653
0654
0655
0656
0657
0658
0659
0660
0661 HAL_StatusTypeDef HAL_I2S_UnRegisterCallback(I2S_HandleTypeDef *hi2s, HAL_I2S_CallbackIDTypeDef CallbackID)
0662 {
0663 HAL_StatusTypeDef status = HAL_OK;
0664
0665 if (HAL_I2S_STATE_READY == hi2s->State)
0666 {
0667 switch (CallbackID)
0668 {
0669 case HAL_I2S_TX_COMPLETE_CB_ID :
0670 hi2s->TxCpltCallback = HAL_I2S_TxCpltCallback;
0671 break;
0672
0673 case HAL_I2S_RX_COMPLETE_CB_ID :
0674 hi2s->RxCpltCallback = HAL_I2S_RxCpltCallback;
0675 break;
0676
0677 case HAL_I2S_TX_RX_COMPLETE_CB_ID :
0678 hi2s->TxRxCpltCallback = HAL_I2SEx_TxRxCpltCallback;
0679 break;
0680
0681 case HAL_I2S_TX_HALF_COMPLETE_CB_ID :
0682 hi2s->TxHalfCpltCallback = HAL_I2S_TxHalfCpltCallback;
0683 break;
0684
0685 case HAL_I2S_RX_HALF_COMPLETE_CB_ID :
0686 hi2s->RxHalfCpltCallback = HAL_I2S_RxHalfCpltCallback;
0687 break;
0688
0689 case HAL_I2S_TX_RX_HALF_COMPLETE_CB_ID :
0690 hi2s->TxRxHalfCpltCallback = HAL_I2SEx_TxRxHalfCpltCallback;
0691 break;
0692
0693 case HAL_I2S_ERROR_CB_ID :
0694 hi2s->ErrorCallback = HAL_I2S_ErrorCallback;
0695 break;
0696
0697 case HAL_I2S_MSPINIT_CB_ID :
0698 hi2s->MspInitCallback = HAL_I2S_MspInit;
0699 break;
0700
0701 case HAL_I2S_MSPDEINIT_CB_ID :
0702 hi2s->MspDeInitCallback = HAL_I2S_MspDeInit;
0703 break;
0704
0705 default :
0706
0707 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_INVALID_CALLBACK);
0708
0709
0710 status = HAL_ERROR;
0711 break;
0712 }
0713 }
0714 else if (HAL_I2S_STATE_RESET == hi2s->State)
0715 {
0716 switch (CallbackID)
0717 {
0718 case HAL_I2S_MSPINIT_CB_ID :
0719 hi2s->MspInitCallback = HAL_I2S_MspInit;
0720 break;
0721
0722 case HAL_I2S_MSPDEINIT_CB_ID :
0723 hi2s->MspDeInitCallback = HAL_I2S_MspDeInit;
0724 break;
0725
0726 default :
0727
0728 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_INVALID_CALLBACK);
0729
0730
0731 status = HAL_ERROR;
0732 break;
0733 }
0734 }
0735 else
0736 {
0737
0738 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_INVALID_CALLBACK);
0739
0740
0741 status = HAL_ERROR;
0742 }
0743
0744 return status;
0745 }
0746 #endif
0747
0748
0749
0750
0751
0752
0753
0754
0755
0756
0757
0758
0759
0760
0761
0762
0763
0764
0765
0766
0767
0768
0769
0770
0771
0772
0773
0774
0775
0776
0777
0778
0779
0780
0781
0782
0783
0784
0785
0786
0787
0788
0789
0790
0791
0792
0793
0794
0795
0796
0797
0798
0799
0800
0801
0802
0803
0804
0805
0806
0807
0808
0809
0810
0811
0812
0813 HAL_StatusTypeDef HAL_I2S_Transmit(I2S_HandleTypeDef *hi2s, const uint16_t *pData, uint16_t Size, uint32_t Timeout)
0814 {
0815 #if defined (__GNUC__)
0816 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hi2s->Instance->TXDR));
0817 #endif
0818 uint32_t tickstart;
0819
0820 if ((pData == NULL) || (Size == 0UL))
0821 {
0822 return HAL_ERROR;
0823 }
0824
0825 if (hi2s->State != HAL_I2S_STATE_READY)
0826 {
0827 return HAL_BUSY;
0828 }
0829
0830
0831 __HAL_LOCK(hi2s);
0832
0833
0834 tickstart = HAL_GetTick();
0835
0836
0837 hi2s->State = HAL_I2S_STATE_BUSY_TX;
0838 hi2s->ErrorCode = HAL_I2S_ERROR_NONE;
0839 hi2s->pTxBuffPtr = (const uint16_t *)pData;
0840 hi2s->TxXferSize = Size;
0841 hi2s->TxXferCount = Size;
0842
0843
0844 hi2s->pRxBuffPtr = NULL;
0845 hi2s->RxXferSize = (uint16_t) 0UL;
0846 hi2s->RxXferCount = (uint16_t) 0UL;
0847
0848
0849 if ((hi2s->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
0850 {
0851
0852 __HAL_I2S_ENABLE(hi2s);
0853 }
0854
0855
0856 SET_BIT(hi2s->Instance->CR1, SPI_CR1_CSTART);
0857
0858
0859
0860 if (I2S_WaitFlagStateUntilTimeout(hi2s, I2S_FLAG_TXP, SET, tickstart, Timeout) != HAL_OK)
0861 {
0862
0863 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_TIMEOUT);
0864 hi2s->State = HAL_I2S_STATE_READY;
0865 __HAL_UNLOCK(hi2s);
0866 return HAL_TIMEOUT;
0867 }
0868
0869 while (hi2s->TxXferCount > 0UL)
0870 {
0871 if ((hi2s->Init.DataFormat == I2S_DATAFORMAT_24B) || (hi2s->Init.DataFormat == I2S_DATAFORMAT_32B))
0872 {
0873
0874 hi2s->Instance->TXDR = *((const uint32_t *)hi2s->pTxBuffPtr);
0875 hi2s->pTxBuffPtr += 2;
0876 hi2s->TxXferCount--;
0877 }
0878 else
0879 {
0880
0881 #if defined (__GNUC__)
0882 *ptxdr_16bits = *((const uint16_t *)hi2s->pTxBuffPtr);
0883 #else
0884 *((__IO uint16_t *)&hi2s->Instance->TXDR) = *((const uint16_t *)hi2s->pTxBuffPtr);
0885 #endif
0886
0887 hi2s->pTxBuffPtr++;
0888 hi2s->TxXferCount--;
0889 }
0890
0891
0892 if (I2S_WaitFlagStateUntilTimeout(hi2s, I2S_FLAG_TXP, SET, tickstart, Timeout) != HAL_OK)
0893 {
0894
0895 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_TIMEOUT);
0896 hi2s->State = HAL_I2S_STATE_READY;
0897 __HAL_UNLOCK(hi2s);
0898 return HAL_TIMEOUT;
0899 }
0900
0901
0902 if (__HAL_I2S_GET_FLAG(hi2s, I2S_FLAG_UDR) == SET)
0903 {
0904
0905 __HAL_I2S_CLEAR_UDRFLAG(hi2s);
0906
0907
0908 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_UDR);
0909 }
0910 }
0911
0912 hi2s->State = HAL_I2S_STATE_READY;
0913 __HAL_UNLOCK(hi2s);
0914 return HAL_OK;
0915 }
0916
0917
0918
0919
0920
0921
0922
0923
0924
0925
0926
0927
0928
0929
0930
0931
0932
0933
0934 HAL_StatusTypeDef HAL_I2S_Receive(I2S_HandleTypeDef *hi2s, uint16_t *pData, uint16_t Size, uint32_t Timeout)
0935 {
0936 #if defined (__GNUC__)
0937 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hi2s->Instance->RXDR));
0938 #endif
0939 uint32_t tickstart;
0940
0941 if ((pData == NULL) || (Size == 0UL))
0942 {
0943 return HAL_ERROR;
0944 }
0945
0946 if (hi2s->State != HAL_I2S_STATE_READY)
0947 {
0948 return HAL_BUSY;
0949 }
0950
0951
0952 __HAL_LOCK(hi2s);
0953
0954
0955 tickstart = HAL_GetTick();
0956
0957
0958 hi2s->State = HAL_I2S_STATE_BUSY_RX;
0959 hi2s->ErrorCode = HAL_I2S_ERROR_NONE;
0960 hi2s->pRxBuffPtr = pData;
0961 hi2s->RxXferSize = Size;
0962 hi2s->RxXferCount = Size;
0963
0964
0965 hi2s->pTxBuffPtr = NULL;
0966 hi2s->TxXferSize = (uint16_t) 0UL;
0967 hi2s->TxXferCount = (uint16_t) 0UL;
0968
0969
0970 if ((hi2s->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
0971 {
0972
0973 __HAL_I2S_ENABLE(hi2s);
0974 }
0975
0976
0977 SET_BIT(hi2s->Instance->CR1, SPI_CR1_CSTART);
0978
0979
0980 while (hi2s->RxXferCount > 0UL)
0981 {
0982
0983 if (I2S_WaitFlagStateUntilTimeout(hi2s, I2S_FLAG_RXP, SET, tickstart, Timeout) != HAL_OK)
0984 {
0985
0986 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_TIMEOUT);
0987 hi2s->State = HAL_I2S_STATE_READY;
0988 __HAL_UNLOCK(hi2s);
0989 return HAL_TIMEOUT;
0990 }
0991
0992 if ((hi2s->Init.DataFormat == I2S_DATAFORMAT_24B) || (hi2s->Init.DataFormat == I2S_DATAFORMAT_32B))
0993 {
0994
0995 *((uint32_t *)hi2s->pRxBuffPtr) = hi2s->Instance->RXDR;
0996 hi2s->pRxBuffPtr += 2;
0997 hi2s->RxXferCount--;
0998 }
0999 else
1000 {
1001
1002 #if defined (__GNUC__)
1003 *((uint16_t *)hi2s->pRxBuffPtr) = *prxdr_16bits;
1004 #else
1005 *((uint16_t *)hi2s->pRxBuffPtr) = *((__IO uint16_t *)&hi2s->Instance->RXDR);
1006 #endif
1007 hi2s->pRxBuffPtr++;
1008 hi2s->RxXferCount--;
1009 }
1010
1011
1012 if (__HAL_I2S_GET_FLAG(hi2s, I2S_FLAG_OVR) == SET)
1013 {
1014
1015 __HAL_I2S_CLEAR_OVRFLAG(hi2s);
1016
1017
1018 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_OVR);
1019 }
1020 }
1021
1022 hi2s->State = HAL_I2S_STATE_READY;
1023 __HAL_UNLOCK(hi2s);
1024 return HAL_OK;
1025 }
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044 HAL_StatusTypeDef HAL_I2SEx_TransmitReceive(I2S_HandleTypeDef *hi2s, const uint16_t *pTxData, uint16_t *pRxData,
1045 uint16_t Size, uint32_t Timeout)
1046 {
1047 uint32_t tmp_TxXferCount;
1048 uint32_t tmp_RxXferCount;
1049 uint32_t tickstart;
1050
1051 #if defined (__GNUC__)
1052 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hi2s->Instance->TXDR));
1053 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hi2s->Instance->RXDR));
1054 #endif
1055
1056 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
1057 {
1058 return HAL_ERROR;
1059 }
1060
1061 if (hi2s->State != HAL_I2S_STATE_READY)
1062 {
1063 return HAL_BUSY;
1064 }
1065
1066
1067 __HAL_LOCK(hi2s);
1068
1069
1070 tickstart = HAL_GetTick();
1071
1072 hi2s->TxXferSize = Size;
1073 hi2s->TxXferCount = Size;
1074 hi2s->pTxBuffPtr = (const uint16_t *)pTxData;
1075 hi2s->RxXferSize = Size;
1076 hi2s->RxXferCount = Size;
1077 hi2s->pRxBuffPtr = pRxData;
1078
1079 tmp_TxXferCount = hi2s->TxXferCount;
1080 tmp_RxXferCount = hi2s->RxXferCount;
1081
1082
1083 hi2s->ErrorCode = HAL_I2S_ERROR_NONE;
1084 hi2s->State = HAL_I2S_STATE_BUSY_TX_RX;
1085
1086
1087 if ((hi2s->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1088 {
1089
1090 __HAL_I2S_ENABLE(hi2s);
1091 }
1092
1093
1094 SET_BIT(hi2s->Instance->CR1, SPI_CR1_CSTART);
1095
1096 while ((tmp_TxXferCount > 0UL) || (tmp_RxXferCount > 0UL))
1097 {
1098 if ((__HAL_I2S_GET_FLAG(hi2s, I2S_FLAG_TXP) == SET) && (tmp_TxXferCount != 0UL))
1099 {
1100 if ((hi2s->Init.DataFormat == I2S_DATAFORMAT_24B) || (hi2s->Init.DataFormat == I2S_DATAFORMAT_32B))
1101 {
1102
1103 hi2s->Instance->TXDR = *((const uint32_t *)hi2s->pTxBuffPtr);
1104 hi2s->pTxBuffPtr += 2;
1105 tmp_TxXferCount--;
1106 }
1107 else
1108 {
1109
1110 #if defined (__GNUC__)
1111 *ptxdr_16bits = *((const uint16_t *)hi2s->pTxBuffPtr);
1112 #else
1113 *((__IO uint16_t *)&hi2s->Instance->TXDR) = *((const uint16_t *)hi2s->pTxBuffPtr);
1114 #endif
1115
1116 hi2s->pTxBuffPtr++;
1117 tmp_TxXferCount--;
1118 }
1119
1120
1121 if (__HAL_I2S_GET_FLAG(hi2s, I2S_FLAG_UDR) == SET)
1122 {
1123
1124 __HAL_I2S_CLEAR_UDRFLAG(hi2s);
1125
1126
1127 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_UDR);
1128 }
1129 }
1130
1131 if ((__HAL_I2S_GET_FLAG(hi2s, I2S_FLAG_RXP) == SET) && (tmp_RxXferCount != 0UL))
1132 {
1133 if ((hi2s->Init.DataFormat == I2S_DATAFORMAT_24B) || (hi2s->Init.DataFormat == I2S_DATAFORMAT_32B))
1134 {
1135
1136 *((uint32_t *)hi2s->pRxBuffPtr) = hi2s->Instance->RXDR;
1137 hi2s->pRxBuffPtr += 2;
1138 tmp_RxXferCount--;
1139 }
1140 else
1141 {
1142
1143 #if defined (__GNUC__)
1144 *((uint16_t *)hi2s->pRxBuffPtr) = *prxdr_16bits;
1145 #else
1146 *((uint16_t *)hi2s->pRxBuffPtr) = *((__IO uint16_t *)&hi2s->Instance->RXDR);
1147 #endif
1148 hi2s->pRxBuffPtr++;
1149 tmp_RxXferCount--;
1150 }
1151
1152
1153 if (__HAL_I2S_GET_FLAG(hi2s, I2S_FLAG_OVR) == SET)
1154 {
1155
1156 __HAL_I2S_CLEAR_OVRFLAG(hi2s);
1157
1158
1159 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_OVR);
1160 }
1161 }
1162
1163
1164 if ((((HAL_GetTick() - tickstart) >= Timeout) && (Timeout != HAL_MAX_DELAY)) || (Timeout == 0U))
1165 {
1166
1167 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_TIMEOUT);
1168 hi2s->State = HAL_I2S_STATE_READY;
1169 __HAL_UNLOCK(hi2s);
1170 return HAL_TIMEOUT;
1171 }
1172 }
1173
1174 hi2s->State = HAL_I2S_STATE_READY;
1175 __HAL_UNLOCK(hi2s);
1176 return HAL_OK;
1177 }
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193 HAL_StatusTypeDef HAL_I2S_Transmit_IT(I2S_HandleTypeDef *hi2s, const uint16_t *pData, uint16_t Size)
1194 {
1195 if ((pData == NULL) || (Size == 0UL))
1196 {
1197 return HAL_ERROR;
1198 }
1199
1200 if (hi2s->State != HAL_I2S_STATE_READY)
1201 {
1202 return HAL_BUSY;
1203 }
1204
1205
1206 __HAL_LOCK(hi2s);
1207
1208
1209 hi2s->State = HAL_I2S_STATE_BUSY_TX;
1210 hi2s->ErrorCode = HAL_I2S_ERROR_NONE;
1211 hi2s->pTxBuffPtr = (const uint16_t *)pData;
1212 hi2s->TxXferSize = Size;
1213 hi2s->TxXferCount = Size;
1214
1215
1216 hi2s->pRxBuffPtr = NULL;
1217 hi2s->RxXferSize = (uint16_t) 0UL;
1218 hi2s->RxXferCount = (uint16_t) 0UL;
1219
1220
1221 if ((hi2s->Init.DataFormat == I2S_DATAFORMAT_24B) || (hi2s->Init.DataFormat == I2S_DATAFORMAT_32B))
1222 {
1223 hi2s->TxISR = I2S_Transmit_32Bit_IT;
1224 }
1225 else
1226 {
1227 hi2s->TxISR = I2S_Transmit_16Bit_IT;
1228 }
1229
1230
1231 if ((hi2s->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1232 {
1233
1234 __HAL_I2S_ENABLE(hi2s);
1235 }
1236
1237
1238 __HAL_I2S_ENABLE_IT(hi2s, (I2S_IT_TXP | I2S_IT_UDR));
1239
1240
1241 if (hi2s->Init.Mode == I2S_MODE_SLAVE_TX)
1242 {
1243 __HAL_I2S_ENABLE_IT(hi2s, I2S_IT_FRE);
1244 }
1245
1246
1247 SET_BIT(hi2s->Instance->CR1, SPI_CR1_CSTART);
1248
1249 __HAL_UNLOCK(hi2s);
1250 return HAL_OK;
1251 }
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269 HAL_StatusTypeDef HAL_I2S_Receive_IT(I2S_HandleTypeDef *hi2s, uint16_t *pData, uint16_t Size)
1270 {
1271 if ((pData == NULL) || (Size == 0UL))
1272 {
1273 return HAL_ERROR;
1274 }
1275
1276 if (hi2s->State != HAL_I2S_STATE_READY)
1277 {
1278 return HAL_BUSY;
1279 }
1280
1281
1282 __HAL_LOCK(hi2s);
1283
1284
1285 hi2s->State = HAL_I2S_STATE_BUSY_RX;
1286 hi2s->ErrorCode = HAL_I2S_ERROR_NONE;
1287 hi2s->pRxBuffPtr = pData;
1288 hi2s->RxXferSize = Size;
1289 hi2s->RxXferCount = Size;
1290
1291
1292 hi2s->pTxBuffPtr = NULL;
1293 hi2s->TxXferSize = (uint16_t) 0UL;
1294 hi2s->TxXferCount = (uint16_t) 0UL;
1295
1296
1297 if ((hi2s->Init.DataFormat == I2S_DATAFORMAT_24B) || (hi2s->Init.DataFormat == I2S_DATAFORMAT_32B))
1298 {
1299 hi2s->RxISR = I2S_Receive_32Bit_IT;
1300 }
1301 else
1302 {
1303 hi2s->RxISR = I2S_Receive_16Bit_IT;
1304 }
1305
1306
1307 if ((hi2s->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1308 {
1309
1310 __HAL_I2S_ENABLE(hi2s);
1311 }
1312
1313 __HAL_I2S_ENABLE_IT(hi2s, (I2S_IT_RXP | I2S_IT_OVR));
1314
1315
1316 if (hi2s->Init.Mode == I2S_MODE_SLAVE_RX)
1317 {
1318 __HAL_I2S_ENABLE_IT(hi2s, I2S_IT_FRE);
1319 }
1320
1321
1322 SET_BIT(hi2s->Instance->CR1, SPI_CR1_CSTART);
1323
1324 __HAL_UNLOCK(hi2s);
1325 return HAL_OK;
1326 }
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343 HAL_StatusTypeDef HAL_I2SEx_TransmitReceive_IT(I2S_HandleTypeDef *hi2s, const uint16_t *pTxData, uint16_t *pRxData,
1344 uint16_t Size)
1345 {
1346 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
1347 {
1348 return HAL_ERROR;
1349 }
1350
1351 if (hi2s->State != HAL_I2S_STATE_READY)
1352 {
1353 return HAL_BUSY;
1354 }
1355
1356
1357 __HAL_LOCK(hi2s);
1358
1359 hi2s->pTxBuffPtr = (const uint16_t *)pTxData;
1360 hi2s->pRxBuffPtr = pRxData;
1361
1362 hi2s->TxXferSize = Size;
1363 hi2s->TxXferCount = Size;
1364 hi2s->RxXferSize = Size;
1365 hi2s->RxXferCount = Size;
1366
1367 hi2s->ErrorCode = HAL_I2S_ERROR_NONE;
1368 hi2s->State = HAL_I2S_STATE_BUSY_TX_RX;
1369
1370
1371
1372 if ((hi2s->Init.DataFormat == I2S_DATAFORMAT_24B) || (hi2s->Init.DataFormat == I2S_DATAFORMAT_32B))
1373 {
1374 hi2s->TxISR = I2S_Transmit_32Bit_IT;
1375 hi2s->RxISR = I2S_Receive_32Bit_IT;
1376 }
1377 else
1378 {
1379 hi2s->TxISR = I2S_Transmit_16Bit_IT;
1380 hi2s->RxISR = I2S_Receive_16Bit_IT;
1381 }
1382
1383
1384 if ((hi2s->Instance->CR1 & SPI_CR1_SPE) != SPI_CR1_SPE)
1385 {
1386
1387 __HAL_I2S_ENABLE(hi2s);
1388 }
1389
1390
1391 __HAL_I2S_ENABLE_IT(hi2s, (I2S_IT_TXP | I2S_IT_RXP | I2S_IT_DXP | I2S_IT_UDR | I2S_IT_OVR));
1392
1393
1394 if (hi2s->Init.Mode == I2S_MODE_SLAVE_FULLDUPLEX)
1395 {
1396 __HAL_I2S_ENABLE_IT(hi2s, I2S_IT_FRE);
1397 }
1398
1399
1400 SET_BIT(hi2s->Instance->CR1, SPI_CR1_CSTART);
1401
1402 __HAL_UNLOCK(hi2s);
1403 return HAL_OK;
1404
1405 }
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421 HAL_StatusTypeDef HAL_I2S_Transmit_DMA(I2S_HandleTypeDef *hi2s, const uint16_t *pData, uint16_t Size)
1422 {
1423 HAL_StatusTypeDef errorcode = HAL_OK;
1424
1425 if ((pData == NULL) || (Size == 0UL))
1426 {
1427 return HAL_ERROR;
1428 }
1429
1430 if (hi2s->State != HAL_I2S_STATE_READY)
1431 {
1432 return HAL_BUSY;
1433 }
1434
1435
1436 __HAL_LOCK(hi2s);
1437
1438
1439 hi2s->State = HAL_I2S_STATE_BUSY_TX;
1440 hi2s->ErrorCode = HAL_I2S_ERROR_NONE;
1441 hi2s->pTxBuffPtr = (const uint16_t *)pData;
1442 hi2s->TxXferSize = Size;
1443 hi2s->TxXferCount = Size;
1444
1445
1446 hi2s->pRxBuffPtr = NULL;
1447 hi2s->RxXferSize = (uint16_t)0UL;
1448 hi2s->RxXferCount = (uint16_t)0UL;
1449
1450
1451 hi2s->hdmatx->XferHalfCpltCallback = I2S_DMATxHalfCplt;
1452
1453
1454 hi2s->hdmatx->XferCpltCallback = I2S_DMATxCplt;
1455
1456
1457 hi2s->hdmatx->XferErrorCallback = I2S_DMAError;
1458
1459
1460 if (HAL_OK != HAL_DMA_Start_IT(hi2s->hdmatx, (uint32_t)hi2s->pTxBuffPtr, (uint32_t)&hi2s->Instance->TXDR,
1461 hi2s->TxXferCount))
1462 {
1463
1464 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_DMA);
1465 hi2s->State = HAL_I2S_STATE_READY;
1466
1467 __HAL_UNLOCK(hi2s);
1468 errorcode = HAL_ERROR;
1469 return errorcode;
1470 }
1471
1472
1473 if (HAL_IS_BIT_CLR(hi2s->Instance->CFG1, SPI_CFG1_TXDMAEN))
1474 {
1475
1476 SET_BIT(hi2s->Instance->CFG1, SPI_CFG1_TXDMAEN);
1477 }
1478
1479
1480 if (HAL_IS_BIT_CLR(hi2s->Instance->CR1, SPI_CR1_SPE))
1481 {
1482
1483 __HAL_I2S_ENABLE(hi2s);
1484 }
1485
1486
1487 SET_BIT(hi2s->Instance->CR1, SPI_CR1_CSTART);
1488
1489 __HAL_UNLOCK(hi2s);
1490 return errorcode;
1491 }
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507 HAL_StatusTypeDef HAL_I2S_Receive_DMA(I2S_HandleTypeDef *hi2s, uint16_t *pData, uint16_t Size)
1508 {
1509 HAL_StatusTypeDef errorcode = HAL_OK;
1510
1511 if ((pData == NULL) || (Size == 0UL))
1512 {
1513 return HAL_ERROR;
1514 }
1515
1516 if (hi2s->State != HAL_I2S_STATE_READY)
1517 {
1518 return HAL_BUSY;
1519 }
1520
1521
1522 __HAL_LOCK(hi2s);
1523
1524
1525 hi2s->State = HAL_I2S_STATE_BUSY_RX;
1526 hi2s->ErrorCode = HAL_I2S_ERROR_NONE;
1527 hi2s->pRxBuffPtr = pData;
1528 hi2s->RxXferSize = Size;
1529 hi2s->RxXferCount = Size;
1530
1531
1532 hi2s->pTxBuffPtr = NULL;
1533 hi2s->TxXferSize = (uint16_t)0UL;
1534 hi2s->TxXferCount = (uint16_t)0UL;
1535
1536
1537
1538 hi2s->hdmarx->XferHalfCpltCallback = I2S_DMARxHalfCplt;
1539
1540
1541 hi2s->hdmarx->XferCpltCallback = I2S_DMARxCplt;
1542
1543
1544 hi2s->hdmarx->XferErrorCallback = I2S_DMAError;
1545
1546
1547 if (HAL_OK != HAL_DMA_Start_IT(hi2s->hdmarx, (uint32_t)&hi2s->Instance->RXDR, (uint32_t)hi2s->pRxBuffPtr,
1548 hi2s->RxXferCount))
1549 {
1550
1551 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_DMA);
1552 hi2s->State = HAL_I2S_STATE_READY;
1553 errorcode = HAL_ERROR;
1554 __HAL_UNLOCK(hi2s);
1555 return errorcode;
1556 }
1557
1558
1559 if (HAL_IS_BIT_CLR(hi2s->Instance->CFG1, SPI_CFG1_RXDMAEN))
1560 {
1561
1562 SET_BIT(hi2s->Instance->CFG1, SPI_CFG1_RXDMAEN);
1563 }
1564
1565
1566 if (HAL_IS_BIT_CLR(hi2s->Instance->CR1, SPI_CR1_SPE))
1567 {
1568
1569 __HAL_I2S_ENABLE(hi2s);
1570 }
1571
1572
1573 SET_BIT(hi2s->Instance->CR1, SPI_CR1_CSTART);
1574
1575 __HAL_UNLOCK(hi2s);
1576 return errorcode;
1577 }
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594 HAL_StatusTypeDef HAL_I2SEx_TransmitReceive_DMA(I2S_HandleTypeDef *hi2s, const uint16_t *pTxData, uint16_t *pRxData,
1595 uint16_t Size)
1596 {
1597 HAL_StatusTypeDef errorcode = HAL_OK;
1598
1599
1600 if ((pTxData == NULL) || (pRxData == NULL) || (Size == 0U))
1601 {
1602 return HAL_ERROR;
1603 }
1604
1605 if (hi2s->State != HAL_I2S_STATE_READY)
1606 {
1607 return HAL_BUSY;
1608 }
1609
1610
1611 __HAL_LOCK(hi2s);
1612
1613 hi2s->pTxBuffPtr = (const uint16_t *)pTxData;
1614 hi2s->pRxBuffPtr = pRxData;
1615
1616 hi2s->TxXferSize = Size;
1617 hi2s->TxXferCount = Size;
1618 hi2s->RxXferSize = Size;
1619 hi2s->RxXferCount = Size;
1620
1621 hi2s->ErrorCode = HAL_I2S_ERROR_NONE;
1622 hi2s->State = HAL_I2S_STATE_BUSY_TX_RX;
1623
1624
1625 CLEAR_BIT(hi2s->Instance->CFG1, SPI_CFG1_TXDMAEN | SPI_CFG1_RXDMAEN);
1626
1627
1628 hi2s->hdmarx->XferHalfCpltCallback = I2SEx_DMATxRxHalfCplt;
1629
1630
1631 hi2s->hdmarx->XferCpltCallback = I2SEx_DMATxRxCplt;
1632
1633
1634 hi2s->hdmarx->XferErrorCallback = I2S_DMAError;
1635
1636 if (HAL_OK != HAL_DMA_Start_IT(hi2s->hdmatx, (uint32_t)hi2s->pTxBuffPtr, (uint32_t)&hi2s->Instance->TXDR,
1637 hi2s->TxXferCount))
1638 {
1639
1640 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_DMA);
1641 hi2s->State = HAL_I2S_STATE_READY;
1642
1643 __HAL_UNLOCK(hi2s);
1644 errorcode = HAL_ERROR;
1645 return errorcode;
1646 }
1647
1648
1649 if (HAL_IS_BIT_CLR(hi2s->Instance->CFG1, SPI_CFG1_TXDMAEN))
1650 {
1651
1652 SET_BIT(hi2s->Instance->CFG1, SPI_CFG1_TXDMAEN);
1653 }
1654
1655
1656 if (HAL_OK != HAL_DMA_Start_IT(hi2s->hdmarx, (uint32_t)&hi2s->Instance->RXDR, (uint32_t)hi2s->pRxBuffPtr,
1657 hi2s->RxXferCount))
1658 {
1659
1660 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_DMA);
1661 hi2s->State = HAL_I2S_STATE_READY;
1662 errorcode = HAL_ERROR;
1663 __HAL_UNLOCK(hi2s);
1664 return errorcode;
1665 }
1666
1667
1668 if (HAL_IS_BIT_CLR(hi2s->Instance->CFG1, SPI_CFG1_RXDMAEN))
1669 {
1670
1671 SET_BIT(hi2s->Instance->CFG1, SPI_CFG1_RXDMAEN);
1672 }
1673
1674
1675 if (HAL_IS_BIT_CLR(hi2s->Instance->CR1, SPI_CR1_SPE))
1676 {
1677
1678 __HAL_I2S_ENABLE(hi2s);
1679 }
1680
1681
1682 SET_BIT(hi2s->Instance->CR1, SPI_CR1_CSTART);
1683
1684 __HAL_UNLOCK(hi2s);
1685 return errorcode;
1686 }
1687
1688
1689
1690
1691
1692
1693
1694 HAL_StatusTypeDef HAL_I2S_DMAPause(I2S_HandleTypeDef *hi2s)
1695 {
1696
1697 __HAL_LOCK(hi2s);
1698
1699 uint32_t tickstart;
1700
1701
1702 tickstart = HAL_GetTick();
1703
1704
1705
1706 if (IS_I2S_MASTER(hi2s->Init.Mode))
1707 {
1708
1709 if (HAL_IS_BIT_SET(hi2s->Instance->CR1, SPI_CR1_CSTART) == 0UL)
1710 {
1711
1712 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_NO_OGT);
1713 hi2s->State = HAL_I2S_STATE_READY;
1714
1715 __HAL_UNLOCK(hi2s);
1716 return HAL_ERROR;
1717 }
1718
1719 SET_BIT(hi2s->Instance->CR1, SPI_CR1_CSUSP);
1720
1721 while (HAL_IS_BIT_SET(hi2s->Instance->CR1, SPI_CR1_CSTART) != 0UL)
1722 {
1723 if ((((HAL_GetTick() - tickstart) >= I2S_TIMEOUT) && (I2S_TIMEOUT != HAL_MAX_DELAY)) || (I2S_TIMEOUT == 0U))
1724 {
1725
1726 hi2s->State = HAL_I2S_STATE_READY;
1727
1728
1729 __HAL_UNLOCK(hi2s);
1730
1731 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_TIMEOUT);
1732 hi2s->State = HAL_I2S_STATE_READY;
1733 return HAL_TIMEOUT;
1734 }
1735 }
1736
1737
1738 __HAL_I2S_DISABLE(hi2s);
1739
1740 hi2s->State = HAL_I2S_STATE_READY;
1741
1742
1743 __HAL_UNLOCK(hi2s);
1744
1745 return HAL_OK;
1746 }
1747 else
1748 {
1749
1750 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_NOT_SUPPORTED);
1751 hi2s->State = HAL_I2S_STATE_READY;
1752
1753
1754 __HAL_UNLOCK(hi2s);
1755
1756 return HAL_ERROR;
1757 }
1758 }
1759
1760
1761
1762
1763
1764
1765
1766 HAL_StatusTypeDef HAL_I2S_DMAResume(I2S_HandleTypeDef *hi2s)
1767 {
1768
1769 __HAL_LOCK(hi2s);
1770
1771 if (hi2s->State != HAL_I2S_STATE_READY)
1772 {
1773 hi2s->State = HAL_I2S_STATE_READY;
1774
1775 __HAL_UNLOCK(hi2s);
1776 return HAL_ERROR;
1777 }
1778
1779
1780 hi2s->State = HAL_I2S_STATE_BUSY;
1781 hi2s->ErrorCode = HAL_I2S_ERROR_NONE;
1782
1783
1784 __HAL_I2S_ENABLE(hi2s);
1785
1786
1787 SET_BIT(hi2s->Instance->CR1, SPI_CR1_CSTART);
1788
1789
1790 __HAL_UNLOCK(hi2s);
1791
1792 return HAL_OK;
1793 }
1794
1795
1796
1797
1798
1799
1800
1801 HAL_StatusTypeDef HAL_I2S_DMAStop(I2S_HandleTypeDef *hi2s)
1802 {
1803 HAL_StatusTypeDef errorcode = HAL_OK;
1804
1805
1806
1807
1808
1809
1810
1811 CLEAR_BIT(hi2s->Instance->CFG1, SPI_CFG1_TXDMAEN);
1812 CLEAR_BIT(hi2s->Instance->CFG1, SPI_CFG1_RXDMAEN);
1813
1814
1815 if (hi2s->hdmatx != NULL)
1816 {
1817
1818 if (HAL_OK != HAL_DMA_Abort(hi2s->hdmatx))
1819 {
1820 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_DMA);
1821 errorcode = HAL_ERROR;
1822 }
1823 }
1824
1825
1826 if (hi2s->hdmarx != NULL)
1827 {
1828
1829 if (HAL_OK != HAL_DMA_Abort(hi2s->hdmarx))
1830 {
1831 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_DMA);
1832 errorcode = HAL_ERROR;
1833 }
1834 }
1835
1836
1837 __HAL_I2S_DISABLE(hi2s);
1838
1839 hi2s->State = HAL_I2S_STATE_READY;
1840
1841 return errorcode;
1842 }
1843
1844
1845
1846
1847
1848
1849
1850 void HAL_I2S_IRQHandler(I2S_HandleTypeDef *hi2s)
1851 {
1852 uint32_t i2sier = hi2s->Instance->IER;
1853 uint32_t i2ssr = hi2s->Instance->SR;
1854 uint32_t trigger = i2sier & i2ssr;
1855
1856 if (hi2s->State == HAL_I2S_STATE_BUSY_RX)
1857 {
1858
1859 if (HAL_IS_BIT_SET(trigger, I2S_FLAG_RXP) && HAL_IS_BIT_CLR(trigger, I2S_FLAG_OVR))
1860 {
1861 hi2s->RxISR(hi2s);
1862 }
1863
1864
1865 if (HAL_IS_BIT_SET(trigger, I2S_FLAG_OVR))
1866 {
1867
1868 __HAL_I2S_DISABLE_IT(hi2s, (I2S_IT_RXP | I2S_IT_ERR));
1869
1870
1871 __HAL_I2S_CLEAR_OVRFLAG(hi2s);
1872
1873
1874 hi2s->State = HAL_I2S_STATE_READY;
1875
1876
1877
1878 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_OVR);
1879
1880 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
1881 hi2s->ErrorCallback(hi2s);
1882 #else
1883 HAL_I2S_ErrorCallback(hi2s);
1884 #endif
1885 }
1886 }
1887
1888 if (hi2s->State == HAL_I2S_STATE_BUSY_TX)
1889 {
1890
1891 if (HAL_IS_BIT_SET(trigger, I2S_FLAG_TXP) && HAL_IS_BIT_CLR(trigger, I2S_FLAG_UDR))
1892 {
1893 hi2s->TxISR(hi2s);
1894 }
1895
1896
1897 if (HAL_IS_BIT_SET(trigger, I2S_FLAG_UDR))
1898 {
1899
1900 __HAL_I2S_DISABLE_IT(hi2s, (I2S_IT_TXP | I2S_IT_ERR));
1901
1902
1903 __HAL_I2S_CLEAR_UDRFLAG(hi2s);
1904
1905
1906 hi2s->State = HAL_I2S_STATE_READY;
1907
1908
1909 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_UDR);
1910
1911 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
1912 hi2s->ErrorCallback(hi2s);
1913 #else
1914 HAL_I2S_ErrorCallback(hi2s);
1915 #endif
1916 }
1917 }
1918 if (hi2s->State == HAL_I2S_STATE_BUSY_TX_RX)
1919 {
1920
1921 if (HAL_IS_BIT_SET(trigger, I2S_FLAG_DXP))
1922 {
1923 hi2s->TxISR(hi2s);
1924 hi2s->RxISR(hi2s);
1925 }
1926
1927 if (HAL_IS_BIT_SET(trigger, I2S_FLAG_RXP) && HAL_IS_BIT_CLR(trigger, I2S_FLAG_DXP))
1928 {
1929 hi2s->RxISR(hi2s);
1930 }
1931
1932 if (HAL_IS_BIT_SET(trigger, I2S_FLAG_TXP) && HAL_IS_BIT_CLR(trigger, I2S_FLAG_DXP))
1933 {
1934 hi2s->TxISR(hi2s);
1935 }
1936
1937
1938 if (HAL_IS_BIT_SET(trigger, I2S_FLAG_UDR))
1939 {
1940
1941 __HAL_I2S_DISABLE_IT(hi2s, (I2S_IT_TXP | I2S_IT_RXP | I2S_IT_ERR));
1942
1943
1944 __HAL_I2S_CLEAR_UDRFLAG(hi2s);
1945
1946
1947 hi2s->State = HAL_I2S_STATE_READY;
1948
1949
1950 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_UDR);
1951
1952 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
1953 hi2s->ErrorCallback(hi2s);
1954 #else
1955 HAL_I2S_ErrorCallback(hi2s);
1956 #endif
1957 }
1958
1959
1960 if (HAL_IS_BIT_SET(trigger, I2S_FLAG_OVR))
1961 {
1962
1963 __HAL_I2S_DISABLE_IT(hi2s, (I2S_IT_TXP | I2S_IT_RXP | I2S_IT_ERR));
1964
1965
1966 __HAL_I2S_CLEAR_OVRFLAG(hi2s);
1967
1968
1969 hi2s->State = HAL_I2S_STATE_READY;
1970
1971
1972
1973 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_OVR);
1974
1975
1976 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
1977 hi2s->ErrorCallback(hi2s);
1978 #else
1979 HAL_I2S_ErrorCallback(hi2s);
1980 #endif
1981 }
1982 }
1983 }
1984
1985
1986
1987
1988
1989
1990
1991 __weak void HAL_I2S_TxHalfCpltCallback(I2S_HandleTypeDef *hi2s)
1992 {
1993
1994 UNUSED(hi2s);
1995
1996
1997
1998
1999 }
2000
2001
2002
2003
2004
2005
2006
2007 __weak void HAL_I2S_TxCpltCallback(I2S_HandleTypeDef *hi2s)
2008 {
2009
2010 UNUSED(hi2s);
2011
2012
2013
2014
2015 }
2016
2017
2018
2019
2020
2021
2022
2023 __weak void HAL_I2S_RxHalfCpltCallback(I2S_HandleTypeDef *hi2s)
2024 {
2025
2026 UNUSED(hi2s);
2027
2028
2029
2030
2031 }
2032
2033
2034
2035
2036
2037
2038
2039 __weak void HAL_I2S_RxCpltCallback(I2S_HandleTypeDef *hi2s)
2040 {
2041
2042 UNUSED(hi2s);
2043
2044
2045
2046
2047 }
2048
2049
2050
2051
2052
2053
2054
2055 __weak void HAL_I2SEx_TxRxHalfCpltCallback(I2S_HandleTypeDef *hi2s)
2056 {
2057
2058 UNUSED(hi2s);
2059
2060
2061
2062
2063 }
2064
2065
2066
2067
2068
2069
2070
2071 __weak void HAL_I2SEx_TxRxCpltCallback(I2S_HandleTypeDef *hi2s)
2072 {
2073
2074 UNUSED(hi2s);
2075
2076
2077
2078
2079 }
2080
2081
2082
2083
2084
2085
2086
2087 __weak void HAL_I2S_ErrorCallback(I2S_HandleTypeDef *hi2s)
2088 {
2089
2090 UNUSED(hi2s);
2091
2092
2093
2094
2095 }
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123 HAL_I2S_StateTypeDef HAL_I2S_GetState(const I2S_HandleTypeDef *hi2s)
2124 {
2125 return hi2s->State;
2126 }
2127
2128
2129
2130
2131
2132
2133
2134 uint32_t HAL_I2S_GetError(const I2S_HandleTypeDef *hi2s)
2135 {
2136 return hi2s->ErrorCode;
2137 }
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155 static void I2S_DMATxCplt(DMA_HandleTypeDef *hdma)
2156 {
2157
2158 I2S_HandleTypeDef *hi2s = (I2S_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
2159
2160
2161 if (hdma->Init.Mode == DMA_NORMAL)
2162 {
2163
2164 CLEAR_BIT(hi2s->Instance->CFG1, SPI_CFG1_TXDMAEN);
2165
2166 hi2s->TxXferCount = (uint16_t) 0UL;
2167 hi2s->State = HAL_I2S_STATE_READY;
2168 }
2169
2170 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
2171 hi2s->TxCpltCallback(hi2s);
2172 #else
2173 HAL_I2S_TxCpltCallback(hi2s);
2174 #endif
2175 }
2176
2177
2178
2179
2180
2181
2182
2183 static void I2S_DMATxHalfCplt(DMA_HandleTypeDef *hdma)
2184 {
2185
2186 I2S_HandleTypeDef *hi2s = (I2S_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
2187
2188
2189 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
2190 hi2s->TxHalfCpltCallback(hi2s);
2191 #else
2192 HAL_I2S_TxHalfCpltCallback(hi2s);
2193 #endif
2194 }
2195
2196
2197
2198
2199
2200
2201
2202 static void I2S_DMARxCplt(DMA_HandleTypeDef *hdma)
2203 {
2204
2205 I2S_HandleTypeDef *hi2s = (I2S_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
2206
2207
2208 if (hdma->Init.Mode == DMA_NORMAL)
2209 {
2210
2211 CLEAR_BIT(hi2s->Instance->CFG1, SPI_CFG1_RXDMAEN);
2212 hi2s->RxXferCount = (uint16_t)0UL;
2213 hi2s->State = HAL_I2S_STATE_READY;
2214 }
2215
2216 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
2217 hi2s->RxCpltCallback(hi2s);
2218 #else
2219 HAL_I2S_RxCpltCallback(hi2s);
2220 #endif
2221 }
2222
2223
2224
2225
2226
2227
2228
2229 static void I2S_DMARxHalfCplt(DMA_HandleTypeDef *hdma)
2230 {
2231
2232 I2S_HandleTypeDef *hi2s = (I2S_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
2233
2234
2235 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
2236 hi2s->RxHalfCpltCallback(hi2s);
2237 #else
2238 HAL_I2S_RxHalfCpltCallback(hi2s);
2239 #endif
2240 }
2241
2242
2243
2244
2245
2246
2247
2248 static void I2SEx_DMATxRxCplt(DMA_HandleTypeDef *hdma)
2249 {
2250 I2S_HandleTypeDef *hi2s = (I2S_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
2251
2252
2253 if (hdma->Init.Mode == DMA_NORMAL)
2254 {
2255
2256 CLEAR_BIT(hi2s->Instance->CFG1, SPI_CFG1_TXDMAEN);
2257 hi2s->TxXferCount = (uint16_t) 0UL;
2258
2259
2260 CLEAR_BIT(hi2s->Instance->CFG1, SPI_CFG1_RXDMAEN);
2261 hi2s->RxXferCount = (uint16_t)0UL;
2262
2263
2264 hi2s->State = HAL_I2S_STATE_READY;
2265 }
2266
2267
2268 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1U)
2269 hi2s->TxRxCpltCallback(hi2s);
2270 #else
2271 HAL_I2SEx_TxRxCpltCallback(hi2s);
2272 #endif
2273 }
2274
2275
2276
2277
2278
2279
2280
2281 static void I2SEx_DMATxRxHalfCplt(DMA_HandleTypeDef *hdma)
2282 {
2283 I2S_HandleTypeDef *hi2s = (I2S_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
2284
2285
2286 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1U)
2287 hi2s->TxRxHalfCpltCallback(hi2s);
2288 #else
2289 HAL_I2SEx_TxRxHalfCpltCallback(hi2s);
2290 #endif
2291 }
2292
2293
2294
2295
2296
2297
2298
2299 static void I2S_DMAError(DMA_HandleTypeDef *hdma)
2300 {
2301
2302 I2S_HandleTypeDef *hi2s = (I2S_HandleTypeDef *)((DMA_HandleTypeDef *)hdma)->Parent;
2303
2304
2305 CLEAR_BIT(hi2s->Instance->CFG1, (SPI_CFG1_RXDMAEN | SPI_CFG1_TXDMAEN));
2306 hi2s->TxXferCount = (uint16_t) 0UL;
2307 hi2s->RxXferCount = (uint16_t) 0UL;
2308
2309 hi2s->State = HAL_I2S_STATE_READY;
2310
2311
2312 SET_BIT(hi2s->ErrorCode, HAL_I2S_ERROR_DMA);
2313
2314 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
2315 hi2s->ErrorCallback(hi2s);
2316 #else
2317 HAL_I2S_ErrorCallback(hi2s);
2318 #endif
2319 }
2320
2321
2322
2323
2324
2325
2326
2327 static void I2S_Transmit_16Bit_IT(I2S_HandleTypeDef *hi2s)
2328 {
2329
2330 #if defined (__GNUC__)
2331 __IO uint16_t *ptxdr_16bits = (__IO uint16_t *)(&(hi2s->Instance->TXDR));
2332
2333 *ptxdr_16bits = *((const uint16_t *)hi2s->pTxBuffPtr);
2334 #else
2335 *((__IO uint16_t *)&hi2s->Instance->TXDR) = *((const uint16_t *)hi2s->pTxBuffPtr);
2336 #endif
2337 hi2s->pTxBuffPtr++;
2338 hi2s->TxXferCount--;
2339
2340 if (hi2s->TxXferCount == 0UL)
2341 {
2342
2343 __HAL_I2S_DISABLE_IT(hi2s, (I2S_IT_TXP | I2S_IT_ERR));
2344
2345 if ((hi2s->Init.Mode == I2S_MODE_SLAVE_TX) || (hi2s->Init.Mode == I2S_MODE_MASTER_TX))
2346 {
2347 hi2s->State = HAL_I2S_STATE_READY;
2348
2349
2350 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
2351 hi2s->TxCpltCallback(hi2s);
2352 #else
2353 HAL_I2S_TxCpltCallback(hi2s);
2354 #endif
2355 }
2356 }
2357 }
2358
2359
2360
2361
2362
2363
2364
2365 static void I2S_Transmit_32Bit_IT(I2S_HandleTypeDef *hi2s)
2366 {
2367
2368 hi2s->Instance->TXDR = *((const uint32_t *)hi2s->pTxBuffPtr);
2369 hi2s->pTxBuffPtr += 2;
2370 hi2s->TxXferCount--;
2371
2372 if (hi2s->TxXferCount == 0UL)
2373 {
2374
2375 __HAL_I2S_DISABLE_IT(hi2s, (I2S_IT_TXP | I2S_IT_ERR));
2376
2377 if ((hi2s->Init.Mode == I2S_MODE_SLAVE_TX) || (hi2s->Init.Mode == I2S_MODE_MASTER_TX))
2378 {
2379 hi2s->State = HAL_I2S_STATE_READY;
2380
2381
2382 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
2383 hi2s->TxCpltCallback(hi2s);
2384 #else
2385 HAL_I2S_TxCpltCallback(hi2s);
2386 #endif
2387 }
2388 }
2389 }
2390
2391
2392
2393
2394
2395
2396
2397 static void I2S_Receive_16Bit_IT(I2S_HandleTypeDef *hi2s)
2398 {
2399
2400 #if defined (__GNUC__)
2401 __IO uint16_t *prxdr_16bits = (__IO uint16_t *)(&(hi2s->Instance->RXDR));
2402
2403 *((uint16_t *)hi2s->pRxBuffPtr) = *prxdr_16bits;
2404 #else
2405 *((uint16_t *)hi2s->pRxBuffPtr) = *((__IO uint16_t *)&hi2s->Instance->RXDR);
2406 #endif
2407 hi2s->pRxBuffPtr++;
2408 hi2s->RxXferCount--;
2409
2410 if (hi2s->RxXferCount == 0UL)
2411 {
2412 if (IS_I2S_FULLDUPLEX(hi2s->Init.Mode))
2413 {
2414
2415 __HAL_I2S_DISABLE_IT(hi2s, (I2S_IT_TXP | I2S_IT_RXP | I2S_IT_DXP | I2S_IT_ERR));
2416 }
2417 else
2418 {
2419
2420 __HAL_I2S_DISABLE_IT(hi2s, (I2S_IT_RXP | I2S_IT_ERR));
2421 }
2422
2423 hi2s->State = HAL_I2S_STATE_READY;
2424
2425 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
2426 if (IS_I2S_FULLDUPLEX(hi2s->Init.Mode))
2427 {
2428 hi2s->TxRxCpltCallback(hi2s);
2429 }
2430 else
2431 {
2432 hi2s->RxCpltCallback(hi2s);
2433 }
2434 #else
2435 if (IS_I2S_FULLDUPLEX(hi2s->Init.Mode))
2436 {
2437 HAL_I2SEx_TxRxCpltCallback(hi2s);
2438 }
2439 else
2440 {
2441 HAL_I2S_RxCpltCallback(hi2s);
2442 }
2443 #endif
2444 }
2445 }
2446
2447
2448
2449
2450
2451
2452
2453 static void I2S_Receive_32Bit_IT(I2S_HandleTypeDef *hi2s)
2454 {
2455
2456 *((uint32_t *)hi2s->pRxBuffPtr) = hi2s->Instance->RXDR;
2457 hi2s->pRxBuffPtr += 2;
2458 hi2s->RxXferCount--;
2459
2460 if (hi2s->RxXferCount == 0UL)
2461 {
2462 if (IS_I2S_FULLDUPLEX(hi2s->Init.Mode))
2463 {
2464
2465 __HAL_I2S_DISABLE_IT(hi2s, (I2S_IT_TXP | I2S_IT_RXP | I2S_IT_DXP | I2S_IT_ERR));
2466 }
2467 else
2468 {
2469
2470 __HAL_I2S_DISABLE_IT(hi2s, (I2S_IT_RXP | I2S_IT_ERR));
2471 }
2472
2473 hi2s->State = HAL_I2S_STATE_READY;
2474
2475 #if (USE_HAL_I2S_REGISTER_CALLBACKS == 1UL)
2476 if (IS_I2S_FULLDUPLEX(hi2s->Init.Mode))
2477 {
2478 hi2s->TxRxCpltCallback(hi2s);
2479 }
2480 else
2481 {
2482 hi2s->RxCpltCallback(hi2s);
2483 }
2484 #else
2485 if (IS_I2S_FULLDUPLEX(hi2s->Init.Mode))
2486 {
2487 HAL_I2SEx_TxRxCpltCallback(hi2s);
2488 }
2489 else
2490 {
2491 HAL_I2S_RxCpltCallback(hi2s);
2492 }
2493 #endif
2494 }
2495 }
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507 static HAL_StatusTypeDef I2S_WaitFlagStateUntilTimeout(I2S_HandleTypeDef *hi2s, uint32_t Flag, FlagStatus State,
2508 uint32_t Tickstart, uint32_t Timeout)
2509 {
2510
2511 while (((__HAL_I2S_GET_FLAG(hi2s, Flag)) ? SET : RESET) != State)
2512 {
2513 if (Timeout != HAL_MAX_DELAY)
2514 {
2515 if (((HAL_GetTick() - Tickstart) >= Timeout) || (Timeout == 0UL))
2516 {
2517
2518 hi2s->State = HAL_I2S_STATE_READY;
2519
2520
2521 __HAL_UNLOCK(hi2s);
2522
2523 return HAL_TIMEOUT;
2524 }
2525 }
2526 }
2527 return HAL_OK;
2528 }
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542 #endif
2543