• yn386's avatar
    stm32/pyb_i2c: Fix pyb.I2C to work with dma=True on F4 MCUs. · da508276
    yn386 authored
    Prior to this commit, excuting this code:
    
        i2c = I2C(1, I2C.CONTROLLER, dma=True)
        i2c.send(data, addr=i2c_addr)
    
    the call to i2c.send() does not return and the board needs a reset.  This
    code works when dma=False.
    
    According to the specification, I2Cx_EV_IRQHandler should:
    - Write DR to address when Start condition generated.
    - Clear ADDR by reading SR2 after reading SR2 when address sent.
    
    These processes are included in HAL_I2C_EV_IRQHandler(), however the
    firmware size increses about 2KB if HAL_I2C_EV_IRQHandler is called.  This
    commit adds above processes to i2c_ev_irq_handler, and increases firmware
    by less than 100 bytes.
    
    Fixes issue #2643.
    da508276
pyb_i2c.c 38.2 KB