I'm trying to write a quick driver for the AD7794 on nrf51822. This works on a special SPI: the MISO line is alse the "data ready" line.So when I want to read a value, I need first to ask to read the right channel, then to wait for a value, and at last to read value itself. This is not so easy with the spi_master library, but I dealed with it... out of the softdevice section.this it my function:
int read_data(int address)
//configure the reading
//use manual slave select, and set it low
//configure the channel, and ast for single read
//set the MOSI line up
//set the MISO line as input
nrf_gpio_cfg_input(BSP_SPI_SD0, NRF_GPIO_PIN_NOPULL );
//wait fot the line to be down (! ! ! )
//MISO and MOSI back to norma
//read the value
//set the CS back to high
this is what it looks like:
The problem is when I'm using the softdevice, I'm locked into the "while GPIO not 0" loop. The MISO line still works fine and go down (but so not read correctly by the app). Afer few mode ms, the MISO line get crazy, and afer a long while (1 or 2 sec), the chip reboot.I tried many things such as add delay in the loop, add app_sched_execute() in it as I thought it might get bored waiting(stupid, I know), etc... but I don't find a solution, even a bad one.
Does someone has any idea? thanks a lot !
Hi, sorry for the late response. Vacation time.. What if you do it like this:
Then in the GPIOTE event handler:
This will also be a more power efficient solution as the CPU is running in a while loop, and is not blocking other things from running.
thanks for your answer.I can do this but I must split my function at least into 2 parts. I don't like it.look this is want to be able to do: