X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fstm%2Fao_i2c_stm.c;h=e634377cc996545a3118375f3705a81b40eb1abd;hb=b140da92536d7c48ba37868f1c2afce7bb86dfdb;hp=23805aa8929a1bbc957ba3c20dadff8643ad3ee0;hpb=0686a7b8aec524d81bda4c572549a3a068ce0eed;p=fw%2Faltos diff --git a/src/stm/ao_i2c_stm.c b/src/stm/ao_i2c_stm.c index 23805aa8..e634377c 100644 --- a/src/stm/ao_i2c_stm.c +++ b/src/stm/ao_i2c_stm.c @@ -132,17 +132,17 @@ ao_i2c_ev_isr(uint8_t index) if (sr1 & (1 << STM_I2C_SR1_SB)) stm_i2c->dr = ao_i2c_addr[index]; if (sr1 & (1 << STM_I2C_SR1_ADDR)) { - stm_i2c->cr2 &= ~(1 << STM_I2C_CR2_ITEVTEN); + stm_i2c->cr2 &= ~(1UL << STM_I2C_CR2_ITEVTEN); ao_i2c_state[index] = I2C_RUNNING; ao_wakeup(&ao_i2c_state[index]); } if (sr1 & (1 << STM_I2C_SR1_BTF)) { - stm_i2c->cr2 &= ~(1 << STM_I2C_CR2_ITEVTEN); + stm_i2c->cr2 &= ~(1UL << STM_I2C_CR2_ITEVTEN); ao_wakeup(&ao_i2c_state[index]); } if (sr1 & (1 << STM_I2C_SR1_RXNE)) { if (ao_i2c_recv_len[index]) { - *(ao_i2c_recv_data[index]++) = stm_i2c->dr; + *(ao_i2c_recv_data[index]++) = (uint8_t) stm_i2c->dr; if (!--ao_i2c_recv_len[index]) ao_wakeup(&ao_i2c_recv_len[index]); } @@ -161,7 +161,7 @@ ao_i2c_er_isr(uint8_t index) sr1 = stm_i2c->sr1; if (sr1 & (1 << STM_I2C_SR1_AF)) { ao_i2c_state[index] = I2C_ERROR; - stm_i2c->sr1 = sr1 & ~(1 << STM_I2C_SR1_AF); + stm_i2c->sr1 = sr1 & ~(1UL << STM_I2C_SR1_AF); ao_wakeup(&ao_i2c_state[index]); } } @@ -278,7 +278,7 @@ ao_i2c_send(void *block, uint16_t len, uint8_t index, uint8_t stop) return true; } -void +static void ao_i2c_recv_dma_isr(int index) { int i; @@ -341,6 +341,17 @@ ao_i2c_recv(void *block, uint16_t len, uint8_t index, uint8_t stop) (0 << STM_DMA_CCR_PINC) | (0 << STM_DMA_CCR_CIRC) | (STM_DMA_CCR_DIR_PER_TO_MEM << STM_DMA_CCR_DIR)); + + /* XXX ao_i2c_recv_dma_isr hasn't ever been used, so it + * doesn't appear to be necessary. Testing with a device + * that uses i2c would really be useful here to discover + * whether this function is necessary or not. + */ +#if 0 + ao_dma_set_isr(rx_dma_index, ao_i2c_recv_dma_isr); +#else + (void) ao_i2c_recv_dma_isr; +#endif stm_i2c->cr1 = AO_STM_I2C_CR1 | (1 << STM_I2C_CR1_ACK); stm_i2c->cr2 = AO_STM_I2C_CR2 | (1 << STM_I2C_CR2_DMAEN) | (1 << STM_I2C_CR2_LAST); @@ -363,7 +374,7 @@ ao_i2c_recv(void *block, uint16_t len, uint8_t index, uint8_t stop) return ret; } -void +static void ao_i2c_channel_init(uint8_t index) { struct stm_i2c *stm_i2c = ao_i2c_stm_info[index].stm_i2c;