打印

关于SPI

[复制链接]
4042|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
linyi2007|  楼主 | 2007-10-13 11:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
spi, TE, pic, ic, tc
请问关于8位机SPI初始化问题:

请问以下我的SPI初始化程序有错吗?怎样才能请SPIS_SPTEF?

谢谢~

void SPI_Init(void)
{
    SPIC1 = 0x54; //禁止SPI中断;
    
                  //使能SPI功能;
                  
                  //作为主机;
    
    SPIC2 = 0x00;
    
    SPIBR = 0x00;   //波特率 10M/1/2=5M
    
    while (SPIS_SPTEF == 0 )
    {       
        __RESET_WATCHDOG();
       
        continue;      
    }
    
    SPID = 0;
    
    PTEDD_PTEDD2 = 1; //释放SPI模块的SS脚,并作为FM25L26的片选脚;
  
    SPI_CS = 1; //先置高电平

相关帖子

沙发
张明峰| | 2007-10-14 21:51 | 只看该作者

清SPIS_SPTEF

唯一的办法是往数据寄存器SPI1D填数据。不过填入的数据一旦发送完毕,SPIS_SPTEF就立即变1。
和另外一贴的SCI发送中断标志一样的问题。怎么这么多人喜欢清这些硬件标志呢?不会变通一点点来处理?

使用特权

评论回复
板凳
linyi2007|  楼主 | 2007-10-15 08:29 | 只看该作者

关于清SPIS_SPTEF

呵呵:) 谢过张大侠指教。

但是 我也是情非得已啊。我在在线仿真时,该标志位一直为1啊。如果使能了

该SPIE,那不是永远都跳不出中断程序了?

再向您请教一个问题:

在进行SPI传输时,如果没有接SPI从机,SPI主机是不是也行接收到数据(即

SPRF被置1)?

使用特权

评论回复
地板
linyi2007|  楼主 | 2007-10-15 08:50 | 只看该作者

关于清SPIS_SPTEF

呵呵,看了一下"SCI发送中断标志"这个贴,

我平常用SCI时,发送都是采用查询的方法,接收才用到中断,进中断的时候

第一步一般是关闭中断使能,所以没有碰到那位仁兄的问题。

我的SPI程序是:

    while (SPIS_SPTEF == 0 )
    {       
        __RESET_WATCHDOG();
       
        continue;      
    }

    SPID = XX;

     while (SPIS_SPRF == 0 )
    {       
        __RESET_WATCHDOG();
       
        continue;      
    }
    
    SPIData = SPID;

使用特权

评论回复
5
张明峰| | 2007-10-15 19:14 | 只看该作者

SPI

在SPI主模式下,只要数据寄存器SPI1D为空,SPIS_SPTEF标志就永远为高,只是为了告诉现在你可以往外发送数据。另外在主模式下只要一个字节发送完毕,一定会有一个字节收到就绪,不管你要还是不要。

另外上面的代码并不是中断驱动的写法。现在你用查询方式,又关中断何事?

再另外,等一件事情时最好不要一天到晚RESET_WATCHDOG,这样不好。

使用特权

评论回复
6
linyi2007|  楼主 | 2007-10-22 13:51 | 只看该作者

spi

谢谢,张教主的指导,在下铭记在心啊。

小弟愚见:SPI发送或接受是不是用查询比较好,反正速度够快。

使用特权

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

本版积分规则

14

主题

46

帖子

1

粉丝