| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #ifndef _I2C_H_
- #define _I2C_H_
- #include "../User/gd32f10x_it.h"
- #include <stdio.h>
- #define IIC_WP_PORT GPIOB
- #define IIC_WP_PIN GPIO_PIN_5 // 写使能
- #define IIC_SDA_PORT GPIOB
- #define IIC_SDA_PIN GPIO_PIN_7 // 数据线
- #define IIC_SCL_PORT GPIOB
- #define IIC_SCL_PIN GPIO_PIN_6 // 时钟线
- /*
- GPIO_CTL1(GPIOA) &= 0xfffff0ff; //设置RX引脚浮空输入 PA10
- GPIO_CTL1(GPIOA) |= (0x00000004<<(4*2));
- GPIO_CTL1(GPIOA) &= 0xffffff0f; //设置TX引脚复用推完输出 50M PA9
- GPIO_CTL1(GPIOA) |= (0x0000000B<<(4*1));
- GPIO_BOP(GPIOC) = GPIO_PIN_2; // 置高电平
- GPIO_BC(GPIOC) = GPIO_PIN_2; // 置低电平
- */
- #define SDA_IN() {GPIO_CTL0(GPIOB) &= 0x0FFFFFFF;GPIO_CTL0(GPIOB) |= ((uint32_t)8<<(28));} //PB7 输入模式
- #define SDA_OUT() {GPIO_CTL0(GPIOB) &= 0x0FFFFFFF;GPIO_CTL0(GPIOB) |= ((uint32_t)3<<(28));} //PB7 输出模式
- //#define SDA_IN() {GPIO_CTL0(GPIOB)&=~GPIO_MODE_MASK(7);GPIO_CTL0(GPIOB)|=GPIO_MODE_SET(7,0x8);}//PB7 输入
- //#define SDA_OUT() {GPIO_CTL0(GPIOB)&=~GPIO_MODE_MASK(7);GPIO_CTL0(GPIOB)|=GPIO_MODE_SET(7,0x3);}//PB7 输出
- //#define IIC_SCL(n) (n?GPIO_BOP(GPIOB) = GPIO_PIN_10:GPIO_BC(GPIOB) = GPIO_PIN_10) //SCL
- //#define IIC_SDA(n) (n?GPIO_BOP(GPIOB) = GPIO_PIN_11:GPIO_BC(GPIOB) = GPIO_PIN_11) //SDA
- #define IIC_SCL(n) (n?gpio_bit_set(GPIOB, GPIO_PIN_6):gpio_bit_reset(GPIOB, GPIO_PIN_6))
- #define IIC_SDA(n) (n?gpio_bit_set(GPIOB, GPIO_PIN_7):gpio_bit_reset(GPIOB, GPIO_PIN_7))
- #define READ_SDA (gpio_input_bit_get(GPIOB,GPIO_PIN_7)) // 输入SDA
- /* 写保护 低电平允许写入 高电平 禁止写入 */
- #define IIC_WRITE_PROTECT_ON() {GPIO_BOP(IIC_WP_PORT)=IIC_WP_PIN;} //
- #define IIC_WRITE_PROTECT_OFF() {GPIO_BC(IIC_WP_PORT)=IIC_WP_PIN;} //
- extern void delay_us(uint32_t nUs);
- extern void delay_ms(uint16_t nms);
- extern void i2c_init(void);
- extern void i2c_start(void);
- extern void i2c_stop(void);
- extern uint8_t i2c_wait_ack(void);
- extern void i2c_Ack(void);
- extern void i2c_NAck(void);
- extern void i2c_send_byte(uint8_t txd);
- extern uint8_t i2c_read_byte(uint8_t ack);
- #endif
|