li3p 发表于 2011-11-10 23:11:19

STC12LE5A60S2的硬件SPI的逻辑分析截图-这样正常吗?

写了一个简单的程序测试STC12LE5A60S2的硬件SPI,程序附后,其实非常简单就是通过SPI发送一个0xAA(二进制10101010)。
通过逻辑分析仪发现实际的时序图如下,实际上看到发出去的数据应该是0x94,晶振是22.1184的:

http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_693976QNFVBN.jpg
STC硬件SPI得到时序图 (原文件名:hard-spi.jpg)

代码如下:

#include <intrins.h>
#include "../cpus/stc1t.h"

#define SPIF         0x80
#define WCOL        0x40
#define ESPI        0x02
sbit SPISS = P1^3;

void init_spi()
{
        SPCTL |= 0x80;                                        // SSIG = 1 由MSTR确定是主机还是从机
        SPCTL |= 0x40;                                        // SPEN = 1 SPI使能
        SPCTL |= 0x20;                                        // DORD = 1 LSP最先发送
        SPCTL |= 0x10;                                        // MSTR = 1 确定MCU为主机
        SPCTL |= 0x08;                                        // CPOL = 1 SPI空闲时为高电平
        SPCTL |= 0x04;                                        // CPHA = 1 数据在前时钟沿驱动,后时钟沿采样
        SPCTL &= 0xFC;                                        // SPR1=0;SPR0=0 SPI时钟=CPU_CLK/4

        IE2 |= ESPI;                                        // IE2.1
}

#pragma disable   
void spr_isr() interrupt 9 using 1
{
        SPSTAT = SPIF | WCOL;
        SPISS = 1;
}

void main()
{
        init_spi();
        EA = 1;

        SPDAT = 0xAA;

        while(1)
        {
        }
}

li3p 发表于 2011-11-10 23:24:23

回复【楼主位】li3p
-----------------------------------------------------------------------
将SPI的时钟降为CPU_CLK/16之后的结果,可以看到多了一个bit,后面的8个bit倒是正确的。
有遇到过这个问题的前辈吗?是我哪里的问题?

http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_693977U1JPYT.jpg
STC硬件SPI得到时序图 - 16分频 (原文件名:hard-spi-2.jpg)
页: [1]
查看完整版本: STC12LE5A60S2的硬件SPI的逻辑分析截图-这样正常吗?