File indexing completed on 2025-05-11 08:22:58
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef _FSL_ASRC_H_
0009 #define _FSL_ASRC_H_
0010
0011 #include "fsl_common.h"
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024 #define FSL_ASRC_DRIVER_VERSION (MAKE_VERSION(2, 1, 2))
0025
0026
0027 #ifndef ASRC_XFER_QUEUE_SIZE
0028
0029 #define ASRC_XFER_QUEUE_SIZE (4U)
0030 #endif
0031
0032 #define FSL_ASRC_CHANNEL_PAIR_COUNT (4U)
0033
0034 #define FSL_ASRC_CHANNEL_PAIR_FIFO_DEPTH (64U)
0035
0036
0037 #define ASRC_ASRCTR_AT_MASK(index) ((uint32_t)1U << (ASRC_ASRCTR_ATSA_SHIFT + (uint32_t)(index)))
0038 #define ASRC_ASRCTR_RATIO_MASK(index) ((uint32_t)3U << (ASRC_ASRCTR_IDRA_SHIFT + (uint32_t)(index)*2U))
0039 #define ASRC_ASRCTR_RATIO(ratio, index) \
0040 (((uint32_t)((uint32_t)(ratio) << (ASRC_ASRCTR_IDRA_SHIFT + (uint32_t)(index)*2U))) & ASRC_ASRCTR_RATIO_MASK(index))
0041 #define ASRC_ASRIER_INPUT_INTERRUPT_MASK(index) ((uint32_t)1U << (ASRC_ASRIER_ADIEA_SHIFT + (uint32_t)(index)))
0042 #define ASRC_ASRIER_OUTPUTPUT_INTERRUPT_MASK(index) ((uint32_t)1U << (ASRC_ASRIER_ADOEA_SHIFT + (uint32_t)(index)))
0043 #define ASRC_ASRCNCR_CHANNEL_COUNTER_MASK(index) ((uint32_t)0xFU << (ASRC_ASRCNCR_ANCA_SHIFT + (uint32_t)(index)*4U))
0044 #define ASRC_ASRCNCR_CHANNEL_COUNTER(counter, index) \
0045 ((uint32_t)((uint32_t)(counter) << (ASRC_ASRCNCR_ANCA_SHIFT + (uint32_t)(index)*4U)) & \
0046 ASRC_ASRCNCR_CHANNEL_COUNTER_MASK(index))
0047 #define ASRC_ASRCFG_PRE_MODE_MASK(index) ((uint32_t)3U << (ASRC_ASRCFG_PREMODA_SHIFT + (uint32_t)(index)*4U))
0048 #define ASRC_ASRCFG_PRE_MODE(mode, index) \
0049 ((uint32_t)((uint32_t)(mode) << (ASRC_ASRCFG_PREMODA_SHIFT + (uint32_t)(index)*4U)) & \
0050 ASRC_ASRCFG_PRE_MODE_MASK(index))
0051 #define ASRC_ASRCFG_POST_MODE_MASK(index) ((uint32_t)3U << (ASRC_ASRCFG_POSTMODA_SHIFT + (uint32_t)(index)*4U))
0052 #define ASRC_ASRCFG_POST_MODE(mode, index) \
0053 ((uint32_t)((uint32_t)(mode) << (ASRC_ASRCFG_POSTMODA_SHIFT + (uint32_t)(index)*4U)) & \
0054 ASRC_ASRCFG_POST_MODE_MASK(index))
0055 #define ASRC_ASRCFG_INIT_DONE_MASK(index) ((uint32_t)1U << (ASRC_ASRCFG_INIRQA_SHIFT + (uint32_t)(index)))
0056 #define ASRC_ASRCSR_INPUT_CLOCK_SOURCE_MASK(index) ((uint32_t)0xFU << (ASRC_ASRCSR_AICSA_SHIFT + (uint32_t)(index)*4U))
0057 #define ASRC_ASRCSR_INPUT_CLOCK_SOURCE(source, index) \
0058 ((uint32_t)((uint32_t)(source) << (ASRC_ASRCSR_AICSA_SHIFT + (uint32_t)(index)*4U)) & \
0059 ASRC_ASRCSR_INPUT_CLOCK_SOURCE_MASK(index))
0060 #define ASRC_ASRCSR_OUTPUT_CLOCK_SOURCE_MASK(index) ((uint32_t)0xFU << (ASRC_ASRCSR_AOCSA_SHIFT + (uint32_t)(index)*4U))
0061 #define ASRC_ASRCSR_OUTPUT_CLOCK_SOURCE(source, index) \
0062 ((uint32_t)((uint32_t)(source) << (ASRC_ASRCSR_AOCSA_SHIFT + (uint32_t)(index)*4U)) & \
0063 ASRC_ASRCSR_OUTPUT_CLOCK_SOURCE_MASK(index))
0064
0065 #define ASRC_ASRCDR_INPUT_PRESCALER_MASK(index) \
0066 ((uint32_t)(index) < 2U ? ((uint32_t)7U << (ASRC_ASRCDR1_AICPA_SHIFT + (uint32_t)(index)*6U)) : 7U)
0067 #define ASRC_ASRCDR_INPUT_PRESCALER(prescaler, index) \
0068 (((index) < 2U ? ((uint32_t)(prescaler) << (ASRC_ASRCDR1_AICPA_SHIFT + (uint32_t)(index)*6U)) : (prescaler)) & \
0069 ASRC_ASRCDR1_INPUT_PRESCALER_MASK(index))
0070 #define ASRC_ASRCDR_INPUT_DIVIDER_MASK(index) \
0071 ((uint32_t)(index) < 2U ? ((uint32_t)7U << (ASRC_ASRCDR1_AICDA_SHIFT + (uint32_t)(index)*6U)) : \
0072 (7U << ASRC_ASRCDR1_AICDA_SHIFT))
0073 #define ASRC_ASRCDR_INPUT_DIVIDER(divider, index) \
0074 (((uint32_t)(index) < 2U ? ((uint32_t)(divider) << (ASRC_ASRCDR1_AICDA_SHIFT + (uint32_t)(index)*6U)) : \
0075 ((uint32_t)(divider) << ASRC_ASRCDR1_AICDA_SHIFT)) & \
0076 ASRC_ASRCDR_INPUT_DIVIDER_MASK(index))
0077 #define ASRC_ASRCDR_OUTPUT_PRESCALER_MASK(index) \
0078 ((uint32_t)(index) < 2U ? ((uint32_t)7U << (ASRC_ASRCDR1_AOCPA_SHIFT + (uint32_t)(index)*6U)) : (7U << 6U))
0079 #define ASRC_ASRCDR_OUTPUT_PRESCALER(prescaler, index) \
0080 (((uint32_t)(index) < 2U ? ((uint32_t)(prescaler) << (ASRC_ASRCDR1_AOCPA_SHIFT + (uint32_t)(index)*6U)) : \
0081 ((uint32_t)(prescaler) << 6U)) & \
0082 ASRC_ASRCDR_OUTPUT_PRESCALER_MASK(index))
0083 #define ASRC_ASRCDR_OUTPUT_DIVIDER_MASK(index) \
0084 ((uint32_t)(index) < 2U ? ((uint32_t)7U << (ASRC_ASRCDR1_AOCDA_SHIFT + (uint32_t)(index)*6U)) : (7UL << 9U))
0085 #define ASRC_ASRCDR_OUTPUT_DIVIDER(divider, index) \
0086 (((uint32_t)(index) < 2U ? ((uint32_t)(divider) << (ASRC_ASRCDR1_AOCDA_SHIFT + (uint32_t)(index)*6U)) : \
0087 ((uint32_t)(divider) << 9U)) & \
0088 ASRC_ASRCDR_OUTPUT_DIVIDER_MASK(index))
0089
0090 #define ASCR_ASRCDR_OUTPUT_CLOCK_DIVIDER_PRESCALER(value, index) \
0091 (((uint32_t)(index) < 2U ? ((uint32_t)(value) << (ASRC_ASRCDR1_AOCPA_SHIFT + (uint32_t)(index)*6U)) : \
0092 ((uint32_t)(value) << 6U)))
0093 #define ASCR_ASRCDR_INPUT_CLOCK_DIVIDER_PRESCALER(value, index) \
0094 (((uint32_t)(index) < 2U ? ((uint32_t)(value) << ((uint32_t)(index)*6U)) : ((uint32_t)(value))))
0095
0096 #define ASRC_IDEAL_RATIO_HIGH(base, index) *(volatile uint32_t *)((uint32_t)(&(base)->ASRIDRHA) + (uint32_t)(index)*8U)
0097 #define ASRC_IDEAL_RATIO_LOW(base, index) *(volatile uint32_t *)((uint32_t)(&(base)->ASRIDRLA) + (uint32_t)(index)*8U)
0098 #define ASRC_ASRMCR(base, index) *(volatile uint32_t *)((uint32_t)(&(base)->ASRMCRA) + (uint32_t)(index)*8U)
0099 #define ASRC_ASRMCR1(base, index) *(volatile uint32_t *)((uint32_t)(&((base)->ASRMCR1[(index)])))
0100 #define ASRC_ASRDI(base, index) *(volatile uint32_t *)((uint32_t)(&(base)->ASRDIA) + (uint32_t)(index)*8U)
0101 #define ASRC_ASRDO(base, index) *(volatile uint32_t *)((uint32_t)(&(base)->ASRDOA) + (uint32_t)(index)*8U)
0102 #define ASRC_ASRDI_ADDR(base, index) (volatile uint32_t *)((uint32_t)(&(base)->ASRDIA) + (uint32_t)(index)*8U)
0103 #define ASRC_ASRDO_ADDR(base, index) (volatile uint32_t *)((uint32_t)(&(base)->ASRDOA) + (uint32_t)(index)*8U)
0104 #define ASRC_ASRFST_ADDR(base, index) (*(volatile uint32_t *)((uint32_t)(&(base)->ASRFSTA) + (uint32_t)(index)*8U))
0105 #define ASRC_GET_CHANNEL_COUNTER(base, index) (((base)->ASRCNCR >> ((uint32_t)(index)*4U)) & 0xFU)
0106
0107
0108
0109
0110 enum
0111 {
0112 kStatus_ASRCIdle = MAKE_STATUS(kStatusGroup_ASRC, 0),
0113 kStatus_ASRCInIdle = MAKE_STATUS(kStatusGroup_ASRC, 1),
0114 kStatus_ASRCOutIdle = MAKE_STATUS(kStatusGroup_ASRC, 2),
0115 kStatus_ASRCBusy = MAKE_STATUS(kStatusGroup_ASRC, 3),
0116 kStatus_ASRCInvalidArgument = MAKE_STATUS(kStatusGroup_ASRC, 4),
0117 kStatus_ASRCClockConfigureFailed = MAKE_STATUS(kStatusGroup_ASRC, 5),
0118 kStatus_ASRCChannelPairConfigureFailed = MAKE_STATUS(kStatusGroup_ASRC, 6),
0119 kStatus_ASRCConvertError = MAKE_STATUS(kStatusGroup_ASRC, 7),
0120 kStatus_ASRCNotSupport = MAKE_STATUS(kStatusGroup_ASRC, 8),
0121 kStatus_ASRCQueueFull = MAKE_STATUS(kStatusGroup_ASRC, 9),
0122 kStatus_ASRCOutQueueIdle = MAKE_STATUS(kStatusGroup_ASRC, 10),
0123 kStatus_ASRCInQueueIdle = MAKE_STATUS(kStatusGroup_ASRC, 11),
0124 };
0125
0126
0127 typedef enum _asrc_channel_pair
0128 {
0129 kASRC_ChannelPairA = 0,
0130 kASRC_ChannelPairB = 1,
0131 kASRC_ChannelPairC = 2,
0132 } asrc_channel_pair_t;
0133
0134
0135
0136
0137 enum
0138 {
0139 kASRC_SampleRate_8000HZ = 8000U,
0140 kASRC_SampleRate_11025HZ = 11025U,
0141 kASRC_SampleRate_12000HZ = 12000U,
0142 kASRC_SampleRate_16000HZ = 16000U,
0143 kASRC_SampleRate_22050HZ = 22050U,
0144 kASRC_SampleRate_24000HZ = 24000U,
0145 kASRC_SampleRate_30000HZ = 30000U,
0146 kASRC_SampleRate_32000HZ = 32000U,
0147 kASRC_SampleRate_44100HZ = 44100U,
0148 kASRC_SampleRate_48000HZ = 48000U,
0149 kASRC_SampleRate_64000HZ = 64000U,
0150 kASRC_SampleRate_88200HZ = 88200U,
0151 kASRC_SampleRate_96000HZ = 96000U,
0152 kASRC_SampleRate_128000HZ = 128000U,
0153 kASRC_SampleRate_176400HZ = 176400U,
0154 kASRC_SampleRate_192000HZ = 192000U,
0155 };
0156
0157
0158
0159
0160 enum
0161 {
0162 kASRC_FPInWaitStateInterruptEnable = ASRC_ASRIER_AFPWE_MASK,
0163 kASRC_OverLoadInterruptMask = ASRC_ASRIER_AOLIE_MASK,
0164 kASRC_DataOutputCInterruptMask = ASRC_ASRIER_ADOEC_MASK,
0165 kASRC_DataOutputBInterruptMask = ASRC_ASRIER_ADOEB_MASK,
0166 kASRC_DataOutputAInterruptMask = ASRC_ASRIER_ADOEA_MASK,
0167 kASRC_DataInputCInterruptMask = ASRC_ASRIER_ADIEC_MASK,
0168 kASRC_DataInputBInterruptMask = ASRC_ASRIER_ADIEB_MASK,
0169 kASRC_DataInputAInterruptMask = ASRC_ASRIER_ADIEA_MASK,
0170 };
0171
0172
0173
0174
0175 enum
0176 {
0177 kASRC_StatusDSLCounterReady = ASRC_ASRSTR_DSLCNT_MASK,
0178 kASRC_StatusTaskQueueOverLoad = ASRC_ASRSTR_ATQOL_MASK,
0179 kASRC_StatusPairCOutputOverLoad = ASRC_ASRSTR_AOOLC_MASK,
0180 kASRC_StatusPairBOutputOverLoad = ASRC_ASRSTR_AOOLB_MASK,
0181 kASRC_StatusPairAOutputOverLoad = ASRC_ASRSTR_AOOLA_MASK,
0182 kASRC_StatusPairCInputOverLoad = ASRC_ASRSTR_AIOLC_MASK,
0183 kASRC_StatusPairBInputOverLoad = ASRC_ASRSTR_AIOLB_MASK,
0184 kASRC_StatusPairAInputOverLoad = ASRC_ASRSTR_AIOLA_MASK,
0185 kASRC_StatusPairCOutputOverflow = ASRC_ASRSTR_AODOC_MASK,
0186 kASRC_StatusPairBOutputOverflow = ASRC_ASRSTR_AODOB_MASK,
0187 kASRC_StatusPairAOutputOverflow = ASRC_ASRSTR_AODOA_MASK,
0188 kASRC_StatusPairCInputUnderflow = ASRC_ASRSTR_AIDUC_MASK,
0189 kASRC_StatusPairBInputUnderflow = ASRC_ASRSTR_AIDUB_MASK,
0190 kASRC_StatusPairAInputUnderflow = ASRC_ASRSTR_AIDUA_MASK,
0191 kASRC_StatusFPInWaitState = ASRC_ASRSTR_FPWT_MASK,
0192 kASRC_StatusOverloadError = ASRC_ASRSTR_AOLE_MASK,
0193
0194 kASRC_StatusInputError = kASRC_StatusPairCInputOverLoad | kASRC_StatusPairBInputOverLoad |
0195 kASRC_StatusPairAInputOverLoad | kASRC_StatusPairCInputUnderflow |
0196 kASRC_StatusPairBInputUnderflow |
0197 kASRC_StatusPairAInputUnderflow,
0198
0199 kASRC_StatusOutputError = kASRC_StatusPairCOutputOverLoad | kASRC_StatusPairBOutputOverLoad |
0200 kASRC_StatusPairAOutputOverLoad | kASRC_StatusPairCOutputOverflow |
0201 kASRC_StatusPairBOutputOverflow |
0202 kASRC_StatusPairAOutputOverflow,
0203
0204 kASRC_StatusPairCOutputReady = ASRC_ASRSTR_AODFC_MASK,
0205 kASRC_StatusPairBOutputReady = ASRC_ASRSTR_AODFB_MASK,
0206 kASRC_StatusPairAOutputReady = ASRC_ASRSTR_AODFA_MASK,
0207 kASRC_StatusPairCInputReady = ASRC_ASRSTR_AIDEC_MASK,
0208 kASRC_StatusPairBInputReady = ASRC_ASRSTR_AIDEB_MASK,
0209 kASRC_StatusPairAInputReady = ASRC_ASRSTR_AIDEA_MASK,
0210 kASRC_StatusPairAInterrupt = kASRC_StatusPairAInputReady | kASRC_StatusPairAOutputReady,
0211 kASRC_StatusPairBInterrupt = kASRC_StatusPairBInputReady | kASRC_StatusPairBOutputReady,
0212 kASRC_StatusPairCInterrupt = kASRC_StatusPairCInputReady | kASRC_StatusPairCOutputReady,
0213
0214 };
0215
0216
0217
0218
0219 enum
0220 {
0221 kASRC_OutputFifoNearFull = ASRC_ASRFSTA_OAFA_MASK,
0222 kASRC_InputFifoNearEmpty = ASRC_ASRFSTA_IAEA_MASK,
0223 };
0224
0225
0226 typedef enum _asrc_ratio
0227 {
0228 kASRC_RatioNotUsed = 0U,
0229 kASRC_RatioUseInternalMeasured =
0230 2U,
0231 kASRC_RatioUseIdealRatio =
0232 3U,
0233 } asrc_ratio_t;
0234
0235
0236 typedef enum _asrc_audio_channel
0237 {
0238 kASRC_ChannelsNumber1 = 1U,
0239 kASRC_ChannelsNumber2 = 2U,
0240 kASRC_ChannelsNumber3 = 3U,
0241 kASRC_ChannelsNumber4 = 4U,
0242 kASRC_ChannelsNumber5 = 5U,
0243 kASRC_ChannelsNumber6 = 6U,
0244 kASRC_ChannelsNumber7 = 7U,
0245 kASRC_ChannelsNumber8 = 8U,
0246 kASRC_ChannelsNumber9 = 9U,
0247 kASRC_ChannelsNumber10 = 10U,
0248 } asrc_audio_channel_t;
0249
0250
0251 typedef enum _asrc_data_width
0252 {
0253 kASRC_DataWidth24Bit = 0U,
0254 kASRC_DataWidth16Bit = 1U,
0255 kASRC_DataWidth8Bit = 2U,
0256 } asrc_data_width_t;
0257
0258
0259 typedef enum _asrc_data_align
0260 {
0261 kASRC_DataAlignMSB = 1U,
0262 kASRC_DataAlignLSB = 0U,
0263 } asrc_data_align_t;
0264
0265
0266 typedef enum _asrc_sign_extension
0267 {
0268 kASRC_NoSignExtension = 0U,
0269 kASRC_SignExtension = 1U,
0270 } asrc_sign_extension_t;
0271
0272
0273 typedef struct _asrc_channel_pair_config
0274 {
0275 asrc_audio_channel_t audioDataChannels;
0276 asrc_clock_source_t
0277 inClockSource;
0278 uint32_t inSourceClock_Hz;
0279
0280 asrc_clock_source_t
0281 outClockSource;
0282 uint32_t outSourceClock_Hz;
0283
0284 asrc_ratio_t sampleRateRatio;
0285
0286 asrc_data_width_t inDataWidth;
0287 asrc_data_align_t inDataAlign;
0288
0289 asrc_data_width_t outDataWidth;
0290 asrc_data_align_t outDataAlign;
0291 asrc_sign_extension_t outSignExtension;
0292
0293 uint8_t outFifoThreshold;
0294 uint8_t inFifoThreshold;
0295
0296 bool bufStallWhenFifoEmptyFull;
0297
0298 } asrc_channel_pair_config_t;
0299
0300
0301 typedef struct _asrc_transfer
0302 {
0303 void *inData;
0304 size_t inDataSize;
0305 void *outData;
0306 size_t outDataSize;
0307 } asrc_transfer_t;
0308
0309
0310 typedef struct _asrc_handle asrc_handle_t;
0311
0312
0313 typedef void (*asrc_transfer_callback_t)(ASRC_Type *base, asrc_handle_t *handle, status_t status, void *userData);
0314
0315
0316 typedef struct _asrc_in_handle
0317 {
0318 asrc_transfer_callback_t callback;
0319 uint32_t sampleWidth;
0320 uint32_t sampleMask;
0321 uint32_t fifoThreshold;
0322 uint8_t *asrcQueue[ASRC_XFER_QUEUE_SIZE];
0323 size_t transferSamples[ASRC_XFER_QUEUE_SIZE];
0324 volatile uint8_t queueUser;
0325 volatile uint8_t queueDriver;
0326 } asrc_in_handle_t;
0327
0328
0329 typedef struct _asrc_out_handle
0330 {
0331 asrc_transfer_callback_t callback;
0332 uint32_t sampleWidth;
0333 uint32_t fifoThreshold;
0334 uint8_t *asrcQueue[ASRC_XFER_QUEUE_SIZE];
0335 size_t transferSamples[ASRC_XFER_QUEUE_SIZE];
0336 volatile uint8_t queueUser;
0337 volatile uint8_t queueDriver;
0338 } asrc_out_handle_t;
0339
0340
0341 struct _asrc_handle
0342 {
0343 ASRC_Type *base;
0344
0345 uint32_t state;
0346 void *userData;
0347
0348 asrc_audio_channel_t audioDataChannels;
0349 asrc_channel_pair_t channelPair;
0350
0351 asrc_in_handle_t in;
0352 asrc_out_handle_t out;
0353 };
0354
0355
0356
0357
0358 #if defined(__cplusplus)
0359 extern "C" {
0360 #endif
0361
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372 uint32_t ASRC_GetInstance(ASRC_Type *base);
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382 void ASRC_Init(ASRC_Type *base, uint32_t asrcPeripheralClock_Hz);
0383
0384
0385
0386
0387
0388
0389
0390
0391 void ASRC_Deinit(ASRC_Type *base);
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402 void ASRC_SoftwareReset(ASRC_Type *base);
0403
0404
0405
0406
0407
0408
0409
0410
0411
0412
0413 status_t ASRC_SetChannelPairConfig(ASRC_Type *base,
0414 asrc_channel_pair_t channelPair,
0415 asrc_channel_pair_config_t *config,
0416 uint32_t inputSampleRate,
0417 uint32_t outputSampleRate);
0418
0419
0420
0421
0422
0423
0424
0425
0426
0427
0428
0429
0430
0431 uint32_t ASRC_GetOutSamplesSize(ASRC_Type *base,
0432 asrc_channel_pair_t channelPair,
0433 uint32_t inSampleRate,
0434 uint32_t outSampleRate,
0435 uint32_t inSamplesize);
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447 uint32_t ASRC_MapSamplesWidth(ASRC_Type *base, asrc_channel_pair_t channelPair, uint32_t *inWidth, uint32_t *outWidth);
0448
0449
0450
0451
0452
0453
0454
0455
0456
0457
0458
0459 uint32_t ASRC_GetRemainFifoSamples(ASRC_Type *base,
0460 asrc_channel_pair_t channelPair,
0461 uint32_t *buffer,
0462 uint32_t outSampleWidth,
0463 uint32_t remainSamples);
0464
0465
0466
0467
0468
0469
0470
0471 static inline void ASRC_ModuleEnable(ASRC_Type *base, bool enable)
0472 {
0473 if (enable)
0474 {
0475 base->ASRCTR |= ASRC_ASRCTR_ASRCEN_MASK;
0476 }
0477 else
0478 {
0479 base->ASRCTR &= ~ASRC_ASRCTR_ASRCEN_MASK;
0480 }
0481 }
0482
0483
0484
0485
0486
0487
0488
0489
0490 static inline void ASRC_ChannelPairEnable(ASRC_Type *base, asrc_channel_pair_t channelPair, bool enable)
0491 {
0492 if (enable)
0493 {
0494 base->ASRCTR |= 1UL << ((uint32_t)channelPair + 1U);
0495 }
0496 else
0497 {
0498 base->ASRCTR &= ~(1UL << ((uint32_t)channelPair + 1U));
0499 }
0500 }
0501
0502
0503
0504
0505
0506
0507
0508
0509
0510
0511
0512
0513
0514
0515 static inline void ASRC_EnableInterrupt(ASRC_Type *base, uint32_t mask)
0516 {
0517 base->ASRIER |= mask;
0518 }
0519
0520
0521
0522
0523
0524
0525
0526
0527 static inline void ASRC_DisableInterrupt(ASRC_Type *base, uint32_t mask)
0528 {
0529 base->ASRIER &= ~mask;
0530 }
0531
0532
0533
0534
0535
0536
0537
0538
0539
0540
0541
0542
0543
0544
0545 static inline uint32_t ASRC_GetStatus(ASRC_Type *base)
0546 {
0547 return base->ASRSTR;
0548 }
0549
0550
0551
0552
0553
0554
0555
0556
0557 static inline bool ASRC_GetChannelPairInitialStatus(ASRC_Type *base, asrc_channel_pair_t channel)
0558 {
0559 return ((base->ASRCFG >> ASRC_ASRCFG_INIRQA_SHIFT) & (1U << (uint32_t)channel)) == 0U ? false : true;
0560 }
0561
0562
0563
0564
0565
0566
0567
0568
0569 static inline uint32_t ASRC_GetChannelPairFifoStatus(ASRC_Type *base, asrc_channel_pair_t channelPair)
0570 {
0571 return ASRC_ASRMCR(base, channelPair) & ((uint32_t)kASRC_OutputFifoNearFull | (uint32_t)kASRC_InputFifoNearEmpty);
0572 }
0573
0574
0575
0576
0577
0578
0579
0580
0581
0582
0583
0584
0585
0586
0587
0588 static inline void ASRC_ChannelPairWriteData(ASRC_Type *base, asrc_channel_pair_t channelPair, uint32_t data)
0589 {
0590 ASRC_ASRDI(base, channelPair) = data;
0591 }
0592
0593
0594
0595
0596
0597
0598
0599
0600
0601 static inline uint32_t ASRC_ChannelPairReadData(ASRC_Type *base, asrc_channel_pair_t channelPair)
0602 {
0603 return ASRC_ASRDO(base, channelPair);
0604 }
0605
0606
0607
0608
0609
0610
0611
0612
0613 static inline uint32_t ASRC_GetInputDataRegisterAddress(ASRC_Type *base, asrc_channel_pair_t channelPair)
0614 {
0615 return (uint32_t)ASRC_ASRDI_ADDR(base, channelPair);
0616 }
0617
0618
0619
0620
0621
0622
0623
0624
0625 static inline uint32_t ASRC_GetOutputDataRegisterAddress(ASRC_Type *base, asrc_channel_pair_t channelPair)
0626 {
0627 return (uint32_t)ASRC_ASRDO_ADDR(base, channelPair);
0628 }
0629
0630
0631
0632
0633
0634
0635
0636
0637
0638
0639 status_t ASRC_SetIdealRatioConfig(ASRC_Type *base,
0640 asrc_channel_pair_t channelPair,
0641 uint32_t inputSampleRate,
0642 uint32_t outputSampleRate);
0643
0644
0645
0646
0647
0648
0649
0650
0651
0652
0653
0654
0655
0656
0657
0658
0659
0660 status_t ASRC_TransferSetChannelPairConfig(ASRC_Type *base,
0661 asrc_handle_t *handle,
0662 asrc_channel_pair_config_t *config,
0663 uint32_t inputSampleRate,
0664 uint32_t outputSampleRate);
0665
0666
0667
0668
0669
0670
0671
0672
0673
0674
0675
0676
0677
0678
0679 void ASRC_TransferCreateHandle(ASRC_Type *base,
0680 asrc_handle_t *handle,
0681 asrc_channel_pair_t channelPair,
0682 asrc_transfer_callback_t inCallback,
0683 asrc_transfer_callback_t outCallback,
0684 void *userData);
0685
0686
0687
0688
0689
0690
0691
0692
0693
0694
0695
0696
0697
0698 status_t ASRC_TransferNonBlocking(ASRC_Type *base, asrc_handle_t *handle, asrc_transfer_t *xfer);
0699
0700
0701
0702
0703
0704
0705
0706
0707
0708
0709
0710 status_t ASRC_TransferBlocking(ASRC_Type *base, asrc_channel_pair_t channelPair, asrc_transfer_t *xfer);
0711
0712
0713
0714
0715
0716
0717
0718
0719
0720
0721 status_t ASRC_TransferGetConvertedCount(ASRC_Type *base, asrc_handle_t *handle, size_t *count);
0722
0723
0724
0725
0726
0727
0728
0729
0730
0731
0732 void ASRC_TransferAbortConvert(ASRC_Type *base, asrc_handle_t *handle);
0733
0734
0735
0736
0737
0738
0739
0740
0741
0742
0743 void ASRC_TransferTerminateConvert(ASRC_Type *base, asrc_handle_t *handle);
0744
0745
0746
0747
0748
0749
0750
0751 void ASRC_TransferHandleIRQ(ASRC_Type *base, asrc_handle_t *handle);
0752
0753
0754
0755 #if defined(__cplusplus)
0756 }
0757 #endif
0758
0759
0760
0761 #endif