there is one thing that bothers me, the whole API depends on:
#define BMA2x2_BUS_READ_FUNC(dev_addr, reg_addr, reg_data, r_len) bus_read(dev_addr, reg_addr, reg_data, r_len)
and it's the function which must be implemented by the user as it's specific for every MCU.
I use I2C to read every byte in ISR and store it one at a time in a buffer. Reading data in that way does not allow me to use the BMA2x2 driver as is.
My questions are:
Does the BMA2x2_BUS_READ_FUNC function is meant to be synchronous(it looks so)?
Does it have to block the whole program and wait for every byte from a bus (I2C/SPI) with busy waiting and is the whole API designed this way?
Is there a way to use this API easily with interrupts?
Solved! Go to Solution.
I was asking about an example of using a BMA2x2 driver in an intrrupt mode. Because current usage of BMA2x2_RD_FUNC_PTR assumes synchronous (busy wait) way of reading.
Methods HAL_I2C_Master_Transmit and HAL_I2C_Master_Receive can be used with the BMA2x2 driver but the MCU will be pooling I2C registers and wait for whole data to be transmited (it will be blocked and during this time it won't be able to do anything else and I want to avoid that). I'm not asking about reading data from I2C in the interrupt mode. I ask about example of using BMA2x2 driver when I read data from I2C in a non blocking way (i.e. using HAL_I2C_Master_Transmit_IT and HAL_I2C_Master_Receive_IT).