MSP430讨论区
返回
登录/注册
nrf905能否直接用spi发送数据呢
楼主
dj007 于 2010-12-29 15:57:40
nrf905能否直接用spi发送数据呢
如题,我在网上看了很多有关msp430和nrf905的收发程序,发现几乎有一个共同点,就是都喜欢用单片机的io口模拟spi口。
程序如下:
//*****************SPI 读**********************************//
uchar SPI_READ(void)
{
uchar bit_ctr,byte;
for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit
{
byte = (byte << 1);
IO_Set_SCK(); // Set SCK high..
if((MISO & P3IN)==MISO) byte |=1;
else byte&=~1;
IO_Clear_SCK(); // ..then set SCK low again
}
return(byte); // return read byte
}
//***********************SPI 写***************************//
void SPI_WRITE(uchar byte)
{
uchar bit_ctr;
for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit
{
if(BIT7 == (byte & 0x80)) IO_Set_MOSI();
else IO_Clear_MOSI();
IO_Set_SCK();
byte = (byte << 1); // shift next bit into MSB..
IO_Clear_SCK();
}
}
但是大部分msp430系列本来就带有spi口,不知道他们为何要用I/O口模拟SPI口。spi口速度肯定要比那些模拟的速度快啊,小弟为此十分迷茫。
另外这个帖子 http://www.microcontrol.cn/bbs/a/a.asp?B=100&ID=32059&q=1&r=19795,
那位老大曾经用spi调试出来过 程序如下:
//===============NRF905 SPI读函数==================
uchar SpiRead(void)
{
U1TXBUF=0;
while(!(U1TCTL&TXEPT));
return U1RXBUF;
}
//==============NRF905 SPI写函数==================
void SpiWrite(uchar send)
{
U1TXBUF=send;
while(!(U1TCTL&TXEPT)); //等待发送器为空
}
但小弟没有调试成功 不知道是否是晶振的问题 偶的晶振是32768hz
试问 nrf905能否直接用spi发送接收数据呢 谢谢各位大哥大姐们指教
回复
1楼
DC 于 2010-12-29 20:59:55
用模拟串口的比如SPI、IIC使用起来十分方便,移植也很方便就搞定。CPU方面只能说没占用CPU资源;但速度也不会慢不了多少;由于软件模拟的原因,很多时序动作都是由用户控制;如果只要低层的子程序设计好了,应用起来十份方便;我也习惯用这种用法。
至于从器件是否适合用于SPI这可根据从器件手册看看是否适合就可以了。
回复
2楼
dj007 于 2010-12-30 09:19:42
谢谢DC老大赐教 小弟的也就模拟的成功了,就是spi一直不成功,估计还是NRF905 SPI读写函数的问题,我再改下试试。
spi能否用低频晶振呢,请老大指教一下
回复
3楼
DC 于 2010-12-31 22:38:21
你所说的低频晶振是指32768HZ吗?如果是指这个的话是没问题的,可以用。
若你指低频不确定是否可用,难道高频晶体你就可以用了?
还是你的串行模块你还没搞懂部分的使用?
我初步估计不太像是时钟源问题,建议你看看初始化部分及硬件IO部分。
回复
4楼
dj007 于 2011-01-04 09:37:21
DC新年好啊
谢谢DC了 我再试试 谢谢大师解答
回复
1
电脑版
Page created in 0.0625 seconds width 2 queries.