diff --git a/cores/esp8266/core_esp8266_sigma_delta.c b/cores/esp8266/core_esp8266_sigma_delta.c new file mode 100644 index 000000000..04230211e --- /dev/null +++ b/cores/esp8266/core_esp8266_sigma_delta.c @@ -0,0 +1,192 @@ +/* +/****************************************************************************** + * MODULEName : set_sigma MODULE + +EACH PIN CAN CONNET TO A SIGMA-DELTA , ALL PINS SHEARS THE SAME SIGMA-DELTA SOURCE. + +THE TARGET DUTY AND FREQUENCY CAN BE MODIFIED VIA THE REG ADDR GPIO_SIGMA_DELTA + +THE TARGET FREQUENCY IS DEFINED AS: + +FREQ = 80,000,000/prescale * target /256 HZ, 0> GPIO_SIGMA_DELTA_LSB) +#define GPIO_SIGMA_DELTA_SET(x) (((x) << GPIO_SIGMA_DELTA_LSB) & GPIO_SIGMA_DELTA_MASK) + + +#define GPIO_SIGMA_DELTA_TARGET_MSB 7 +#define GPIO_SIGMA_DELTA_TARGET_LSB 0 +#define GPIO_SIGMA_DELTA_TARGET_MASK (0x000000FF<> GPIO_SIGMA_DELTA_TARGET_LSB) +#define GPIO_SIGMA_DELTA_TARGET_SET(x) (((x) << GPIO_SIGMA_DELTA_TARGET_LSB) & GPIO_SIGMA_DELTA_TARGET_MASK) + + +#define GPIO_SIGMA_DELTA_PRESCALE_MSB 15 +#define GPIO_SIGMA_DELTA_PRESCALE_LSB 8 +#define GPIO_SIGMA_DELTA_PRESCALE_MASK (0x000000FF<> GPIO_SIGMA_DELTA_PRESCALE_LSB) +#define GPIO_SIGMA_DELTA_PRESCALE_SET(x) (((x) << GPIO_SIGMA_DELTA_PRESCALE_LSB) & GPIO_SIGMA_DELTA_PRESCALE_MASK) + + +/****************************************************************************** + * FunctionName : sigma_delta_setup + * Description : Init Pin Config for Sigma_delta , change pin source to sigma-delta + * Parameters : uint32 GPIO_MUX, GPIO MUX REG ,DEFINED IN EAGLE_SOC.H, e.g.: PERIPHS_IO_MUX_MTCK_U + uint32 GPIO_NUM, GPIO NUM ACCORDING TO THE MUX NUM , e.g.: 13 for MTCK + uint32 GPIO_FUNC, GPIO PIN FUNC , DEFINED IN EAGLE_SOC.H , e.g.: FUNC_GPIO13 + * Returns : none +*******************************************************************************/ +void ICACHE_FLASH_ATTR +sigma_delta_setup(uint32 GPIO_MUX,uint32 GPIO_NUM,uint32 GPIO_FUNC) +{ + //============================================================================ + //STEP 1: SIGMA-DELTA CONFIG;REG SETUP + GPIO_REG_WRITE(GPIO_SIGMA_DELTA, + (GPIO_REG_READ(GPIO_PIN_ADDR(GPIO_ID_PIN(GPIO_SIGMA_DELTA_NUM))) &(~GPIO_SIGMA_DELTA_SETTING_MASK))| + GPIO_SIGMA_DELTA_SET(GPIO_SIGMA_DELTA_ENABLE)| + GPIO_SIGMA_DELTA_TARGET_SET(0x00)| + GPIO_SIGMA_DELTA_PRESCALE_SET(0x00) ); + + //============================================================================ + + //STEP 2: PIN FUNC CONFIG :SET PIN TO GPIO MODE AND ENABLE OUTPUT + PIN_FUNC_SELECT(GPIO_MUX, GPIO_FUNC); + gpio_output_set(0,0,0x1<128)?(256-duty):duty; + prescale = (target==0)?0:(target-1); + + //freq = 80000 (khz) /256 /duty_target * (prescale+1) + set_sigma_target(duty);//SET DUTY TARGET + set_sigma_prescale(prescale);//SET CLK DIV + +} + diff --git a/cores/esp8266/sigma_delta.h b/cores/esp8266/sigma_delta.h new file mode 100644 index 000000000..c377c0368 --- /dev/null +++ b/cores/esp8266/sigma_delta.h @@ -0,0 +1,11 @@ +#ifndef SIGMA_DELTA_H +#define SIGMA_DELTA_H + +#include + +void sigma_delta_close(uint32_t gpio); +void set_sigma_target(uint8_t target); +void set_sigma_prescale(uint8_t prescale); +void set_sigma_duty_312KHz(uint8_t duty); + +#endif//SIGMA_DELTA_H