|
本帖最后由 lys5255 于 2012-6-25 15:40 编辑
这个是部分主要的程序,
void SPI_Init()
{
SFRPAGE = SPI0_PAGE;
SPI0CFG = 0x70;//工作在主方式,SCK在空闲时处于低电平,第一个边沿采样数据
SPI0CN = 0x01;//使能SPI
SPI0CKR = 0x6D;//时钟频率定为100K,此处由公式F=SYSCLK/2*(SPI0CKR+1)得到
}
void SPI_send(void)
{
SFRPAGE = SPI0_PAGE;
SPI0DAT = 0x00;
while(!SPIF);
SPIF=0;
SPI0DAT = num[0];
while(!SPIF);
SPIF=0;
SPI0DAT = num[1];
while(!SPIF);
SPIF=0;
SPI0DAT = num[2];
while(!SPIF);
SPIF=0;
}
我用串口发送的数据,也就是说num[0]-num[2]都是串口发送的字节,我发送了0x00,0x55,0x00;即SPI正常的话应该是连续发出0x00,0x00,0x55,0x00.我用示波器观察,发现每个自己发送结束后,都会有一个类似于干扰的脉冲存在,脉宽大约为500ns,观察时钟,发现每个字节的最后一位(也就是第八位)都会出现这个情况,应该是发送之后就回到了SPI的初始状态,不知道为什么,下面附有示波器图形,请高人指点。
第一次发帖。希望大家帮帮我。
这个图可以看出每字节完成后,都有一个脉冲。
这个图可以看出,蓝色的为时钟信号,红色的为SPI数据,但是,每个时钟的周期是不一样的,这里所说的不一样,是说每第八个数据传输后的时钟脉宽比正常的要多一些,而多出的那一端,就正好是数据脉宽。下一张图更直观。
也就是没传完一个字节,SPI像是回到了初始状态一样,不知道为什么会这样。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|