原创 stcspi

2010-1-28 23:12 2502 6 6 分类: MCU/ 嵌入式

STC系列单片机的 硬件SPI调试成功(2009-11-22 16:52:48)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />





标签:stc 单片机 硬件 spi 主机 c语言 杂谈 


        一直以来用的是模拟方式的SPI,但是速度实在有限,能达到700K就不错了,而硬件SPI可以达到3Mbps


        查看了datasheetdemo程序(汇编),想改写为C语言的,不过一直有bug,时不时接不着


而且主机能给从机发送数据,从机可以顺利接受,但是从机返回到主机的程序,主机无法接收。


       连续两天没有解决这个问题!


       其中不乏看了些论坛上大虾们的程序,关于STC的硬件SPI程序不多,大多数是软件模拟实现的。


程序改写过程中出现的问题:


1、中断方式要注意:主机的写SPI函数开关中断要及时,判断结束后要在SPSAT清零前打开中断!


 void SpiWrite(unsigned char b)

  EADC_SPI = 0;     //
关掉ADC_SPI共享中断
     SPDAT = b;      //
发送数据
     while(!(SPSTAT & 0x80) );  //
等待发送完毕 SPIF = 1
  EADC_SPI = 1;     //
打开中断
  SPSTAT = 0xC0;     


}


////////////////////////////////////////////////////中断读


adc_spi_interrupt(void) interrupt 5  {


 SPSTAT = 0xC0;
  bchar = SPDAT;


 spi_packet = 1;
}


/////////////////////////////////////接受数据包的时候,注意要先写一个字节(0xFF)随便


void RxPacket(void)    /////////////nRF905射频收发器的接受函数
{
    unsigned char i;
    i="0";


 while(DR)
 {
 SpiWrite(0xFF);
 while(spi_packet)
    { 
        TxRxBuffer = bchar;
  i++;
  spi_packet=0;
    }
 }


}


先吃饭了,回来写


 


 


///////////////////////////////////////////////////


最近在上海找工作,一时忘记了这未完的日志,续写(时间有限,直接贴程序)


///////////////////////////////////////////////////


2、最多的时候还是使用查询方式比较方便,程序简单,读写一体:


unsigned char SpiWrite(unsigned char spidata)////////注意读的时候,也要写一个字节
{  
 SPSTAT=0xC0;
 SPDAT=spidata;
 while(!(SPSTAT & 0x80));
 return SPDAT;
}


 


//////////////////////////////////////


在此特别感谢广西民族大学的hebei,一语点醒,让我解决了这个问题。


SPI就是挤过来挤过去”


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条