您当前的位置:五五电子网电子知识单片机-工控设备ARM单片机LPC2104SPI接口调试笔记 正文
LPC2104SPI接口调试笔记

LPC2104SPI接口调试笔记

点击数:7549 次   录入时间:03-04 12:03:00   整理:http://www.55dianzi.com   ARM单片机

今天调试完成,没带笔,用电子档写,以后抄录于笔记上。
关于SPI接口,作为主设备而言,它发送8位的串行数据,为一字节,为一次发送过程,这就要求从设备能接受8位的串行数据,即具有移位寄存器。而74HC595则是很好的一个选择,通过周立功的实验程序(GPIO部分模拟SPI口的功能)中的代码调试可以得来74HC959是串入并出的,具体的注释可以参看我在代码后写的注释,关于其他的细节,如下所示:
uint8 Msend_data(uint8 data_disp)
{
 IOCLR=HC595_CS;//这里实际上是置低电平选择水平SPI从设备
 SPI_SPDR=data_disp;
 while((SPI_SPSR&0x80)==0);
 IOSET=HC595_CS;//这里表示一次SPI传输结束,该语句不可除去
 return(SPI_SPDR);
而模拟SPI发送一个字节的代码如下,有些许相似的地方,两者比较可以得出更多的结论:
void  HC595_SendDat(uint8 dat)
{  uint8  i;

   IOCLR = SPI_CS;       // SPI_CS = 0
   for(i=0; i<8; i++)   // 发送8位数据,我认为模拟SPI的核心就在这行及其下面的6行代码
   {  IOCLR = SPI_CLK;   // SPI_CLK = 0
      /* 设置SPI的DATA输出值 */
      if( (dat&0x80)!=0 ) IOSET = SPI_DATA;
        else IOCLR = SPI_DATA;
      dat <<= 1;
      DelayNS(50); //周立功的原代码此处没这行代码,加这行的代码是为了证明74HC595是串入并出
      IOSET = SPI_CLK;   // SPI_CLK = 1
   }
  
   IOSET = SPI_CS;       // SPI_CS = 1,输出显示数据
}
注:#define   SPI_CS 0x00000100  /* P0.8 */
#define   SPI_DATA 0x00000040  /* P0.6 */
#define   SPI_CLK 0x00000010  /* P0.4 */
#define HC595_CS 0x00000100;//这里实际上设置的是p0.8口,即SSEL端口(这里的解释似乎有点错误,详细的解释见LPC2000_FAQ.pdf)




本文关键字:接口  ARM单片机单片机-工控设备 - ARM单片机