cc2541 I2C SCL/SDA 这2个引脚怎么配置成普通的i/o口使用
cc2541 I2C SCL/SDA 这2个引脚怎么配置成普通的i/o口使用,如果配置成普通的i/o口使用,怎么个用法呢。
配好了会不会像操作P0_1 = 1; 这种操作方式来操作引脚的高低电压呢?
我的本意是想将 cc2541 硬件i2c 换成软件i2c来做,硬件i2c不知道为什么就是不能工作。
论坛有类似问题,解答请看这边:http://www.deyisupport.com/question_answer/wireless_connectivity/f/45/t/23777.aspx
ming,
可以当成普通GPIO用。你去user guide里面搜索一下 20.1.8 章,会告诉你怎么配置寄存器,关闭I2C,然后配置成GPIO。
硬件I2C如何工作,你可以看一下sensorTag的例程。
谢谢 YAN的回复,希望能帮我再看下
void i2c_Init(i2cClock_t clockRate)
{
I2CWC = 0x00;
I2CADDR = 0;
I2CCFG &= ~I2C_CLOCK_MASK;
I2CCFG |= clockRate;
I2CCFG |= (I2C_ENS1);
}
uint8 I2C_write(uint8 mcmd)
{
I2CDATA = (mcmd);
I2CCFG &= ~I2C_SI;
while ((I2CCFG & I2C_SI) == 0);
}
uint8 I2C_Start()
{
I2CCFG &= ~I2C_SI;
I2CCFG |= I2C_STA;
while ((I2CCFG & I2C_SI) == 0);
I2CCFG &= ~I2C_STA;
I2C_write(0x78);
}
void I2C_Stop()
{
I2CCFG |= I2C_STO;
I2CCFG &= ~I2C_SI;
while ((I2CCFG & I2C_STO) != 0);
}
void Write_Command(uint8 Data)
{
I2C_Start();
I2C_write(0x00);
I2C_write(Data);
I2C_Stop();
}
void Write_Data(uint8 Data)
{
I2C_Start();
I2C_write(0x40);
I2C_write(Data);
I2C_Stop();
}
这是我将oled作为slave的 i2c代码,slave地址是0x78,能不能帮我看看是否有问题,这是我参照 sensirTag 的代码,改的。拜托了!