打印

这个软件模拟SPI函数还能怎样提高效率?

[复制链接]
1692|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liersong001|  楼主 | 2012-5-7 11:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32的SPI中的NSS引脚在复用中始终为低,只能自己写个SPI接口函数,程序如下
s16 SPI_Read(void)
{
        u8 i;
        s16   spi_read;
        GPIOB->BSRR = 0x00001000;                //GPIO_SetBits(GPIOB,PB_AD_CS);//CS=1
        nop(2);
        GPIOB->BRR = 0x00001000;                        //GPIO_ResetBits(GPIOB,PB_AD_CS);//CS=0
        nop(2);
        GPIOB->BRR = 0x00008000;                //GPIO_ResetBits(GPIOB,PB_AD_IN);//PB_AD_IN=0
        if(GPIOB->IDR&0X2000)                        //if(GPIO_ReadInputDataBit(GPIOB,PB_AD_OUT))//if(AD_DOUT)
        {
                spi_read =spi_read|0x0001;         
                spi_read=spi_read<<1;
        }
               
        GPIOB->BSRR = 0x00002000;                //GPIO_SetBits(GPIOB,PB_AD_SCLK);//AD_CLK_ON;
        for(i=0;i<15;i++)
    {        
                if(GPIOB->IDR&0X2000)  //        if(GPIO_ReadInputDataBit(GPIOB,PB_AD_OUT))
               
                {
                        spi_read=spi_read|0x0001;
                }
                GPIOB->BRR = 0x00002000;                                        //GPIO_ResetBits(GPIOB,PB_AD_SCLK);               
                spi_read = spi_read<<1;
                GPIOB->BSRR = 0x00002000;                        //GPIO_SetBits(GPIOB,PB_AD_SCLK);
        }   
                GPIOB->BSRR = 0x00001000;                        //GPIO_SetBits(GPIOB,PB_AD_CS);//CS=1
        return spi_read;
}
用示波器测波特率只有700KHz左右,怎么才能再提高呢?前辈们看下这个函数哪几句还能提高效率?能不能做到波特率2Mhz?
沙发
acgean| | 2012-5-7 12:34 | 只看该作者
提高速度, 看你怎么调整指令了。
比如:
spi_read=spi_read<<1;
if(GPIOB->IDR&0X2000)                        //if(GPIO_ReadInputDataBit(GPIOB,PB_AD_OUT))//if(AD_DOUT)
        {
                spi_read |=0x0001;         
        }
可以写成:
spi_read=spi_read*2+((GPIOB->IDR>>13)&1);
会省两条指令。

使用特权

评论回复
板凳
lllaaa| | 2012-5-7 13:36 | 只看该作者
你只需要软件控制nss就行了吧.为啥要自己用gpio模拟spi时序呢

使用特权

评论回复
地板
香水城| | 2012-5-7 13:37 | 只看该作者
LZ为什么不直接用硬件的SPI模块,却要搞软件模拟?

看你的另一个帖(https://bbs.21ic.com/icview-332883-1-1.html),可以知道你希望要控制NSS,即使这样使用硬件的SPI模块配合软件翻转NSS信号,也比这个软件模拟快而且程序短、好维护。

使用特权

评论回复
5
liersong001|  楼主 | 2012-5-7 13:44 | 只看该作者
这样改运行速度基本没有提高啊,波特率还是700KHz左右。

使用特权

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

本版积分规则

个人签名:

74

主题

342

帖子

2

粉丝