This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ADC frozen, ADC_STAT.FSM_BUSY set

Hi,


We have a LINUX application that uses TSC ADC in continuous mode. It works

correctly but freezes after a few minutes / hours. We do not have any explanation

yet, but it is reproduced if we force the ADC pin down to the ground.

When we kill and restart the application that reinitializes the ADC, we see that the

ADC FSM_BUSY is equal to 1. No acquisition is done, and the fifo count is 0.

We have to reboot the system for the ADC to work again.

The frequency divider register is set to 0 (divider = 1).

Do you have any explanation or workaround ?

Thanks for your support,

Fabien Le Mentec.

  • Just to complement the above post, here is the code used to setup
    the ADC:

    static int adc_open(mio_handle_t* mio) { /* enable adc_tsc clocking */ if (cm_wkup_enable_adc_tsc()) return -1; if (mio_open(mio, ADC_MIO_ADDR, ADC_MIO_SIZE)) return -1; /* disable the module, enable step registers writing */ mio_write_uint32(mio, ADC_REG_CTRL, 1 << 2); /* setup adc */ mio_write_uint32(mio, ADC_REG_SYSCONFIG, 1 << 2); mio_write_uint32(mio, ADC_REG_IRQENABLE_SET, 0); mio_write_uint32(mio, ADC_REG_IRQWAKEUP, 0); mio_write_uint32(mio, ADC_REG_DMAENABLE_SET, 0); mio_write_uint32(mio, ADC_REG_ADC_CLKDIV, 0); mio_write_uint32(mio, ADC_REG_TS_CHARGE_DELAY, 1); /* enable channel 1 */ mio_write_uint32(mio, ADC_REG_STEPENABLE, (1 << 1) | (1 << 0)); /* channel 1, continuous mode */ mio_write_uint32(mio, ADC_REG_STEP1CONFIG, 1); /* enable the module */ mio_write_uint32(mio, ADC_REG_CTRL, 1); return 0; }

  • Hello Fabien

    We experience the same problem here. Did you find a solution in the mean time?

    Regards,

    Daniel