68 lines
1.4 KiB
C
68 lines
1.4 KiB
C
/*
|
|
* AD5940 library ↔ ESP32-S3 bridge.
|
|
* Implements the platform functions the ad5940 library expects to find at link time.
|
|
*/
|
|
#include "ad5940.h"
|
|
#include "ad5941_port.h"
|
|
#include "esp_rom_sys.h"
|
|
|
|
static volatile uint8_t int_flag;
|
|
|
|
static void IRAM_ATTR gp0_isr(void *arg)
|
|
{
|
|
int_flag = 1;
|
|
}
|
|
|
|
/* ---- SPI ---- */
|
|
|
|
void AD5940_ReadWriteNBytes(unsigned char *pSendBuffer, unsigned char *pRecvBuff, unsigned long length)
|
|
{
|
|
ad5941_port_spi_rw(pSendBuffer, pRecvBuff, length);
|
|
}
|
|
|
|
/* ---- CS ---- */
|
|
|
|
void AD5940_CsClr(void) { gpio_set_level(AD5940_CS_PIN, 0); }
|
|
void AD5940_CsSet(void) { gpio_set_level(AD5940_CS_PIN, 1); }
|
|
|
|
/* ---- Reset ---- */
|
|
|
|
void AD5940_RstSet(void) { gpio_set_level(AD5940_RST_PIN, 1); }
|
|
void AD5940_RstClr(void) { gpio_set_level(AD5940_RST_PIN, 0); }
|
|
|
|
/* ---- Timing ---- */
|
|
|
|
void AD5940_Delay10us(uint32_t time)
|
|
{
|
|
if (time < 100)
|
|
esp_rom_delay_us(time * 10);
|
|
else
|
|
vTaskDelay(pdMS_TO_TICKS(time / 100));
|
|
}
|
|
|
|
/* ---- Interrupt ---- */
|
|
|
|
uint32_t AD5940_GetMCUIntFlag(void) { return int_flag; }
|
|
|
|
uint32_t AD5940_ClrMCUIntFlag(void)
|
|
{
|
|
int_flag = 0;
|
|
return 1;
|
|
}
|
|
|
|
/* ---- Resource init (called by AD5940_MCUResourceInit) ---- */
|
|
|
|
uint32_t AD5940_MCUResourceInit(void *pCfg)
|
|
{
|
|
ad5941_port_init_spi();
|
|
ad5941_port_init_gpio();
|
|
|
|
AD5940_CsSet();
|
|
AD5940_RstSet();
|
|
|
|
gpio_install_isr_service(0);
|
|
gpio_isr_handler_add(AD5940_GP0INT_PIN, gp0_isr, NULL);
|
|
|
|
return 0;
|
|
}
|