123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 |
- /*
- * Copyright 2019 NXP
- * All rights reserved.
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- #include "fsl_anatop_ai.h"
- /* Component ID definition, used by tools. */
- #ifndef FSL_COMPONENT_ID
- #define FSL_COMPONENT_ID "platform.drivers.anatop_ai"
- #endif
- uint32_t ANATOP_AI_Access(anatop_ai_itf_t itf, bool isWrite, anatop_ai_reg_t addr, uint32_t wdata)
- {
- uint32_t temp;
- uint32_t rdata;
- uint32_t pre_toggle_done;
- uint32_t toggle_done;
- switch (itf)
- {
- case kAI_Itf_Ldo:
- if (isWrite)
- {
- ANADIG_MISC->VDDSOC_AI_CTRL &= ~ANADIG_MISC_VDDSOC_AI_CTRL_VDDSOC_AIRWB_MASK;
- temp = ANADIG_MISC->VDDSOC_AI_CTRL;
- temp &= ~ANADIG_MISC_VDDSOC_AI_CTRL_VDDSOC_AI_ADDR_MASK;
- temp |= ((uint32_t)addr << ANADIG_MISC_VDDSOC_AI_CTRL_VDDSOC_AI_ADDR_SHIFT) &
- ANADIG_MISC_VDDSOC_AI_CTRL_VDDSOC_AI_ADDR_MASK;
- ANADIG_MISC->VDDSOC_AI_CTRL = temp;
- ANADIG_MISC->VDDSOC_AI_WDATA = wdata; /* write ai data */
- ANADIG_PMU->PMU_LDO_PLL ^= ANADIG_PMU_PMU_LDO_PLL_LDO_PLL_AI_TOGGLE_MASK; /* toggle */
- }
- else /* read */
- {
- temp = ANADIG_MISC->VDDSOC_AI_CTRL;
- temp &= ~ANADIG_MISC_VDDSOC_AI_CTRL_VDDSOC_AIRWB_MASK;
- temp |= (1UL << ANADIG_MISC_VDDSOC_AI_CTRL_VDDSOC_AIRWB_SHIFT) &
- ANADIG_MISC_VDDSOC_AI_CTRL_VDDSOC_AIRWB_MASK;
- ANADIG_MISC->VDDSOC_AI_CTRL = temp;
- temp = ANADIG_MISC->VDDSOC_AI_CTRL;
- temp &= ~ANADIG_MISC_VDDSOC_AI_CTRL_VDDSOC_AI_ADDR_MASK;
- temp |= ((uint32_t)addr << ANADIG_MISC_VDDSOC_AI_CTRL_VDDSOC_AI_ADDR_SHIFT) &
- ANADIG_MISC_VDDSOC_AI_CTRL_VDDSOC_AI_ADDR_MASK;
- ANADIG_MISC->VDDSOC_AI_CTRL = temp;
- ANADIG_PMU->PMU_LDO_PLL ^= ANADIG_PMU_PMU_LDO_PLL_LDO_PLL_AI_TOGGLE_MASK; /* toggle */
- rdata = ANADIG_MISC->VDDSOC_AI_RDATA; /* read data */
- return rdata;
- }
- break;
- case kAI_Itf_1g:
- if (isWrite)
- {
- pre_toggle_done =
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_1G &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AITOGGLE_DONE_1G_MASK; /* get pre_toggle_done */
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_1G &= ~ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AIRWB_1G_MASK;
- temp = ANADIG_MISC->VDDSOC2PLL_AI_CTRL_1G;
- temp &= ~ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AIADDR_1G_MASK;
- temp |= ((uint32_t)addr << ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AIADDR_1G_SHIFT) &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AIADDR_1G_MASK;
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_1G = temp;
- ANADIG_MISC->VDDSOC2PLL_AI_WDATA_1G = wdata; /* write ai data */
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_1G ^=
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AITOGGLE_1G_MASK; /* toggle */
- do
- {
- toggle_done =
- (ANADIG_MISC->VDDSOC2PLL_AI_CTRL_1G &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AITOGGLE_DONE_1G_MASK); /* wait toggle done
- toggle */
- } while (toggle_done == pre_toggle_done);
- }
- else
- {
- pre_toggle_done =
- (ANADIG_MISC->VDDSOC2PLL_AI_CTRL_1G &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AITOGGLE_DONE_1G_MASK); /* get pre_toggle_done */
- temp = ANADIG_MISC->VDDSOC2PLL_AI_CTRL_1G;
- temp &= ~ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AIRWB_1G_MASK;
- temp |= (1UL << ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AIRWB_1G_SHIFT) &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AIRWB_1G_MASK;
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_1G = temp;
- temp = ANADIG_MISC->VDDSOC2PLL_AI_CTRL_1G;
- temp &= ~ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AIADDR_1G_MASK;
- temp |= ((uint32_t)addr << ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AIADDR_1G_SHIFT) &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AIADDR_1G_MASK;
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_1G = temp;
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_1G ^=
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AITOGGLE_1G_MASK; /* toggle */
- do
- {
- toggle_done =
- (ANADIG_MISC->VDDSOC2PLL_AI_CTRL_1G &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_1G_VDDSOC2PLL_AITOGGLE_DONE_1G_MASK); /* wait toggle done
- toggle */
- } while (toggle_done == pre_toggle_done);
- rdata = ANADIG_MISC->VDDSOC2PLL_AI_RDATA_1G; /* read data */
- return rdata;
- }
- break;
- case kAI_Itf_Audio:
- if (isWrite)
- {
- pre_toggle_done =
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_AUDIO &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AITOGGLE_DONE_AUDIO_MASK; /* get pre_toggle_done */
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_AUDIO &=
- ~ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AIRWB_AUDIO_MASK;
- temp = ANADIG_MISC->VDDSOC2PLL_AI_CTRL_AUDIO;
- temp &= ~ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AI_ADDR_AUDIO_MASK;
- temp |= ((uint32_t)addr << ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AI_ADDR_AUDIO_SHIFT) &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AI_ADDR_AUDIO_MASK;
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_AUDIO = temp;
- ANADIG_MISC->VDDSOC2PLL_AI_WDATA_AUDIO = wdata; /* write ai data */
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_AUDIO ^=
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AITOGGLE_AUDIO_MASK; /* toggle */
- do
- {
- toggle_done =
- (ANADIG_MISC->VDDSOC2PLL_AI_CTRL_AUDIO &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AITOGGLE_DONE_AUDIO_MASK); /* wait toggle done
- toggle */
- } while (toggle_done == pre_toggle_done);
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_AUDIO &=
- ~ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AIRWB_AUDIO_MASK;
- }
- else
- {
- pre_toggle_done =
- (ANADIG_MISC->VDDSOC2PLL_AI_CTRL_AUDIO &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AITOGGLE_DONE_AUDIO_MASK); /* get pre_toggle_done
- */
- temp = ANADIG_MISC->VDDSOC2PLL_AI_CTRL_AUDIO;
- temp &= ~ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AIRWB_AUDIO_MASK;
- temp |= (1UL << ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AIRWB_AUDIO_SHIFT) &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AIRWB_AUDIO_MASK;
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_AUDIO = temp;
- temp = ANADIG_MISC->VDDSOC2PLL_AI_CTRL_AUDIO;
- temp &= ~ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AI_ADDR_AUDIO_MASK;
- temp |= ((uint32_t)addr << ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AI_ADDR_AUDIO_SHIFT) &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AI_ADDR_AUDIO_MASK;
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_AUDIO = temp;
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_AUDIO ^=
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AITOGGLE_AUDIO_MASK; /* toggle */
- do
- {
- toggle_done =
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_AUDIO &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_AUDIO_VDDSOC2PLL_AITOGGLE_DONE_AUDIO_MASK; /* wait toggle done
- toggle */
- } while (toggle_done == pre_toggle_done);
- rdata = ANADIG_MISC->VDDSOC2PLL_AI_RDATA_AUDIO; /* read data */
- return rdata;
- }
- break;
- case kAI_Itf_Video:
- if (isWrite)
- {
- pre_toggle_done =
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_VIDEO &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AITOGGLE_DONE_VIDEO_MASK; /* get pre_toggle_done */
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_VIDEO &=
- ~ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AIRWB_VIDEO_MASK;
- temp = ANADIG_MISC->VDDSOC2PLL_AI_CTRL_VIDEO;
- temp &= ~ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AIADDR_VIDEO_MASK;
- temp |= ((uint32_t)addr << ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AIADDR_VIDEO_SHIFT) &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AIADDR_VIDEO_MASK;
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_VIDEO = temp;
- ANADIG_MISC->VDDSOC2PLL_AI_WDATA_VIDEO = wdata; /* write ai data */
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_VIDEO ^=
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AITOGGLE_VIDEO_MASK; /* toggle */
- do
- {
- toggle_done =
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_VIDEO &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AITOGGLE_DONE_VIDEO_MASK; /* wait toggle done
- toggle */
- } while (toggle_done == pre_toggle_done);
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_VIDEO &=
- ~ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AIRWB_VIDEO_MASK;
- }
- else
- {
- pre_toggle_done =
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_VIDEO &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AITOGGLE_DONE_VIDEO_MASK; /* get pre_toggle_done */
- temp = ANADIG_MISC->VDDSOC2PLL_AI_CTRL_VIDEO;
- temp &= ~ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AIRWB_VIDEO_MASK;
- temp |= (1UL << ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AIRWB_VIDEO_SHIFT) &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AIRWB_VIDEO_MASK;
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_VIDEO = temp;
- temp = ANADIG_MISC->VDDSOC2PLL_AI_CTRL_VIDEO;
- temp &= ~ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AIADDR_VIDEO_MASK;
- temp |= ((uint32_t)addr << ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AIADDR_VIDEO_SHIFT) &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AIADDR_VIDEO_MASK;
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_VIDEO = temp;
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_VIDEO ^=
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AITOGGLE_VIDEO_MASK; /* toggle */
- do
- {
- toggle_done =
- ANADIG_MISC->VDDSOC2PLL_AI_CTRL_VIDEO &
- ANADIG_MISC_VDDSOC2PLL_AI_CTRL_VIDEO_VDDSOC2PLL_AITOGGLE_DONE_VIDEO_MASK; /* wait toggle done
- toggle */
- } while (toggle_done == pre_toggle_done);
- rdata = ANADIG_MISC->VDDSOC2PLL_AI_RDATA_VIDEO; /* read data */
- return rdata;
- }
- break;
- case kAI_Itf_400m:
- if (isWrite)
- {
- pre_toggle_done =
- ANADIG_MISC->VDDLPSR_AI400M_CTRL &
- ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AITOGGLE_DONE_400M_MASK; /* get pre_toggle_done */
- ANADIG_MISC->VDDLPSR_AI400M_CTRL &= ~ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AI400M_RWB_MASK;
- temp = ANADIG_MISC->VDDLPSR_AI400M_CTRL;
- temp &= ~ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AI400M_ADDR_MASK;
- temp |= ((uint32_t)addr << ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AI400M_ADDR_SHIFT) &
- ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AI400M_ADDR_MASK;
- ANADIG_MISC->VDDLPSR_AI400M_CTRL = temp;
- ANADIG_MISC->VDDLPSR_AI400M_WDATA = wdata; /* write ai data */
- ANADIG_MISC->VDDLPSR_AI400M_CTRL ^=
- ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AITOGGLE_400M_MASK; /* toggle */
- do
- {
- toggle_done =
- ANADIG_MISC->VDDLPSR_AI400M_CTRL &
- ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AITOGGLE_DONE_400M_MASK; /* wait toggle done toggle */
- } while (toggle_done == pre_toggle_done);
- }
- else
- {
- pre_toggle_done =
- ANADIG_MISC->VDDLPSR_AI400M_CTRL &
- ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AITOGGLE_DONE_400M_MASK; /* get pre_toggle_done */
- temp = ANADIG_MISC->VDDLPSR_AI400M_CTRL;
- temp &= ~ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AI400M_RWB_MASK;
- temp |= (1UL << ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AI400M_RWB_SHIFT) &
- ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AI400M_RWB_MASK;
- ANADIG_MISC->VDDLPSR_AI400M_CTRL = temp;
- temp = ANADIG_MISC->VDDLPSR_AI400M_CTRL;
- temp &= ~ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AI400M_ADDR_MASK;
- temp |= ((uint32_t)addr << ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AI400M_ADDR_SHIFT) &
- ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AI400M_ADDR_MASK;
- ANADIG_MISC->VDDLPSR_AI400M_CTRL = temp;
- ANADIG_MISC->VDDLPSR_AI400M_CTRL ^=
- ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AITOGGLE_400M_MASK; /* toggle */
- do
- {
- toggle_done =
- ANADIG_MISC->VDDLPSR_AI400M_CTRL &
- ANADIG_MISC_VDDLPSR_AI400M_CTRL_VDDLPSR_AITOGGLE_DONE_400M_MASK; /* wait toggle done toggle */
- } while (toggle_done == pre_toggle_done);
- rdata = ANADIG_MISC->VDDLPSR_AI400M_RDATA; /* read data */
- return rdata;
- }
- break;
- case kAI_Itf_Temp:
- if (isWrite)
- {
- ANADIG_MISC->VDDLPSR_AI_CTRL &= ~ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AIRWB_MASK;
- temp = ANADIG_MISC->VDDLPSR_AI_CTRL;
- temp &= ~ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AI_ADDR_MASK;
- temp |= ((uint32_t)addr << ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AI_ADDR_SHIFT) &
- ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AI_ADDR_MASK;
- ANADIG_MISC->VDDLPSR_AI_CTRL = temp;
- ANADIG_MISC->VDDLPSR_AI_WDATA = wdata; /* write ai data */
- ANADIG_TEMPSENSOR->TEMPSENSOR ^= ANADIG_TEMPSENSOR_TEMPSENSOR_TEMPSNS_AI_TOGGLE_MASK; /* toggle */
- }
- else
- {
- temp = ANADIG_MISC->VDDLPSR_AI_CTRL;
- temp &= ~ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AIRWB_MASK;
- temp |= (1UL << ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AIRWB_SHIFT) &
- ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AIRWB_MASK;
- ANADIG_MISC->VDDLPSR_AI_CTRL = temp;
- temp = ANADIG_MISC->VDDLPSR_AI_CTRL;
- temp &= ~ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AI_ADDR_MASK;
- temp |= ((uint32_t)addr << ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AI_ADDR_SHIFT) &
- ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AI_ADDR_MASK;
- ANADIG_MISC->VDDLPSR_AI_CTRL = temp;
- ANADIG_TEMPSENSOR->TEMPSENSOR ^= ANADIG_TEMPSENSOR_TEMPSENSOR_TEMPSNS_AI_TOGGLE_MASK; /* toggle */
- rdata = ANADIG_MISC->VDDLPSR_AI_RDATA_TMPSNS; /* read data */
- return rdata;
- }
- break;
- case kAI_Itf_Bandgap:
- if (isWrite)
- {
- ANADIG_MISC->VDDLPSR_AI_CTRL &= ~ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AIRWB_MASK;
- temp = ANADIG_MISC->VDDLPSR_AI_CTRL;
- temp &= ~ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AI_ADDR_MASK;
- temp |= ((uint32_t)addr << ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AI_ADDR_SHIFT) &
- ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AI_ADDR_MASK;
- ANADIG_MISC->VDDLPSR_AI_CTRL = temp;
- ANADIG_MISC->VDDLPSR_AI_WDATA = wdata; /* write ai data */
- ANADIG_PMU->PMU_REF_CTRL ^= ANADIG_PMU_PMU_REF_CTRL_REF_AI_TOGGLE_MASK; /* toggle */
- }
- else
- {
- temp = ANADIG_MISC->VDDLPSR_AI_CTRL;
- temp &= ~ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AIRWB_MASK;
- temp |= (1UL << ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AIRWB_SHIFT) &
- ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AIRWB_MASK;
- ANADIG_MISC->VDDLPSR_AI_CTRL = temp;
- temp = ANADIG_MISC->VDDLPSR_AI_CTRL;
- temp &= ~ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AI_ADDR_MASK;
- temp |= ((uint32_t)addr << ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AI_ADDR_SHIFT) &
- ANADIG_MISC_VDDLPSR_AI_CTRL_VDDLPSR_AI_ADDR_MASK;
- ANADIG_MISC->VDDLPSR_AI_CTRL = temp;
- ANADIG_PMU->PMU_REF_CTRL ^= ANADIG_PMU_PMU_REF_CTRL_REF_AI_TOGGLE_MASK; /* toggle */
- rdata = ANADIG_MISC->VDDLPSR_AI_RDATA_REFTOP; /* read data */
- return rdata;
- }
- break;
- default:
- /* This branch should never be hit. */
- break;
- }
- return 0;
- }
- void ANATOP_AI_Write(anatop_ai_itf_t itf, anatop_ai_reg_t addr, uint32_t wdata)
- {
- (void)ANATOP_AI_Access(itf, true, addr, wdata);
- }
- uint32_t ANATOP_AI_Read(anatop_ai_itf_t itf, anatop_ai_reg_t addr)
- {
- uint32_t rdata;
- rdata = ANATOP_AI_Access(itf, false, addr, 0);
- return rdata;
- }
- void ANATOP_AI_WriteWithMaskShift(
- anatop_ai_itf_t itf, anatop_ai_reg_t addr, uint32_t wdata, uint32_t mask, uint32_t shift)
- {
- uint32_t rdata;
- rdata = ANATOP_AI_Read(itf, addr);
- rdata = (rdata & (~mask)) | ((wdata << shift) & mask);
- ANATOP_AI_Write(itf, addr, rdata);
- }
|