请教MC9S08AW32使用SPI时发送器空标志一直为1,清不掉怎么办?

- UID
- 143639
- 性别
- 男
|
请教MC9S08AW32使用SPI时发送器空标志一直为1,清不掉怎么办?
PTED = 0; PTEDD = 0; PTED_PTED4 = 1;//外接74HC165和74HC595 PTEDD = 0b11010000;//PE口的4/6/7使能输出,其它口不变 SPI1S; SPI1D; SPI1BR = 0x35;//大概50KHz SPI1C2 = 0x00; SPI1C1 = 0x10; SPI1C1_SPE = 1; for(;;) { if(SPI1S_SPTEF) { SPI1S; SPI1D = SendData; SPI1S; //如果这句不加,2次后SPI1S_SPTEF就一直为0,再也不能输出。 delay(2);//这里应该是while(!SPI1S_SPTEF),但加了上一句后, //SPI1S_SPTEF一直为1,所以用delay 0.2ms }
if(SPI1S_SPRF) { SPI1S; SPI1D; } }//end
本人第一次接触SPI,是不是哪里写的不对啊?
[此贴子已经被作者于2007-7-24 15:57:58编辑过] |
|
|
|
|
|

- UID
- 143639
- 性别
- 男
|
上面的程序结果是SPTEF一直为1.
我是说如果不加红色那句,进入这个判断两次后,SPTEF就一直为0了。再也进不来了。 |
|
|
|
|
|

- UID
- 143639
- 性别
- 男
|
谢谢strongchen,帮看下。http://bbs.chinaecnet.com/uploadImages/test-spi-aw.rar |
|
|
|
|
|

- UID
- 143639
- 性别
- 男
|
谢谢.请问用硬件仿真可以单步执行吗,因为我用硬件单步时,结果SPIS_SPTEF还是一直为1. |
|
|
|
|
|

- UID
- 143639
- 性别
- 男
|
可是我用AW32硬件仿真没看到清零,数据可以用示波器看到已经输出了.
去掉delay(2);
换成 while(!SPI1S_SPTEF) __RESET_WATCHDOG();后,SPI1S的变化就是A0和20,没见过为零.
请问您用的是GP32吧,能不能用GT32或AW32试下啊,这两种差不多,GP的差好多啊. |
|
|
|
|
|

- UID
- 143639
- 性别
- 男
|
谢谢,我是怕接收数据时有问题.我还没查看收数据,有问题再向您请教. |
|
|
|
|
|

- UID
- 143639
- 性别
- 男
|
"实际上SPTEF并不是发送完成标志,而是发送缓冲空标志。"
那这个片子没有移位结束标志,我怎样判断8位移位结束呢?因为我要在移位结束后给74HC595一个信号,告诉它可以输出到显示了。
还是移位结束后单片机才会执行下一条语句?还是我自己要加个延时? |
|
|
|
|
|

- UID
- 143639
- 性别
- 男
|
|
|
|
|
|