sigma_delta.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334
  1. #include "platform.h"
  2. #include "driver/sigma_delta.h"
  3. void sigma_delta_setup( void )
  4. {
  5. GPIO_REG_WRITE(GPIO_SIGMA_DELTA,
  6. GPIO_SIGMA_DELTA_SET(GPIO_SIGMA_DELTA_ENABLE) |
  7. GPIO_SIGMA_DELTA_TARGET_SET(0x00) |
  8. GPIO_SIGMA_DELTA_PRESCALE_SET(0x00));
  9. }
  10. void sigma_delta_stop( void )
  11. {
  12. GPIO_REG_WRITE(GPIO_SIGMA_DELTA,
  13. GPIO_SIGMA_DELTA_SET(GPIO_SIGMA_DELTA_DISABLE) |
  14. GPIO_SIGMA_DELTA_TARGET_SET(0x00) |
  15. GPIO_SIGMA_DELTA_PRESCALE_SET(0x00) );
  16. }
  17. void ICACHE_RAM_ATTR sigma_delta_set_prescale_target( sint16 prescale, sint16 target )
  18. {
  19. uint32_t prescale_mask, target_mask;
  20. prescale_mask = prescale >= 0 ? GPIO_SIGMA_DELTA_PRESCALE_MASK : 0x00;
  21. target_mask = target >= 0 ? GPIO_SIGMA_DELTA_TARGET_MASK : 0x00;
  22. // set prescale and target with one register access to avoid glitches
  23. GPIO_REG_WRITE(GPIO_SIGMA_DELTA,
  24. (GPIO_REG_READ(GPIO_SIGMA_DELTA) & ~(prescale_mask | target_mask)) |
  25. (GPIO_SIGMA_DELTA_PRESCALE_SET(prescale) & prescale_mask) |
  26. (GPIO_SIGMA_DELTA_TARGET_SET(target) & target_mask));
  27. }