ShuJi187 发表于 2011-9-7 21:49:40

请问LPC2132跑UCOSII能接收多快的脉冲?

我想用LPC2132普通IO模拟一个I2S,请问有可能性吗?

ShuJi187 发表于 2011-9-7 23:10:21

消灭零回复

ShuJi187 发表于 2011-9-8 11:28:10

改成SPI模拟了,看结果怎么样?

xlf159 发表于 2011-9-9 10:43:23

完全可以啊
参考下这个程序:
一段用GPIO模拟IIC的参考程序
/*****************************************************************************
* 函数名       :
* 功能         : 延时等待10 us,循环所需次数跟cpu速度有关
* 输入参数   :
* 输出参数   :
* 返回值说明   :
*****************************************************************************/
static void DelayXus(U32 xus_n)
{
volatile U32 i,j;

i = 110;
j = xus_n;
for(;j>0;j--)
for(;i>0; i--);
}
/*****************************************************************************
* 函数名       :
* 功能         : 通过IO口模拟IIC时钟线
* 输入参数   :
* 输出参数   :
* 返回值说明   :
*****************************************************************************/
static void I2cSetSclk(U8 isHigh)
{
if(isHigh)
{
REG BITSET1 = xxxx; //SCLK set to high
}
else
{
REG BITCLR1 = xxxx; //SCLK set to low   
}
}
/*****************************************************************************
* 函数名       :
* 功能         : 通过IO口模拟IIC数据线
* 输入参数   :
* 输出参数   :
* 返回值说明   :
*************************************************************************/
static void I2cSetSdin(U8 isHigh)
{
if(isHigh)
{
REG BITSET1 = yyyy; //SDATA set to high
}
else
{
REG BITCLR1 = yyyy; //SDATA set to low
}
}
/*****************************************************************************
* 函数名       :I2cCheckAck
* 功能         :IIC的ACK周期
* 输入参数   :
* 输出参数   :
* 返回值说明   :
*****************************************************************************/
static U16 I2cCheckAck(void)
{
U16 retVal_n = 0;

retVal_n = (REG BITSET1)&(yyyy); //需要先改变该gpio 为input 模式
return retVal_n;
}
/*****************************************************************************
* 函数名       :
* 功能         : 启动IIC
* 输入参数   :
* 输出参数   :
* 返回值说明   :
*****************************************************************************/
static void I2cStart(void)
{
I2cSetSclk(1);
I2cSetSdin(1);
DelayXus(1);
I2cSetSdin(0);
DelayXus(1);
I2cSetSclk(0);
DelayXus(1);
}
/*****************************************************************************
* 函数名       :
* 功能         : 停止IIC
* 输入参数   :
* 输出参数   :
* 返回值说明   :
*****************************************************************************/
static void I2cStop(void)
{
I2cSetSclk(0);
I2cSetSdin(0);
DelayXus(1);
I2cSetSclk(1);
DelayXus(1);
I2cSetSdin(1);
DelayXus(1);

}
/*****************************************************************************
* 函数名       :I2cTxByte
* 功能         :通过IIC传送一个字节的数据
* 输入参数   :
* 输出参数   :
* 返回值说明   :
*****************************************************************************/
static U16 I2cTxByte(U8 txData_n)
{
U16 index_n = 0, retVal_n = 0;

I2cSetSclk(0);   //force SCLK to low
for(index_n=0;index_n<8;index_n++)
{
//MSB first
if(txData_n&0x80)
   I2cSetSdin(1);//set SDATA to high
else
    I2cSetSdin(0);//set SDATA to low
   //SDATA left shift
   txData_n <<= 1;
   
   I2cSetSclk(1);   //force SCLK to high
   DelayXus(1);
   I2cSetSclk(0);   //force SCLK to low   
   DelayXus(1);
}
I2cSetSdin(1);   //set SDATA to high
I2cSetSclk(1);   //force SCLK to high
DelayXus(1);
retVal_n = I2cCheckAck();
I2cSetSclk(0);   //force SCLK to low   

return retVal_n;
}

/*****************************************************************************
* 函数名       :I2cWriteReg
* 功能         :通过IIC完成一次对从设备寄存器的写操作
* 输入参数   :
* 输出参数   :
* 返回值说明   :
*****************************************************************************/
static U16 I2cWriteReg(U8 devAddr_n, U8 regAddr_n, U8 txData_n)
{
U16 retVal_n = 1;

wai_sem(RES_I2C_SEMID);
xdisable();
// Send start command
I2cStart();
DelayXus(10);
do
{
// Send device code
if (I2cTxByte(devAddr_n) == 1)
{
   break;
}
DelayXus(10);
// Send register code
if (I2cTxByte(regAddr_n) == 1)
{
   break;
}
DelayXus(10);
// Send data
if (I2cTxByte(txData_n) == 1)
{
   break;
}
DelayXus(10);
retVal_n = 0;
}while(0);
// Send stop command
I2cStop();
DelayXus(10);
sig_sem(RES_I2C_SEMID);
xenable();
return retVal_n;
}

lifufeng 发表于 2011-9-12 14:05:09

哈哈
楼主好xx

babaili2010 发表于 2011-9-13 10:07:01

看起来不错哟

ShuJi187 发表于 2011-9-18 22:01:18

回复【4楼】lifufeng
哈哈
楼主好xx
-----------------------------------------------------------------------

不至于吧

ShuJi187 发表于 2011-9-18 22:02:29

谢谢三楼“xlf159 ”,我最后用的SSP模拟的
页: [1]
查看完整版本: 请问LPC2132跑UCOSII能接收多快的脉冲?