首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

飞思卡尔s12xdp512的SPI模块的收发有关问题

2014-01-05 
飞思卡尔s12xdp512的SPI模块的收发问题程序总是调不通.代码如下:#include hidef.h#include derivative.

飞思卡尔s12xdp512的SPI模块的收发问题
程序总是调不通.代码如下:
#include <hidef.h>      
#include "derivative.h"         
byte a[8]={0}; 

void SPI_Init(void) 

  SPI0CR1_SPE=1;   /* enable SPI0 */
  SPI0CR1_SPIE=0;  /* disable interrupt */
  SPI0CR1_MSTR=1;  /* master mode */
  SPI0BR=0x03;     /* BaudRate_16 */           
}

byte SPI_Byte(byte value)
{
  while (!SPI0SR_SPTEF);
  SPI0DR = value;
  while(!(SPI0SR_SPIF));
  return SPI0DR;
}

void main(void) 
{
  byte b;
  DisableInterrupts;
  CLKSEL &= 0x7f;
  EnableInterrupts;
  SPI_Init( ); 
  for(b=0;b<8;b++)
  {
   a[b]=SPI_Byte(b);
  }
  while(1);
}

现在的情况是:数组a里面的数据全是0xFF.我单步调试的时候测试过了,数据根本就没写进数据寄存器SPI0DR里面.
困扰几天了,实在找不出错误的原因..
[解决办法]
SPI0DR是个寄存器啊,这是个和硬件相关的东西,所以并不是说你赋值给它,读出来就是你赋的值了

显然SPI0DR寄存器在数据发送出去之后就被清空了,所以SPI_Byte函数返回的一直是oxff


还有种可能,因为楼主寄存器配置错误导致spi没正常工作,所以卡在while (!SPI0SR_SPTEF);或while(!(SPI0SR_SPIF));了,不过看楼主说有单步调试,如果是这种情况应该很容易发现

热点排行