MPC82G516 SPI接口问题 求教

[复制链接]
4362|10
 楼主| yuki774 发表于 2011-9-1 09:31 | 显示全部楼层 |阅读模式
硬件情况:1、AT51单片机与MPC单片机通过SPI接**换数据,两者均使
                  用 11.0592晶振。
              2、AT51单片机为固定从机,MPC为固定主机。
              3、两者只通过MISO、MOSI、CLK三根线相连。
              4、两者的/SS线均作为普通I/O口使用。
              5、已确定AT51单片机能正常工作,问题只存在于MPC单片机方面。
MPC软件设置情况:
             1、使能SPI,设置为主机,忽略/SS引脚,时钟相位选择为‘1’,
                 SPI时钟速率为16分频,不使能中断。

存在问题:
            1、当发送4个字节数据时,每发送完一个字节都有传输完成标志。
                清除标志后,再发送下一个字节。说明数据已发出去。
                但用示波器观察MOSI线,却只有一个毫秒级的低电平,却看不到波形。
               CLK线有时钟波形,MISO只是低电平没有任何反应。MCP初始化时,
               MISO为输入,MOSI和CLK为输出。

            请教这是什么原因?是哪里没有设置对吗?求教各位前辈!
MG_FAE 发表于 2011-9-1 09:41 | 显示全部楼层
把设置SPI的代码,PO上来看看
 楼主| yuki774 发表于 2011-9-1 09:45 | 显示全部楼层
void SPI_init(void)                       
{
//              SPCTL=0xD5;
        SPCTL=0x40;
        SPCTL|=0x10;
        SPCTL|=0x80;
        SPCTL|=0x05;
}
void TRX_SPI(uchar n)
{        uchar i;
        EA=0;
        for(i=0;i<n;i++)
        {
                SPDAT=MDATA[i];
//                        DisNum(0,i,3,MDATA[i],0);
                while((SPSTAT & 0x80)==0);
                SPSTAT |= 0x80;
        }
        EA=1;
}
MG_FAE 发表于 2011-9-1 09:54 | 显示全部楼层
试试看端口设置为推挽输出,
P0M0=0; P0M1=0xf0;
是否为端口驱动力不足造成。
 楼主| yuki774 发表于 2011-9-1 10:06 | 显示全部楼层
也试过了出是如此。
初始时:
        P1M0      = 0x40;
        P1M1      = 0xB1;
        P1          = 0xFF;
MG_FAE 发表于 2011-9-1 10:20 | 显示全部楼层
空接时候,只有MPC82G516有没有输出?
 楼主| yuki774 发表于 2011-9-1 11:02 | 显示全部楼层
现在可以确定有输出,

MPC的SPI时钟速率为16分频,而AT51作为固定从机,
应该不用考虑从机时钟速率也要设为16分频吧??
MG_FAE 发表于 2011-9-1 11:07 | 显示全部楼层
MPC82G516的SPI是内嵌的硬件模块,AT51貌似没有这个硬件,
如果AT51使用单纯的I/O口检测,要考虑速度搭配的问题,Fosc/16 对AT51 是否速度太快了?
 楼主| yuki774 发表于 2011-9-1 11:25 | 显示全部楼层
这里AT51是51内核增强型,速度不成问题,也有内嵌SPI,
那么,就不用考虑从机时钟速率的设置了。

在这谢过版主!!:)
MG_FAE 发表于 2011-9-1 13:20 | 显示全部楼层
:) 如果都是内嵌SPI硬件,那就没有时钟速度的问题
supernan 发表于 2011-9-1 15:53 | 显示全部楼层
赞版主一个,真耐心啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

44

主题

137

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部