03-22-2021 01:55 AM
Hello,
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.
05-14-2021 11:34 AM
Hello KamWo,
API is a general and portable interface. The lower hardware driver performs data reading and writing in polling or interrupt mode.
05-14-2021 02:20 PM
Hello BSTRobin,
could you give some example with interrupt mode?
05-18-2021 10:28 AM
Hello KamWo,
MCU hardware read-write implementation, need to refer to MCU manufacturers routine.
HAL_I2C_Master_Transmit_IT()
HAL_I2C_Master_Receive_IT()
05-18-2021 08:14 PM
Hello BSTRobin,
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).
06-09-2021 04:56 AM
Hello KamWo,
Got your point. Sensor API is a reference code that contains the process of accessing the sensor and is easy to use.
If you want to implement other access methods, you can modify it based on the current code.