// File: AD5940_Platform.c #include "App_Common.h" #include "hardware/spi.h" #include "hardware/gpio.h" // --- Platform Interface Implementation --- void AD5940_CsClr(void) { gpio_put(PIN_CS, 0); } void AD5940_CsSet(void) { gpio_put(PIN_CS, 1); } void AD5940_RstClr(void) { gpio_put(PIN_RST, 0); } void AD5940_RstSet(void) { gpio_put(PIN_RST, 1); } void AD5940_Delay10us(uint32_t time) { sleep_us(time * 10); } void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer, unsigned char *pRecvBuff, unsigned long length) { spi_write_read_blocking(spi0, pSendBuffer, pRecvBuff, length); } uint32_t AD5940_GetMCUIntFlag(void) { return (gpio_get(PIN_INT) == 0); } uint32_t AD5940_ClrMCUIntFlag(void) { return 1; } uint32_t AD5940_MCUResourceInit(void *pCfg) { return 0; } void AD5940_MCUGpioWrite(uint32_t data) { (void)data; } uint32_t AD5940_MCUGpioRead(uint32_t pin) { (void)pin; return 0; } void AD5940_MCUGpioCtrl(uint32_t pin, BoolFlag enable) { (void)pin; (void)enable; } // --- Hardware Setup --- void setup_pins(void) { spi_init(spi0, 16000000); gpio_set_function(PIN_MISO, GPIO_FUNC_SPI); gpio_set_function(PIN_SCK, GPIO_FUNC_SPI); gpio_set_function(PIN_MOSI, GPIO_FUNC_SPI); gpio_init(PIN_CS); gpio_set_dir(PIN_CS, GPIO_OUT); gpio_put(PIN_CS, 1); gpio_init(PIN_RST); gpio_set_dir(PIN_RST, GPIO_OUT); gpio_put(PIN_RST, 1); gpio_init(PIN_INT); gpio_set_dir(PIN_INT, GPIO_IN); gpio_pull_up(PIN_INT); } int32_t AD5940PlatformCfg(void) { CLKCfg_Type clk_cfg; FIFOCfg_Type fifo_cfg; AGPIOCfg_Type gpio_cfg; clk_cfg.ADCClkDiv = ADCCLKDIV_1; clk_cfg.ADCCLkSrc = ADCCLKSRC_HFOSC; clk_cfg.SysClkDiv = SYSCLKDIV_1; clk_cfg.SysClkSrc = SYSCLKSRC_HFOSC; clk_cfg.HfOSC32MHzMode = bFALSE; clk_cfg.HFOSCEn = bTRUE; clk_cfg.HFXTALEn = bFALSE; clk_cfg.LFOSCEn = bTRUE; AD5940_CLKCfg(&clk_cfg); fifo_cfg.FIFOEn = bFALSE; fifo_cfg.FIFOMode = FIFOMODE_FIFO; fifo_cfg.FIFOSize = FIFOSIZE_4KB; fifo_cfg.FIFOSrc = FIFOSRC_DFT; fifo_cfg.FIFOThresh = 6; AD5940_FIFOCfg(&fifo_cfg); fifo_cfg.FIFOEn = bTRUE; AD5940_FIFOCfg(&fifo_cfg); AD5940_INTCCfg(AFEINTC_1, AFEINTSRC_ALLINT, bTRUE); AD5940_INTCClrFlag(AFEINTSRC_ALLINT); AD5940_INTCCfg(AFEINTC_0, AFEINTSRC_DATAFIFOTHRESH|AFEINTSRC_CUSTOMINT0, bTRUE); AD5940_INTCClrFlag(AFEINTSRC_ALLINT); gpio_cfg.FuncSet = GP0_INT; gpio_cfg.InputEnSet = 0; gpio_cfg.OutputEnSet = AGPIO_Pin0; gpio_cfg.OutVal = 0; gpio_cfg.PullEnSet = 0; AD5940_AGPIOCfg(&gpio_cfg); AD5940_SleepKeyCtrlS(SLPKEY_UNLOCK); return 0; } void SystemReset(void) { sleep_ms(100); AD5940_SoftRst(); sleep_ms(1); AD5940_Initialize(); AD5940PlatformCfg(); } // --- Helpers --- uint32_t GetHSTIARtia(uint32_t val) { switch(val) { case 200: return HSTIARTIA_200; case 1000: return HSTIARTIA_1K; case 5000: return HSTIARTIA_5K; case 10000: return HSTIARTIA_10K; case 20000: return HSTIARTIA_20K; case 40000: return HSTIARTIA_40K; case 80000: return HSTIARTIA_80K; case 160000: return HSTIARTIA_160K; default: return HSTIARTIA_1K; } } uint32_t GetLPTIARtia(uint32_t val) { switch(val) { case 200: return LPTIARTIA_200R; case 1000: return LPTIARTIA_1K; case 2000: return LPTIARTIA_2K; case 3000: return LPTIARTIA_3K; case 4000: return LPTIARTIA_4K; case 6000: return LPTIARTIA_6K; case 8000: return LPTIARTIA_8K; case 10000: return LPTIARTIA_10K; case 12000: return LPTIARTIA_12K; case 16000: return LPTIARTIA_16K; case 20000: return LPTIARTIA_20K; case 24000: return LPTIARTIA_24K; case 30000: return LPTIARTIA_30K; case 32000: return LPTIARTIA_32K; case 40000: return LPTIARTIA_40K; case 48000: return LPTIARTIA_48K; case 64000: return LPTIARTIA_64K; case 85000: return LPTIARTIA_85K; case 96000: return LPTIARTIA_96K; case 100000: return LPTIARTIA_100K; case 120000: return LPTIARTIA_120K; case 128000: return LPTIARTIA_128K; case 160000: return LPTIARTIA_160K; case 196000: return LPTIARTIA_196K; case 256000: return LPTIARTIA_256K; case 512000: return LPTIARTIA_512K; default: return LPTIARTIA_1K; } } uint32_t GetLPTIARload(uint32_t val) { if (val <= 200) return LPTIARLOAD_10R; return LPTIARLOAD_100R; } void ImpedanceShowResult(uint32_t *pData, uint32_t DataCount) { float freq; fImpPol_Type *pImp = (fImpPol_Type*)pData; AppIMPCtrl(IMPCTRL_GETFREQ, &freq); for(int i=0;i