打印
[ZLG-ARM]

lpc2294的spi问题

[复制链接]
1707|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zzyszl|  楼主 | 2008-2-25 19:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用两片lpc2294,分别将其初始化为主机和从机(参考的周立功的教材),主机的SSEL信号有了,但是主机的CLK信号始终没有,还有MOSI始终没有数据输出,不知到问题出在那里,请问CLK要有信号输出必须具备什么条件,那位做过类似SPI通讯的,提供一个参考程序(分别是主的和从的)。

谢了!

相关帖子

沙发
armecos| | 2008-2-26 00:13 | 只看该作者

是不是引脚复用了

使用特权

评论回复
板凳
zzyszl|  楼主 | 2008-2-26 13:21 | 只看该作者

帮我看看代码,看看有没有什么问题?


主机:
void    inIt_SPI1(uint8 Fdiv)
{
    //
    PINSEL1&=0xFFFFFC03;
    PINSEL1|=0x000002A8;//P0.17,P0.18,P0.19设置成SPI模式 10101000    
    //
    SPI1_SPCCR=0x52;         //SPI时钟计数器设置。
    SPI1_SPCR=0x30;                //SPI控制寄存器设置:移位时小头在前,spi为主模式,sck低有效。
    //
    PCONP=PCONP | 0x400;   //SPI口使能。
}                                      
//===============================================================================================
//========================================用SPI发送数据==========================================
//===============================================================================================
uint8    sendDateUseSPI1(uint8 sendDate)
{
    uint8 recveDate,i;
    //
    recveDate=SPI1_SPSR;  //清状态寄存器。
    
    //
    //SSEL使能。
    IO0CLR=0X20000000;    
    //
    SPI1_SPDR=0x55;   //发送数据。
    //
    while(!(SPI1_SPSR & 0X80))
    {  
        UartSend(UART0,0x99);//用串口发送数据,看程序运行到什么地方。
        
    }
    //
    IO0SET=0X20000000;//SSEL使能禁止。
    //
    recveDate=SPI_SPDR;
    //
    return(recveDate);
}
====================================================================
从机:
void __irq IRQ_SPI1(void)
{
    uint8 receive;
    
    receive=SPI1_SPSR;                        //读SPI状态寄存器同时自动清0        
    //
    //
    if(SPI1_SPINT & 0x01)                    //判断是否是数据传输完毕中断
    {
        receive=SPI1_SPDR;
        //
        if(SPI1_SPSR & 0X80) //数据准备好。
        {
            SPI1_SPDR=0x3f;
            //
            UartSend(UART0,receive);
            //
            /*
            if(out_SpiTxBuf==in_SpiTxBuf)
            {
                rst_SpiTxBuf();
            }
            */
        }
        else //在发送期间不允许接收数据
        {
            //Receive_SPI_Bus(receive);
            //S1PDR=0x99;
        }
        //
        SPI1_SPINT=0X01;                        //清中断标志   
    }
    
    VICVectAddr = 0x00;
}
////
void    inIt_SPI1(uint8 Fdiv)
{
    //
     PINSEL1&=0xFFFFFC03;
    PINSEL1|=0x000002A8;//P0.17,P0.18,P0.19设置成SPI模式 10101000    
    //
    //
    //SPI1_SPCCR=0x52;         //SPI时钟计数器设置。
    SPI1_SPCR=0x90;            //SPI控制寄存器设置:中断使能,移位时小头在前,spi为从模式,sck低有效。
    //
    VICIntSelect = 0x00000000;           // 设置所有通道为IRQ中断
    VICVectAddr3 = (int)IRQ_SPI1;         // 设置SPI1向量地址
    VICVectCntl3 = 0x2B;                 // SPI中断通道分配到IRQ slot3,
    
     VICIntEnable |= 0x00000800;           // 使能SPI1中断
}

//===============================================================
其实上面只要看主机程序和从机的初始化就可以了,现在问题是主机的“SSEL”信号是有输出的,但是"SCK"没有信号输出。不知问题出在什么地方。

使用特权

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

本版积分规则

16

主题

37

帖子

1

粉丝