cdce913是一款可调频率输出器件,它的功能实现需要写寄存器,你要设计输出多少频率,就根据它的资料改变相应寄存器。这里只讲怎么I2C控制。
由于工作需要,需要分频使用时钟,所以写了I2C的控制程序,程序可以读写寄存器,可以写EEPROM,但是块读和块写没能实现,只能一个一个的修改寄存器值。块读和块写也是按照资料写的,但是调试就是不成功,不知道问题出在哪里。下面讲如何写的。
首先,定义I2C管脚,我使用的是51单片机模拟的。
//SCL
#define I2C_PORT_SCL_SET_0 P2OUT &= ~BIT1 // set SCL to 0
#define I2C_PORT_SCL_SET_1 P2OUT |= BIT1 // set SCL to 1
//SDA
#define I2C_PORT_SDA_SET_0 P1OUT &= ~BIT7 // set SDA to 0
#define I2C_PORT_SDA_SET_1 P1OUT |= BIT7 // set SDA to 1
然后初始化,根据资料写start、stop、send byte、ack、read_byte这些基础程序,分别如下:
void gpio_init(void)
{
P2SEL &= ~BIT1;
P2SEL2 &= ~BIT1;
P2DIR |= BIT1;
P1SEL &= ~BIT7;
P1SEL2 &= ~BIT7;
P1DIR |= BIT7;
}
void i2c_init(void)
{
I2C_PORT_SCL_SET_0;
I2C_PORT_SDA_SET_1;
}
void i2c_start(void)
{
I2C_PORT_SDA_SET_1;//SDA开始为高
I2C_PORT_SCL_SET_1;//SCL为高
delay_1(12);//>=600ns 快速模式600ns 标准4.7us
I2C_PORT_SDA_SET_0;//SDA为低SPI_PORT_MISO_SET_0