34 lines
1.1 KiB
C
34 lines
1.1 KiB
C
|
|
#include "driver/sigma_delta.h"
|
|
|
|
|
|
void sigma_delta_setup( void )
|
|
{
|
|
GPIO_REG_WRITE(GPIO_SIGMA_DELTA,
|
|
GPIO_SIGMA_DELTA_SET(GPIO_SIGMA_DELTA_ENABLE) |
|
|
GPIO_SIGMA_DELTA_TARGET_SET(0x00) |
|
|
GPIO_SIGMA_DELTA_PRESCALE_SET(0x00));
|
|
}
|
|
|
|
void sigma_delta_stop( void )
|
|
{
|
|
GPIO_REG_WRITE(GPIO_SIGMA_DELTA,
|
|
GPIO_SIGMA_DELTA_SET(GPIO_SIGMA_DELTA_DISABLE) |
|
|
GPIO_SIGMA_DELTA_TARGET_SET(0x00) |
|
|
GPIO_SIGMA_DELTA_PRESCALE_SET(0x00) );
|
|
}
|
|
|
|
void sigma_delta_set_prescale_target( sint16 prescale, sint16 target )
|
|
{
|
|
uint32_t prescale_mask, target_mask;
|
|
|
|
prescale_mask = prescale >= 0 ? GPIO_SIGMA_DELTA_PRESCALE_MASK : 0x00;
|
|
target_mask = target >= 0 ? GPIO_SIGMA_DELTA_TARGET_MASK : 0x00;
|
|
|
|
// set prescale and target with one register access to avoid glitches
|
|
GPIO_REG_WRITE(GPIO_SIGMA_DELTA,
|
|
(GPIO_REG_READ(GPIO_SIGMA_DELTA) & ~(prescale_mask | target_mask)) |
|
|
(GPIO_SIGMA_DELTA_PRESCALE_SET(prescale) & prescale_mask) |
|
|
(GPIO_SIGMA_DELTA_TARGET_SET(target) & target_mask));
|
|
}
|