打印
[ZLG-ARM]

LPC2210的SPI做从机时遇到问题,周工帮忙

[复制链接]
2333|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kalehz|  楼主 | 2007-8-17 14:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在做nRF24E1和LPC2210通过SPI接口通信的实验。nRF24E1的SPI只能用作主SPI,所以LPC2210的SPI选作从模式。
nRF24E1的SPI通信的格式为:当把数据写入SPI_DATA寄存器时,数据的高位(MSB)先移出。原文是这样描述的:The 8 bits of SPI_DATA register are clock out on SDO with msb first.Simultaneously 8 bits from SDI are clocked into SPI_DATA register.时钟是高有效,原文描述为:Output data is shifted on negedge SCK,and input data is read on posedge SCK.
因此,我对LPC2210的S1PCR寄存器的配置如下:
S1PCR = (0 << 7)|    //SPIE 禁能
        (0 << 6)|    // LSBF MSB First
        (0 << 5)|    //MSTR  从模式
        (0 << 4)|    // CPOL  SCK高有效
        (0 << 3);    // CPHA  数据在SCK的第一个时钟沿采样。传输从SSEL信号激活时开始,并在SSEL信号无效时结束。
SPI1引脚配置如下:
PINSEL1 = (PINSEL1 & ~0x3fc) | 0x2a8; // 配置SPI1引脚
主SPI(nRF24E1)的读写函数没有问题,因为一直用它配置RF前端的。函数如下:
unsigned char SpiReadWrite(uint8 b)
{/*exif.5 internal spi module send or received 8bits,and is ready for a new command ,must be clear by software*/
    EXIF &= ~0x20;   // Clear SPI interrupt, 1101 1111
    SPI_DATA = b;   // Move byte to send to SPI data register
    while((EXIF & 0x20) == 0x00);    /* Wait until SPI hs finished transmitting, when exif.5=0*/
    return SPI_DATA;
}
从机SPI(LPC2210)的读写函数如下:
void SendData (uint8 data)
{
    uint8 rValue1,rValue2;
    S1PDR = data;
    while(0 ==(S1PSR&0x80)); //等待SPIF置位,即等待数据发送完毕
    rValue1 = S1PSR;   //以下两个语句是为了让SPIF清零
    rValue2 = S1PDR;
}
char  RcvData(void)
{
    uint8 rValue1,rValue2;
    while(0 == (S1PSR&0x80));
    rValue1 = S1PSR;
    rValue2 = S1PDR;
    return (rValue2);
}
现在的问题是:1.从机SPI要向主机发送数据,从机先通过中断通知主机,主机响应中断后转入主SpiReadWrite()函数。可以看到主SPI接收到了从机发送的数据是正确的,但是从机接收到的数据却是不定的。SPI操作是移位操作,主机SPI接收到从机的数据的同时,从机也应该接收到主机的发送的数据,是不是这样的?要是这样,为什么从机接收到的不正确呢?
2.倘若我不管现在从SPI接收到的数据是否正确,第二步,我要用从SPI接收数据,即用RcvData()函数接收数据。可以看到主SPI确实发送数据了,而且可以保证主SPI在进入SpiReadWrite()函数之前,从SPI已经进入RcvData()函数,正在等待接收,即执行while(0 == (S1PSR&0x80));,而程序却死掉了。
我实验了好多方法,也没有成功,不知道问题出现在那里,如果有必要的话,我可以把全部程序都上载上来。
希望周工能帮忙,谢谢!!!

相关帖子

沙发
zuan520| | 2010-10-14 18:00 | 只看该作者
1# kalehz 楼主,我有一个问题,你的从机怎么通知主机的,通过spi吗?主机要是没有发数据给从机的话,从机是没有时钟给主机发数据的,怎么发这个通知信息呢?

使用特权

评论回复
板凳
FVJFIFE| | 2010-10-14 22:26 | 只看该作者
关注中

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

13

帖子

0

粉丝