这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » SSP 求助: SSP读写数据问题

共2条 1/1 1 跳转至

SSP 求助: SSP读写数据问题

院士
2006-09-17 18:14:16     打赏
SSP 求助: SSP读写数据问题



关键词: 求助     读写     数据     问题    

院士
2006-12-22 22:43:00     打赏
2楼
问 以下是按zlg光盘编写的.
我将CPHA,CPOL和SCR,CPSR的所有组合及速率都试了,都不行.

是我以下的程序(硬件SSP)不对吗???

谢谢!!!!!!

管脚配置:
  POWER->P_CONP |= (1 << PCSPI1);
  PINSEL->PIN_SEL1 |= ((P0_17_SCK1 << P0_17_PINSEL) | (P0_18_MISO1 << P0_18_PINSEL) | (P0_19_MOSI1 << P0_19_PINSEL));
  SSP->SSP_CR0 = (0x01 << 8) |              // SCR  设置SPI时钟分频0x01
                 (0x00 << 7) |              // CPHA 时钟输出相位,仅SPI模式有效
                 (0x01 << 6) |              // CPOL 时钟输出极性,仅SPI模式有效
                 (0x00 << 4) |              // FRF  帧格式 00=SPI,01=SSI,10=Microwire,11=保留
                 (0x07 << 0);               // DSS  数据长度,0000-0010=保留,0011=4位,0111=8位,1111=16位

  SSP->SSP_CR1 = (0x00 << 3) |              // SOD  从机输出禁能,1=禁止,0=允许
                 (0x00 << 2) |              // MS   主从选择,0=主机,1=从机
                 (0x01 << 1) |              // SSE  SSP使能,1=允许SSP与其它设备通信
                 (0x00 << 0);               // LBM  回写模式
             
  SSP->SSP_CPSR = 0x52;                     // PCLK分频值
   // SSP->SSP_IMSC = 0x07;                     // 中断屏蔽寄存器
  SSP->SSP_ICR  = 0x03;                     // 中断清除寄存器

读写数据:
unsigned char result;
  SSP->SSP_DR = cData;
  while( (SSP->SSP_SR & (1 << TFE)) == 0 );        // 等待TFE置位,即发送FIFO空   
  result = SSP->SSP_DR;

但是数据读不对,但用软件模拟可以
管脚配置:
  P0->IODIR |= (1 << SCK1) | (1 << MOSI1);
  P0->IOCLR = (1 << SCK1);

读写数据:
unsigned int i;
  for (i = 0; i < 8; i ++) {
//    _delay_loop_(1);
    if (cData & 0x80) P0->IOSET = (1 << MOSI1);
    else P0->IOCLR = (1 << MOSI1);
    P0->IOSET = (1 << SCK1);
//    _delay_loop_(1);
    cData <<= 1;
    if (P0->IOPIN & (1 << MISO1)) cData ++;
    P0->IOCLR = (1 << SCK1);
//    _delay_loop_(1);
  }
  result = cData;


1: 我的IIC读写float 也不好用。。。帮顶。。 2: SSP读写数据问题我也想知道,帮顶...........
高手上 3: SSP速率先降下来试试.回头我也看看datasheet. 4: 郁闷...可在LCD上输出,但不能在外部SPI上输入SPI一般输入数据不会在同一边沿,用软件模拟可以看出.

在方式0和方式3都通过软件模拟可以输入输出,但用SSP设置SPI方式怎么改都不行...

晕菜~~~难道SSP输入输出在同一边沿进行???不会这么乱搞吧... 5: 晕,搞这么多指针看你的设置:
PINSEL->PIN_SEL1 |= ((P0_17_SCK1 << P0_17_PINSEL) | (P0_18_MISO1 << P0_18_PINSEL) | (P0_19_MOSI1 << P0_19_PINSEL));

是不是有问题

另外,ssp方式要和外部器件对应,你用的外部器件是???? 6: 我晕菜~~~zlg的SSP例程真是害死菜农了!!!老鸟: 设置很完美~~~把菜农这次可害苦了!!!差点没跳楼!!!

搞了许多的SPI,这次可真是快"晚节不保"了...把我困了许久~~~


我晕!!!!!!!!!!!!!!!!!!!!!!!!!!!!!这是误人子弟呀... 7: 呵呵也有菜农搞不出来的难题?估计回头菜农还是自己灌水浇菜 8: 不要用他的例程,自己编一个呵呵,ssp应该没有问题,我用过.

好几天不见你了,还在菜地里猛干?? 9: 哈哈,小小的结构指针就吓到ARM老鸟了~~~确实我的例程很怪异~~~一般看来眼发晕~~~~~~~

最近农忙~~~ 10: 怎么个“误人子弟”????? 11: 好像:SSPDR的数据比LED数码管的显示要慢两个循环不信你运行开发板中的例子,Watch一下rcv看看。
还有Watch *(0xE0068008),(SSPDR的地址),再看看,这个我还没有试,明天再试。
另外,要问老农一个问题:
// SSP->SSP_IMSC = 0x07;
为何要注释掉?
(SSP->SSP_SR & (1 << TFE))
1 << TFE 是什么意思?



12: 谢谢各位,发帖当晚已解决全部问题 13: 怎么解决的说一下呀 14: 我眩晕~~~等书改过来再说... 15: 呵呵....... 16: 恭喜菜农种菜丰收 17: 晕到~~~困住菜农了一周时间而百思不解

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]