最近一段时间在做I设计到2C以及单总线的协义的一个项目,所用的芯片是F28027。由于内部的I2C的例程都是利用中断的形式来做的,感觉不符合自己的要求,从而就想利用IO来模拟I2C总线的形式来做。做了有很长时间也没有仿真出来,很是头疼。
先撇开I2C总线不谈,在读取AM2301的单总线的数据时,依旧检测不到相应的信号。
在官方的datasheet中谈到28X系列的芯片的GpioDataRegs.GPADAT是可读可写的(即便是设置为输出状态也可以检测到Io口的电平状态),我也写了一个程序用来测验,可以识别。但是不能识别出我模块产生的响应信号,同样的我也尝试着去改变GPIO的GPIODIR的寄存器来做,依旧是解决不了问题。
然而我就在想在进行模拟通信时初始化设置GPIO口的模式时有什么特殊的要求吗??以及在通信过程中临时改变GPIO的方向设置会产生什么样的影响呢?会不会产生电平上的变化,或者说是GPIO的方向设置无法改变??
void AMS2301Io_init()
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO5 =0;
GpioCtrlRegs.GPADIR.bit.GPIO5=1;
GpioCtrlRegs.GPAPUD.bit.GPIO5 =0; //初始化上拉电阻
GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 2;
GpioDataRegs.GPADAT.bit.GPIO5=1; //将电平拉高
EDIS;
}
void DSIN(void) //设置为输入状态
{
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO5 =0;
EDIS;
}
void DSOUT(void) //设置为输出状态
{
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO5 =1;
EDIS;
}
void DS_0() //将端口的电平置0
{
GpioDataRegs.GPACLEAR.bit.GPIO5=1; //将电平拉低
}
void DS_1() //将电平的数据置1
{
GpioDataRegs.GPASET.bit.GPIO5=1; //将电平拉高
}
这是我写的一些初步的程序,求指教?对这些设置实在是不懂。
10#:
并没有什么特别的要求,可以改变方向,但要保证在这个过程中本身电平是稳定的。
最近一段时间在做I设计到2C以及单总线的协义的一个项目,所用的芯片是F28027。由于内部的I2C的例程都是利用中断的形式来做的,感觉不符合自己的要求,从而就想利用IO来模拟I2C总线的形式来做。做了有很长时间也没有仿真出来,很是头疼。
先撇开I2C总线不谈,在读取AM2301的单总线的数据时,依旧检测不到相应的信号。
在官方的datasheet中谈到28X系列的芯片的GpioDataRegs.GPADAT是可读可写的(即便是设置为输出状态也可以检测到Io口的电平状态),我也写了一个程序用来测验,可以识别。但是不能识别出我模块产生的响应信号,同样的我也尝试着去改变GPIO的GPIODIR的寄存器来做,依旧是解决不了问题。
然而我就在想在进行模拟通信时初始化设置GPIO口的模式时有什么特殊的要求吗??以及在通信过程中临时改变GPIO的方向设置会产生什么样的影响呢?会不会产生电平上的变化,或者说是GPIO的方向设置无法改变??
void AMS2301Io_init()
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO5 =0;
GpioCtrlRegs.GPADIR.bit.GPIO5=1;
GpioCtrlRegs.GPAPUD.bit.GPIO5 =0; //初始化上拉电阻
GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 2;
GpioDataRegs.GPADAT.bit.GPIO5=1; //将电平拉高
EDIS;
}
void DSIN(void) //设置为输入状态
{
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO5 =0;
EDIS;
}
void DSOUT(void) //设置为输出状态
{
EALLOW;
GpioCtrlRegs.GPADIR.bit.GPIO5 =1;
EDIS;
}
void DS_0() //将端口的电平置0
{
GpioDataRegs.GPACLEAR.bit.GPIO5=1; //将电平拉低
}
void DS_1() //将电平的数据置1
{
GpioDataRegs.GPASET.bit.GPIO5=1; //将电平拉高
}
这是我写的一些初步的程序,求指教?对这些设置实在是不懂。
ming liu6:
回复 10#:
您好!非常感谢您的解答,你能说的再详细一点吗?不是很了解,谢谢。