File indexing completed on 2025-05-11 08:23:36
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #ifndef STM32H7xx_HAL_SAI_H
0021 #define STM32H7xx_HAL_SAI_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 enum
0048 {
0049 HAL_SAI_STATE_RESET = 0x00U,
0050 HAL_SAI_STATE_READY = 0x01U,
0051 HAL_SAI_STATE_BUSY = 0x02U,
0052 HAL_SAI_STATE_BUSY_TX = 0x12U,
0053 HAL_SAI_STATE_BUSY_RX = 0x22U,
0054 } HAL_SAI_StateTypeDef;
0055
0056
0057
0058
0059 typedef void (*SAIcallback)(void);
0060
0061
0062
0063
0064
0065
0066 typedef struct
0067 {
0068 FunctionalState Activation;
0069 uint32_t MicPairsNbr;
0070
0071 uint32_t ClockEnable;
0072
0073 } SAI_PdmInitTypeDef;
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083 typedef struct
0084 {
0085 uint32_t AudioMode;
0086
0087
0088 uint32_t Synchro;
0089
0090
0091 uint32_t SynchroExt;
0092
0093
0094
0095
0096
0097 uint32_t MckOutput;
0098
0099
0100
0101 uint32_t OutputDrive;
0102
0103
0104
0105
0106 uint32_t NoDivider;
0107
0108
0109
0110
0111
0112
0113
0114 uint32_t FIFOThreshold;
0115
0116
0117 uint32_t AudioFrequency;
0118
0119
0120 uint32_t Mckdiv;
0121
0122
0123
0124
0125 uint32_t MckOverSampling;
0126
0127
0128 uint32_t MonoStereoMode;
0129
0130
0131 uint32_t CompandingMode;
0132
0133
0134 uint32_t TriState;
0135
0136
0137 SAI_PdmInitTypeDef PdmInit;
0138
0139
0140
0141
0142 uint32_t Protocol;
0143
0144
0145 uint32_t DataSize;
0146
0147
0148 uint32_t FirstBit;
0149
0150
0151 uint32_t ClockStrobing;
0152
0153 } SAI_InitTypeDef;
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164 typedef struct
0165 {
0166
0167 uint32_t FrameLength;
0168
0169
0170
0171
0172
0173 uint32_t ActiveFrameLength;
0174
0175
0176
0177
0178 uint32_t FSDefinition;
0179
0180
0181 uint32_t FSPolarity;
0182
0183
0184 uint32_t FSOffset;
0185
0186
0187 } SAI_FrameInitTypeDef;
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199 typedef struct
0200 {
0201 uint32_t FirstBitOffset;
0202
0203
0204 uint32_t SlotSize;
0205
0206
0207 uint32_t SlotNumber;
0208
0209
0210 uint32_t SlotActive;
0211
0212 } SAI_SlotInitTypeDef;
0213
0214
0215
0216
0217
0218
0219
0220
0221
0222 typedef struct __SAI_HandleTypeDef
0223 {
0224 SAI_Block_TypeDef *Instance;
0225
0226 SAI_InitTypeDef Init;
0227
0228 SAI_FrameInitTypeDef FrameInit;
0229
0230 SAI_SlotInitTypeDef SlotInit;
0231
0232 uint8_t *pBuffPtr;
0233
0234 uint16_t XferSize;
0235
0236 uint16_t XferCount;
0237
0238 DMA_HandleTypeDef *hdmatx;
0239
0240 DMA_HandleTypeDef *hdmarx;
0241
0242 SAIcallback mutecallback;
0243
0244 void (*InterruptServiceRoutine)(struct __SAI_HandleTypeDef *hsai);
0245
0246 HAL_LockTypeDef Lock;
0247
0248 __IO HAL_SAI_StateTypeDef State;
0249
0250 __IO uint32_t ErrorCode;
0251
0252 #if (USE_HAL_SAI_REGISTER_CALLBACKS == 1)
0253 void (*RxCpltCallback)(struct __SAI_HandleTypeDef *hsai);
0254 void (*RxHalfCpltCallback)(struct __SAI_HandleTypeDef *hsai);
0255 void (*TxCpltCallback)(struct __SAI_HandleTypeDef *hsai);
0256 void (*TxHalfCpltCallback)(struct __SAI_HandleTypeDef *hsai);
0257 void (*ErrorCallback)(struct __SAI_HandleTypeDef *hsai);
0258 void (*MspInitCallback)(struct __SAI_HandleTypeDef *hsai);
0259 void (*MspDeInitCallback)(struct __SAI_HandleTypeDef *hsai);
0260 #endif
0261 } SAI_HandleTypeDef;
0262
0263
0264
0265
0266 #if (USE_HAL_SAI_REGISTER_CALLBACKS == 1)
0267
0268
0269
0270 typedef enum
0271 {
0272 HAL_SAI_RX_COMPLETE_CB_ID = 0x00U,
0273 HAL_SAI_RX_HALFCOMPLETE_CB_ID = 0x01U,
0274 HAL_SAI_TX_COMPLETE_CB_ID = 0x02U,
0275 HAL_SAI_TX_HALFCOMPLETE_CB_ID = 0x03U,
0276 HAL_SAI_ERROR_CB_ID = 0x04U,
0277 HAL_SAI_MSPINIT_CB_ID = 0x05U,
0278 HAL_SAI_MSPDEINIT_CB_ID = 0x06U
0279 } HAL_SAI_CallbackIDTypeDef;
0280
0281
0282
0283
0284 typedef void (*pSAI_CallbackTypeDef)(SAI_HandleTypeDef *hsai);
0285 #endif
0286
0287
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297
0298
0299
0300
0301 #define HAL_SAI_ERROR_NONE 0x00000000U
0302 #define HAL_SAI_ERROR_OVR 0x00000001U
0303 #define HAL_SAI_ERROR_UDR 0x00000002U
0304 #define HAL_SAI_ERROR_AFSDET 0x00000004U
0305 #define HAL_SAI_ERROR_LFSDET 0x00000008U
0306 #define HAL_SAI_ERROR_CNREADY 0x00000010U
0307 #define HAL_SAI_ERROR_WCKCFG 0x00000020U
0308 #define HAL_SAI_ERROR_TIMEOUT 0x00000040U
0309 #define HAL_SAI_ERROR_DMA 0x00000080U
0310 #if (USE_HAL_SAI_REGISTER_CALLBACKS == 1)
0311 #define HAL_SAI_ERROR_INVALID_CALLBACK 0x00000100U
0312 #endif
0313
0314
0315
0316
0317
0318
0319
0320
0321 #define SAI_SYNCEXT_DISABLE 0U
0322 #define SAI_SYNCEXT_OUTBLOCKA_ENABLE 1U
0323 #define SAI_SYNCEXT_OUTBLOCKB_ENABLE 2U
0324
0325
0326
0327
0328
0329
0330
0331
0332 #define SAI_MCK_OUTPUT_DISABLE 0x00000000U
0333 #define SAI_MCK_OUTPUT_ENABLE SAI_xCR1_MCKEN
0334
0335
0336
0337
0338
0339
0340
0341
0342 #define SAI_I2S_STANDARD 0U
0343 #define SAI_I2S_MSBJUSTIFIED 1U
0344 #define SAI_I2S_LSBJUSTIFIED 2U
0345 #define SAI_PCM_LONG 3U
0346 #define SAI_PCM_SHORT 4U
0347
0348
0349
0350
0351
0352
0353
0354
0355 #define SAI_PROTOCOL_DATASIZE_16BIT 0U
0356 #define SAI_PROTOCOL_DATASIZE_16BITEXTENDED 1U
0357 #define SAI_PROTOCOL_DATASIZE_24BIT 2U
0358 #define SAI_PROTOCOL_DATASIZE_32BIT 3U
0359
0360
0361
0362
0363
0364
0365
0366
0367 #define SAI_AUDIO_FREQUENCY_192K 192000U
0368 #define SAI_AUDIO_FREQUENCY_96K 96000U
0369 #define SAI_AUDIO_FREQUENCY_48K 48000U
0370 #define SAI_AUDIO_FREQUENCY_44K 44100U
0371 #define SAI_AUDIO_FREQUENCY_32K 32000U
0372 #define SAI_AUDIO_FREQUENCY_22K 22050U
0373 #define SAI_AUDIO_FREQUENCY_16K 16000U
0374 #define SAI_AUDIO_FREQUENCY_11K 11025U
0375 #define SAI_AUDIO_FREQUENCY_8K 8000U
0376 #define SAI_AUDIO_FREQUENCY_MCKDIV 0U
0377
0378
0379
0380
0381
0382
0383
0384
0385 #define SAI_MCK_OVERSAMPLING_DISABLE 0x00000000U
0386 #define SAI_MCK_OVERSAMPLING_ENABLE SAI_xCR1_OSR
0387
0388
0389
0390
0391
0392
0393
0394
0395 #define SAI_PDM_CLOCK1_ENABLE SAI_PDMCR_CKEN1
0396 #define SAI_PDM_CLOCK2_ENABLE SAI_PDMCR_CKEN2
0397
0398
0399
0400
0401
0402
0403
0404
0405 #define SAI_MODEMASTER_TX 0x00000000U
0406 #define SAI_MODEMASTER_RX SAI_xCR1_MODE_0
0407 #define SAI_MODESLAVE_TX SAI_xCR1_MODE_1
0408 #define SAI_MODESLAVE_RX (SAI_xCR1_MODE_1 | SAI_xCR1_MODE_0)
0409
0410
0411
0412
0413
0414
0415
0416
0417
0418 #define SAI_FREE_PROTOCOL 0x00000000U
0419 #define SAI_SPDIF_PROTOCOL SAI_xCR1_PRTCFG_0
0420 #define SAI_AC97_PROTOCOL SAI_xCR1_PRTCFG_1
0421
0422
0423
0424
0425
0426
0427
0428
0429 #define SAI_DATASIZE_8 SAI_xCR1_DS_1
0430 #define SAI_DATASIZE_10 (SAI_xCR1_DS_1 | SAI_xCR1_DS_0)
0431 #define SAI_DATASIZE_16 SAI_xCR1_DS_2
0432 #define SAI_DATASIZE_20 (SAI_xCR1_DS_2 | SAI_xCR1_DS_0)
0433 #define SAI_DATASIZE_24 (SAI_xCR1_DS_2 | SAI_xCR1_DS_1)
0434 #define SAI_DATASIZE_32 (SAI_xCR1_DS_2 | SAI_xCR1_DS_1 | SAI_xCR1_DS_0)
0435
0436
0437
0438
0439
0440
0441
0442
0443 #define SAI_FIRSTBIT_MSB 0x00000000U
0444 #define SAI_FIRSTBIT_LSB SAI_xCR1_LSBFIRST
0445
0446
0447
0448
0449
0450
0451
0452
0453 #define SAI_CLOCKSTROBING_FALLINGEDGE 0U
0454 #define SAI_CLOCKSTROBING_RISINGEDGE 1U
0455
0456
0457
0458
0459
0460
0461
0462
0463 #define SAI_ASYNCHRONOUS 0U
0464 #define SAI_SYNCHRONOUS 1U
0465 #define SAI_SYNCHRONOUS_EXT_SAI1 2U
0466 #if defined(SAI2)
0467 #define SAI_SYNCHRONOUS_EXT_SAI2 3U
0468 #endif
0469 #if defined(SAI3)
0470 #define SAI_SYNCHRONOUS_EXT_SAI3 4U
0471 #endif
0472 #if defined(SAI4)
0473 #define SAI_SYNCHRONOUS_EXT_SAI4 5U
0474 #endif
0475
0476
0477
0478
0479
0480
0481
0482
0483 #define SAI_OUTPUTDRIVE_DISABLE 0x00000000U
0484 #define SAI_OUTPUTDRIVE_ENABLE SAI_xCR1_OUTDRIV
0485
0486
0487
0488
0489
0490
0491
0492
0493 #define SAI_MASTERDIVIDER_ENABLE 0x00000000U
0494 #define SAI_MASTERDIVIDER_DISABLE SAI_xCR1_NODIV
0495
0496
0497
0498
0499
0500
0501
0502
0503 #define SAI_FS_STARTFRAME 0x00000000U
0504 #define SAI_FS_CHANNEL_IDENTIFICATION SAI_xFRCR_FSDEF
0505
0506
0507
0508
0509
0510
0511
0512
0513 #define SAI_FS_ACTIVE_LOW 0x00000000U
0514 #define SAI_FS_ACTIVE_HIGH SAI_xFRCR_FSPOL
0515
0516
0517
0518
0519
0520
0521
0522
0523 #define SAI_FS_FIRSTBIT 0x00000000U
0524 #define SAI_FS_BEFOREFIRSTBIT SAI_xFRCR_FSOFF
0525
0526
0527
0528
0529
0530
0531
0532
0533 #define SAI_SLOTSIZE_DATASIZE 0x00000000U
0534 #define SAI_SLOTSIZE_16B SAI_xSLOTR_SLOTSZ_0
0535 #define SAI_SLOTSIZE_32B SAI_xSLOTR_SLOTSZ_1
0536
0537
0538
0539
0540
0541
0542
0543
0544 #define SAI_SLOT_NOTACTIVE 0x00000000U
0545 #define SAI_SLOTACTIVE_0 0x00000001U
0546 #define SAI_SLOTACTIVE_1 0x00000002U
0547 #define SAI_SLOTACTIVE_2 0x00000004U
0548 #define SAI_SLOTACTIVE_3 0x00000008U
0549 #define SAI_SLOTACTIVE_4 0x00000010U
0550 #define SAI_SLOTACTIVE_5 0x00000020U
0551 #define SAI_SLOTACTIVE_6 0x00000040U
0552 #define SAI_SLOTACTIVE_7 0x00000080U
0553 #define SAI_SLOTACTIVE_8 0x00000100U
0554 #define SAI_SLOTACTIVE_9 0x00000200U
0555 #define SAI_SLOTACTIVE_10 0x00000400U
0556 #define SAI_SLOTACTIVE_11 0x00000800U
0557 #define SAI_SLOTACTIVE_12 0x00001000U
0558 #define SAI_SLOTACTIVE_13 0x00002000U
0559 #define SAI_SLOTACTIVE_14 0x00004000U
0560 #define SAI_SLOTACTIVE_15 0x00008000U
0561 #define SAI_SLOTACTIVE_ALL 0x0000FFFFU
0562
0563
0564
0565
0566
0567
0568
0569
0570 #define SAI_STEREOMODE 0x00000000U
0571 #define SAI_MONOMODE SAI_xCR1_MONO
0572
0573
0574
0575
0576
0577
0578
0579
0580 #define SAI_OUTPUT_NOTRELEASED 0x00000000U
0581 #define SAI_OUTPUT_RELEASED SAI_xCR2_TRIS
0582
0583
0584
0585
0586
0587
0588
0589
0590 #define SAI_FIFOTHRESHOLD_EMPTY 0x00000000U
0591 #define SAI_FIFOTHRESHOLD_1QF SAI_xCR2_FTH_0
0592 #define SAI_FIFOTHRESHOLD_HF SAI_xCR2_FTH_1
0593 #define SAI_FIFOTHRESHOLD_3QF (SAI_xCR2_FTH_1 | SAI_xCR2_FTH_0)
0594 #define SAI_FIFOTHRESHOLD_FULL SAI_xCR2_FTH_2
0595
0596
0597
0598
0599
0600
0601
0602
0603 #define SAI_NOCOMPANDING 0x00000000U
0604 #define SAI_ULAW_1CPL_COMPANDING SAI_xCR2_COMP_1
0605 #define SAI_ALAW_1CPL_COMPANDING (SAI_xCR2_COMP_1 | SAI_xCR2_COMP_0)
0606 #define SAI_ULAW_2CPL_COMPANDING (SAI_xCR2_COMP_1 | SAI_xCR2_CPL)
0607 #define SAI_ALAW_2CPL_COMPANDING (SAI_xCR2_COMP_1 | SAI_xCR2_COMP_0 | SAI_xCR2_CPL)
0608
0609
0610
0611
0612
0613
0614
0615
0616 #define SAI_ZERO_VALUE 0x00000000U
0617 #define SAI_LAST_SENT_VALUE SAI_xCR2_MUTEVAL
0618
0619
0620
0621
0622
0623
0624
0625
0626 #define SAI_IT_OVRUDR SAI_xIMR_OVRUDRIE
0627 #define SAI_IT_MUTEDET SAI_xIMR_MUTEDETIE
0628 #define SAI_IT_WCKCFG SAI_xIMR_WCKCFGIE
0629 #define SAI_IT_FREQ SAI_xIMR_FREQIE
0630 #define SAI_IT_CNRDY SAI_xIMR_CNRDYIE
0631 #define SAI_IT_AFSDET SAI_xIMR_AFSDETIE
0632 #define SAI_IT_LFSDET SAI_xIMR_LFSDETIE
0633
0634
0635
0636
0637
0638
0639
0640
0641 #define SAI_FLAG_OVRUDR SAI_xSR_OVRUDR
0642 #define SAI_FLAG_MUTEDET SAI_xSR_MUTEDET
0643 #define SAI_FLAG_WCKCFG SAI_xSR_WCKCFG
0644 #define SAI_FLAG_FREQ SAI_xSR_FREQ
0645 #define SAI_FLAG_CNRDY SAI_xSR_CNRDY
0646 #define SAI_FLAG_AFSDET SAI_xSR_AFSDET
0647 #define SAI_FLAG_LFSDET SAI_xSR_LFSDET
0648
0649
0650
0651
0652
0653
0654
0655
0656 #define SAI_FIFOSTATUS_EMPTY 0x00000000U
0657 #define SAI_FIFOSTATUS_LESS1QUARTERFULL 0x00010000U
0658 #define SAI_FIFOSTATUS_1QUARTERFULL 0x00020000U
0659 #define SAI_FIFOSTATUS_HALFFULL 0x00030000U
0660 #define SAI_FIFOSTATUS_3QUARTERFULL 0x00040000U
0661 #define SAI_FIFOSTATUS_FULL 0x00050000U
0662
0663
0664
0665
0666
0667
0668
0669
0670
0671
0672
0673
0674
0675
0676
0677
0678
0679
0680
0681 #if (USE_HAL_SAI_REGISTER_CALLBACKS == 1)
0682 #define __HAL_SAI_RESET_HANDLE_STATE(__HANDLE__) do{ \
0683 (__HANDLE__)->State = HAL_SAI_STATE_RESET; \
0684 (__HANDLE__)->MspInitCallback = NULL; \
0685 (__HANDLE__)->MspDeInitCallback = NULL; \
0686 } while(0U)
0687 #else
0688 #define __HAL_SAI_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_SAI_STATE_RESET)
0689 #endif
0690
0691
0692
0693
0694
0695
0696
0697
0698
0699
0700
0701
0702
0703
0704 #define __HAL_SAI_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IMR |= (__INTERRUPT__))
0705
0706
0707
0708
0709
0710
0711
0712
0713
0714
0715
0716
0717
0718
0719 #define __HAL_SAI_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IMR &= (~(__INTERRUPT__)))
0720
0721
0722
0723
0724
0725
0726
0727
0728
0729
0730
0731
0732
0733
0734 #define __HAL_SAI_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->IMR & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
0735
0736
0737
0738
0739
0740
0741
0742
0743
0744
0745
0746
0747
0748
0749 #define __HAL_SAI_GET_FLAG(__HANDLE__, __FLAG__) ((((__HANDLE__)->Instance->SR) & (__FLAG__)) == (__FLAG__))
0750
0751
0752
0753
0754
0755
0756
0757
0758
0759
0760
0761
0762
0763
0764
0765 #define __HAL_SAI_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->CLRFR = (__FLAG__))
0766
0767
0768
0769
0770
0771 #define __HAL_SAI_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= SAI_xCR1_SAIEN)
0772
0773
0774
0775
0776
0777 #define __HAL_SAI_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~SAI_xCR1_SAIEN)
0778
0779
0780
0781
0782
0783
0784 #include "stm32h7xx_hal_sai_ex.h"
0785
0786
0787
0788
0789
0790
0791
0792
0793
0794
0795 HAL_StatusTypeDef HAL_SAI_InitProtocol(SAI_HandleTypeDef *hsai, uint32_t protocol, uint32_t datasize, uint32_t nbslot);
0796 HAL_StatusTypeDef HAL_SAI_Init(SAI_HandleTypeDef *hsai);
0797 HAL_StatusTypeDef HAL_SAI_DeInit(SAI_HandleTypeDef *hsai);
0798 void HAL_SAI_MspInit(SAI_HandleTypeDef *hsai);
0799 void HAL_SAI_MspDeInit(SAI_HandleTypeDef *hsai);
0800
0801 #if (USE_HAL_SAI_REGISTER_CALLBACKS == 1)
0802
0803 HAL_StatusTypeDef HAL_SAI_RegisterCallback(SAI_HandleTypeDef *hsai,
0804 HAL_SAI_CallbackIDTypeDef CallbackID,
0805 pSAI_CallbackTypeDef pCallback);
0806 HAL_StatusTypeDef HAL_SAI_UnRegisterCallback(SAI_HandleTypeDef *hsai,
0807 HAL_SAI_CallbackIDTypeDef CallbackID);
0808 #endif
0809
0810
0811
0812
0813
0814
0815
0816
0817
0818 HAL_StatusTypeDef HAL_SAI_Transmit(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t Timeout);
0819 HAL_StatusTypeDef HAL_SAI_Receive(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size, uint32_t Timeout);
0820
0821
0822 HAL_StatusTypeDef HAL_SAI_Transmit_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size);
0823 HAL_StatusTypeDef HAL_SAI_Receive_IT(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size);
0824
0825
0826 HAL_StatusTypeDef HAL_SAI_Transmit_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size);
0827 HAL_StatusTypeDef HAL_SAI_Receive_DMA(SAI_HandleTypeDef *hsai, uint8_t *pData, uint16_t Size);
0828 HAL_StatusTypeDef HAL_SAI_DMAPause(SAI_HandleTypeDef *hsai);
0829 HAL_StatusTypeDef HAL_SAI_DMAResume(SAI_HandleTypeDef *hsai);
0830 HAL_StatusTypeDef HAL_SAI_DMAStop(SAI_HandleTypeDef *hsai);
0831
0832
0833 HAL_StatusTypeDef HAL_SAI_Abort(SAI_HandleTypeDef *hsai);
0834
0835
0836 HAL_StatusTypeDef HAL_SAI_EnableTxMuteMode(SAI_HandleTypeDef *hsai, uint16_t val);
0837 HAL_StatusTypeDef HAL_SAI_DisableTxMuteMode(SAI_HandleTypeDef *hsai);
0838 HAL_StatusTypeDef HAL_SAI_EnableRxMuteMode(SAI_HandleTypeDef *hsai, SAIcallback callback, uint16_t counter);
0839 HAL_StatusTypeDef HAL_SAI_DisableRxMuteMode(SAI_HandleTypeDef *hsai);
0840
0841
0842 void HAL_SAI_IRQHandler(SAI_HandleTypeDef *hsai);
0843 void HAL_SAI_TxHalfCpltCallback(SAI_HandleTypeDef *hsai);
0844 void HAL_SAI_TxCpltCallback(SAI_HandleTypeDef *hsai);
0845 void HAL_SAI_RxHalfCpltCallback(SAI_HandleTypeDef *hsai);
0846 void HAL_SAI_RxCpltCallback(SAI_HandleTypeDef *hsai);
0847 void HAL_SAI_ErrorCallback(SAI_HandleTypeDef *hsai);
0848
0849
0850
0851
0852
0853
0854
0855
0856 HAL_SAI_StateTypeDef HAL_SAI_GetState(const SAI_HandleTypeDef *hsai);
0857 uint32_t HAL_SAI_GetError(const SAI_HandleTypeDef *hsai);
0858
0859
0860
0861
0862
0863
0864
0865
0866
0867
0868
0869
0870
0871 #define IS_SAI_BLOCK_SYNCEXT(STATE) (((STATE) == SAI_SYNCEXT_DISABLE) ||\
0872 ((STATE) == SAI_SYNCEXT_OUTBLOCKA_ENABLE) ||\
0873 ((STATE) == SAI_SYNCEXT_OUTBLOCKB_ENABLE))
0874
0875 #define IS_SAI_SUPPORTED_PROTOCOL(PROTOCOL) (((PROTOCOL) == SAI_I2S_STANDARD) ||\
0876 ((PROTOCOL) == SAI_I2S_MSBJUSTIFIED) ||\
0877 ((PROTOCOL) == SAI_I2S_LSBJUSTIFIED) ||\
0878 ((PROTOCOL) == SAI_PCM_LONG) ||\
0879 ((PROTOCOL) == SAI_PCM_SHORT))
0880
0881 #define IS_SAI_PROTOCOL_DATASIZE(DATASIZE) (((DATASIZE) == SAI_PROTOCOL_DATASIZE_16BIT) ||\
0882 ((DATASIZE) == SAI_PROTOCOL_DATASIZE_16BITEXTENDED) ||\
0883 ((DATASIZE) == SAI_PROTOCOL_DATASIZE_24BIT) ||\
0884 ((DATASIZE) == SAI_PROTOCOL_DATASIZE_32BIT))
0885
0886 #define IS_SAI_AUDIO_FREQUENCY(AUDIO) (((AUDIO) == SAI_AUDIO_FREQUENCY_192K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_96K) || \
0887 ((AUDIO) == SAI_AUDIO_FREQUENCY_48K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_44K) || \
0888 ((AUDIO) == SAI_AUDIO_FREQUENCY_32K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_22K) || \
0889 ((AUDIO) == SAI_AUDIO_FREQUENCY_16K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_11K) || \
0890 ((AUDIO) == SAI_AUDIO_FREQUENCY_8K) || ((AUDIO) == SAI_AUDIO_FREQUENCY_MCKDIV))
0891
0892 #define IS_SAI_BLOCK_MCK_OVERSAMPLING(VALUE) (((VALUE) == SAI_MCK_OVERSAMPLING_DISABLE) || \
0893 ((VALUE) == SAI_MCK_OVERSAMPLING_ENABLE))
0894
0895 #define IS_SAI_PDM_MIC_PAIRS_NUMBER(VALUE) ((1U <= (VALUE)) && ((VALUE) <= 3U))
0896
0897 #define IS_SAI_PDM_CLOCK_ENABLE(CLOCK) (((CLOCK) != 0U) && \
0898 (((CLOCK) & ~(SAI_PDM_CLOCK1_ENABLE | SAI_PDM_CLOCK2_ENABLE)) == 0U))
0899
0900 #define IS_SAI_BLOCK_MODE(MODE) (((MODE) == SAI_MODEMASTER_TX) || \
0901 ((MODE) == SAI_MODEMASTER_RX) || \
0902 ((MODE) == SAI_MODESLAVE_TX) || \
0903 ((MODE) == SAI_MODESLAVE_RX))
0904
0905 #define IS_SAI_BLOCK_PROTOCOL(PROTOCOL) (((PROTOCOL) == SAI_FREE_PROTOCOL) || \
0906 ((PROTOCOL) == SAI_AC97_PROTOCOL) || \
0907 ((PROTOCOL) == SAI_SPDIF_PROTOCOL))
0908
0909 #define IS_SAI_BLOCK_DATASIZE(DATASIZE) (((DATASIZE) == SAI_DATASIZE_8) || \
0910 ((DATASIZE) == SAI_DATASIZE_10) || \
0911 ((DATASIZE) == SAI_DATASIZE_16) || \
0912 ((DATASIZE) == SAI_DATASIZE_20) || \
0913 ((DATASIZE) == SAI_DATASIZE_24) || \
0914 ((DATASIZE) == SAI_DATASIZE_32))
0915
0916 #define IS_SAI_BLOCK_FIRST_BIT(BIT) (((BIT) == SAI_FIRSTBIT_MSB) || \
0917 ((BIT) == SAI_FIRSTBIT_LSB))
0918
0919 #define IS_SAI_BLOCK_CLOCK_STROBING(CLOCK) (((CLOCK) == SAI_CLOCKSTROBING_FALLINGEDGE) || \
0920 ((CLOCK) == SAI_CLOCKSTROBING_RISINGEDGE))
0921 #if defined(SAI2) && defined(SAI3) && defined(SAI4)
0922 #define IS_SAI_BLOCK_SYNCHRO(SYNCHRO) (((SYNCHRO) == SAI_ASYNCHRONOUS) || \
0923 ((SYNCHRO) == SAI_SYNCHRONOUS) || \
0924 ((SYNCHRO) == SAI_SYNCHRONOUS_EXT_SAI1) || \
0925 ((SYNCHRO) == SAI_SYNCHRONOUS_EXT_SAI2) || \
0926 ((SYNCHRO) == SAI_SYNCHRONOUS_EXT_SAI3) || \
0927 ((SYNCHRO) == SAI_SYNCHRONOUS_EXT_SAI4))
0928 #elif defined(SAI2)
0929 #define IS_SAI_BLOCK_SYNCHRO(SYNCHRO) (((SYNCHRO) == SAI_ASYNCHRONOUS) || \
0930 ((SYNCHRO) == SAI_SYNCHRONOUS) || \
0931 ((SYNCHRO) == SAI_SYNCHRONOUS_EXT_SAI1) || \
0932 ((SYNCHRO) == SAI_SYNCHRONOUS_EXT_SAI2))
0933 #else
0934 #define IS_SAI_BLOCK_SYNCHRO(SYNCHRO) (((SYNCHRO) == SAI_ASYNCHRONOUS) || \
0935 ((SYNCHRO) == SAI_SYNCHRONOUS) || \
0936 ((SYNCHRO) == SAI_SYNCHRONOUS_EXT_SAI1) || \
0937 ((SYNCHRO) == SAI_SYNCHRONOUS_EXT_SAI4))
0938 #endif
0939
0940 #define IS_SAI_BLOCK_MCK_OUTPUT(VALUE) (((VALUE) == SAI_MCK_OUTPUT_ENABLE) || \
0941 ((VALUE) == SAI_MCK_OUTPUT_DISABLE))
0942
0943 #define IS_SAI_BLOCK_OUTPUT_DRIVE(DRIVE) (((DRIVE) == SAI_OUTPUTDRIVE_DISABLE) || \
0944 ((DRIVE) == SAI_OUTPUTDRIVE_ENABLE))
0945
0946 #define IS_SAI_BLOCK_NODIVIDER(NODIVIDER) (((NODIVIDER) == SAI_MASTERDIVIDER_ENABLE) || \
0947 ((NODIVIDER) == SAI_MASTERDIVIDER_DISABLE))
0948
0949 #define IS_SAI_BLOCK_MUTE_COUNTER(COUNTER) ((COUNTER) <= 63U)
0950
0951 #define IS_SAI_BLOCK_MUTE_VALUE(VALUE) (((VALUE) == SAI_ZERO_VALUE) || \
0952 ((VALUE) == SAI_LAST_SENT_VALUE))
0953
0954 #define IS_SAI_BLOCK_COMPANDING_MODE(MODE) (((MODE) == SAI_NOCOMPANDING) || \
0955 ((MODE) == SAI_ULAW_1CPL_COMPANDING) || \
0956 ((MODE) == SAI_ALAW_1CPL_COMPANDING) || \
0957 ((MODE) == SAI_ULAW_2CPL_COMPANDING) || \
0958 ((MODE) == SAI_ALAW_2CPL_COMPANDING))
0959
0960 #define IS_SAI_BLOCK_FIFO_THRESHOLD(THRESHOLD) (((THRESHOLD) == SAI_FIFOTHRESHOLD_EMPTY) || \
0961 ((THRESHOLD) == SAI_FIFOTHRESHOLD_1QF) || \
0962 ((THRESHOLD) == SAI_FIFOTHRESHOLD_HF) || \
0963 ((THRESHOLD) == SAI_FIFOTHRESHOLD_3QF) || \
0964 ((THRESHOLD) == SAI_FIFOTHRESHOLD_FULL))
0965
0966 #define IS_SAI_BLOCK_TRISTATE_MANAGEMENT(STATE) (((STATE) == SAI_OUTPUT_NOTRELEASED) ||\
0967 ((STATE) == SAI_OUTPUT_RELEASED))
0968
0969 #define IS_SAI_MONO_STEREO_MODE(MODE) (((MODE) == SAI_MONOMODE) ||\
0970 ((MODE) == SAI_STEREOMODE))
0971
0972 #define IS_SAI_SLOT_ACTIVE(ACTIVE) ((ACTIVE) <= SAI_SLOTACTIVE_ALL)
0973
0974 #define IS_SAI_BLOCK_SLOT_NUMBER(NUMBER) ((1U <= (NUMBER)) && ((NUMBER) <= 16U))
0975
0976 #define IS_SAI_BLOCK_SLOT_SIZE(SIZE) (((SIZE) == SAI_SLOTSIZE_DATASIZE) || \
0977 ((SIZE) == SAI_SLOTSIZE_16B) || \
0978 ((SIZE) == SAI_SLOTSIZE_32B))
0979
0980 #define IS_SAI_BLOCK_FIRSTBIT_OFFSET(OFFSET) ((OFFSET) <= 24U)
0981
0982 #define IS_SAI_BLOCK_FS_OFFSET(OFFSET) (((OFFSET) == SAI_FS_FIRSTBIT) || \
0983 ((OFFSET) == SAI_FS_BEFOREFIRSTBIT))
0984
0985 #define IS_SAI_BLOCK_FS_POLARITY(POLARITY) (((POLARITY) == SAI_FS_ACTIVE_LOW) || \
0986 ((POLARITY) == SAI_FS_ACTIVE_HIGH))
0987
0988 #define IS_SAI_BLOCK_FS_DEFINITION(DEFINITION) (((DEFINITION) == SAI_FS_STARTFRAME) || \
0989 ((DEFINITION) == SAI_FS_CHANNEL_IDENTIFICATION))
0990
0991 #define IS_SAI_BLOCK_MASTER_DIVIDER(DIVIDER) ((DIVIDER) <= 63U)
0992
0993 #define IS_SAI_BLOCK_FRAME_LENGTH(LENGTH) ((8U <= (LENGTH)) && ((LENGTH) <= 256U))
0994
0995 #define IS_SAI_BLOCK_ACTIVE_FRAME(LENGTH) ((1U <= (LENGTH)) && ((LENGTH) <= 128U))
0996
0997
0998
0999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019 #ifdef __cplusplus
1020 }
1021 #endif
1022
1023 #endif
1024