你好,我最近初次使用ADI公司的
单片机ADUC7060,有几个问题已经困扰我一段时间了,希望贵公司的工程师能为我解答一下,不胜感激!
(1)SPI结构的问题
我之前用过的PIC单片机,其SPI结构如图所示,但我并没在ADUC7060的数据手册上找到其SPI的图片。所以有如下问题:
PIC单片机中,SPI中发送与接收共用一个寄存器SSPBUF,ADUC7060中SPITX与SPIRX也是否在物理上也是共用一个寄存器?
(2)、SPI接收数据的问题
PIC单片机中,SPI在接收时要先发送一字节数据,产生8个时钟,将数据通过移位寄存器SSPSR读取进来(发送即接收,接收即发送)。其spi读取代码如下:
SSPBUF=data1;//先发送1字节数据,以产生8个时钟,将所读取数据依次移位进SSPSR
while(!SSPIF);//等待发送完成
SSPIF=0;//清除标志位
data2=SSPBUF;//读取数据
在ADUC7060的官方代码中,在数据接收时,先会有一个ucDummyRd=SPIRX,然后在中断中会有szRxData[ucRxCount++]=SPIRX。
我想知道ucDummyRd=SPIRX中读取到的是什么值。它读取到的是否是FIFO的当前值?它读取到的是否是一个没用的数据?其目的是否只是为了产生8个时钟脉冲,以达到移位的目的(类似于PIC中接收数据前先发送数据)?真正有效的数据是否出现在中断中的szRxData[ucRxCount++]=SPIRX,被szRxData[0]读取?
(3)SPI发送接收4个字节产生中断的问题
如果设SPICON中SPIMDE为11,也即发送或接收完4个字节才产生中断,那么作为SPI接收的前奏,是否应该有4次个ucDummyRd=SPIRX?为什么在官方SPI_Test->SPI_Master
中只有一次ucDummyRd=SPIRX,只读取一次,产生8个时钟脉冲能造成中断吗?
(4)在官方程序示例ADuC706x_IARExamplesIARSPI_TestMaster中,接收6个字节,为什么接收中断中写的是
if (ucRxCount < 7) // Have max 6 bytes been received?
这岂非是接收7个字节?
在官方程序示例ADuC706x_IARExamplesIARSPI_BasicSPI_Master中,接收6个字节,为什么接收中断中写的是
if (ucRxCount <16) // Have max 6 bytes been received?
这样是否读取了16个数据?
(5)ADUC7060中,如果使用外部晶振,定时器1就要作为唤醒定时器。当器件被唤醒后,定时器1是否还能做别的用途?
非常感谢!