- void I2C_config(void)
- {
- rcu_periph_clock_enable(RCU_GPIOB);
- rcu_periph_clock_enable(RCU_I2C0);
- rcu_periph_clock_enable(RCU_DMA0);
-
- gpio_init(GPIOB, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, GPIO_PIN_6 | GPIO_PIN_7);
-
- i2c_deinit(I2C0);
-
- i2c_clock_config(I2C0, 1000000, I2C_DTCY_16_9);
- i2c_mode_addr_config(I2C0, I2C_I2CMODE_ENABLE, I2C_ADDFORMAT_7BITS, 0x11);
- i2c_enable(I2C0);
- i2c_ack_config(I2C0, I2C_ACK_ENABLE);
- }
-
- uint8_t I2C(uint8_t Addr, uint8_t *TRxData,uint16_t Size)
- {
- if(Addr == SLAVE1ADDR_W)
- {
- dma_deinit(DMA0, DMA_CH5);//复位外设DMAx的通道y的所有寄存器
- dma_struct_para_init(&dma_init_struct);//将DMA结构体中所有参数初始化为默认值
-
- dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL;//读取存储器中数据,写入外设(写入)
- dma_init_struct.memory_addr = (uint32_t)TRxData;
- dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
- dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;
- dma_init_struct.number = Size;//数据传输数量
- dma_init_struct.periph_addr = (uint32_t)&I2C_DATA(I2C0);//**
- dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
- dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;
- dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
- dma_init(DMA0, DMA_CH5, &dma_init_struct);
-
- while(i2c_flag_get(I2C0, I2C_FLAG_I2CBSY));
- i2c_start_on_bus(I2C0);
- while(!i2c_flag_get(I2C0, I2C_FLAG_SBSEND));
- i2c_master_addressing(I2C0, Addr, I2C_TRANSMITTER);
- while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND));
- i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
-
- i2c_dma_config(I2C0, I2C_DMA_ON);
- dma_channel_enable(DMA0, DMA_CH5);
- while(!dma_flag_get(DMA0, DMA_CH5, DMA_FLAG_FTF));
- dma_flag_clear(DMA0, DMA_CH5, DMA_FLAG_FTF);
-
- i2c_stop_on_bus(I2C0);
- while(I2C_CTL0(I2C0)<span style="color: rgb(77, 77, 77); font-family: -apple-system, "SF UI Text", Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif, SimHei, SimSun; font-variant-ligatures: common-ligatures; background-color: rgb(255, 255, 255);"> & </span>0x0200);
- i2c_dma_config(I2C0, I2C_DMA_OFF);
- dma_channel_disable(DMA0, DMA_CH5);
- }
- else if(Addr == SLAVE1ADDR_R)
- {
- dma_deinit(DMA0, DMA_CH6);//复位外设DMAx的通道y的所有寄存器
- dma_struct_para_init(&dma_init_struct);//将DMA结构体中所有参数初始化为默认值
-
- dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;//读取外设中数据,写入存储器(读取)
- dma_init_struct.memory_addr = (uint32_t)TRxData;
- dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
- dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;
- dma_init_struct.number = Size;//数据传输数量
- dma_init_struct.periph_addr = (uint32_t)&I2C_DATA(I2C0);//**
- dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
- dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;
- dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
- dma_init(DMA0, DMA_CH6, &dma_init_struct);
-
- while(i2c_flag_get(I2C0, I2C_FLAG_I2CBSY));
- i2c_start_on_bus(I2C0);
- while(!i2c_flag_get(I2C0, I2C_FLAG_SBSEND));
- i2c_master_addressing(I2C0, Addr, I2C_RECEIVER);
- while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND));
- i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
-
- i2c_dma_config(I2C0, I2C_DMA_ON);
- dma_channel_enable(DMA0, DMA_CH6);
- while(!dma_flag_get(DMA0, DMA_CH6, DMA_FLAG_FTF));
- dma_flag_clear(DMA0, DMA_CH6, DMA_FLAG_FTF);
-
- i2c_stop_on_bus(I2C0);
- while(I2C_CTL0(I2C0)<span style="color: rgb(77, 77, 77); font-family: -apple-system, "SF UI Text", Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", sans-serif, SimHei, SimSun; font-variant-ligatures: common-ligatures; background-color: rgb(255, 255, 255);"> & </span>0x0200);
- i2c_dma_config(I2C0, I2C_DMA_OFF);
- dma_channel_disable(DMA0, DMA_CH6);
- }
- return 1;
- }
-
- int main(void)
- {
- I2C_config();
-
- uint8_t IICTXData[3] = {0,0,100};
- uint8_t IICRXData[3] = {0,0,0};
-
- I2C(SLAVE1ADDR_W,IICTXData,3);
-
- I2C(SLAVE1ADDR_R,IICTXData,3);
-
- if(IICRXData[0] == 100)
- {
- gpio_bit_reset(GPIOG, GPIO_PIN_15);//亮灯
- }
-
- delay_1ms(10);
-
- IICTXData[2] = 99;
-
- I2C(SLAVE1ADDR_W,IICTXData,3);
- I2C(SLAVE1ADDR_R,IICTXData,3);
-
- if(IICRXData[0] == 99)
- {
- gpio_bit_set(GPIOG, GPIO_PIN_15);//灭灯
- }
- }
-