已回答假定已回答

ADUC7060的SPI接收问题

xxd 在 2016-12-20 詢問的問題
最後回覆由barryzhang於2016-12-27提供

你好,我最近初次使用ADI公司的单片机ADUC7060,有几个问题已经困扰我一段时间了,希望贵公司的工程师能为我解答一下,不胜感激!

1SPI结构的问题

我之前用过的PIC单片机,其SPI结构如图所示,但我并没在ADUC7060的数据手册上找到其SPI的图片。所以有如下问题:

PIC单片机中,SPI中发送与接收共用一个寄存器SSPBUFADUC7060SPITXSPIRX是否也是否在物理上也是共用一个寄存器?

 

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]读取?

 

3SPI发送接收4个字节产生中断的问题

如果设SPICONSPIMDE11,也即发送或接收完4个字节才产生中断,那么作为SPI接收的前奏,是否应该有4次个ucDummyRd=SPIRX?为什么在官方SPI_Test->SPI_Master

中只有一次ucDummyRd=SPIRX,只读取一次,产生8个时钟脉冲能造成中断吗?

 

4)在官方程序示例ADuC706x_IARExamples\IAR\SPI_Test\Master中,接收6个字节,为什么接收中断中写的是     

if (ucRxCount < 7) // Have max 6 bytes been received?

这岂非是接收7个字节?

在官方程序示例ADuC706x_IARExamples\IAR\SPI_Basic\SPI_Master中,接收6个字节,为什么接收中断中写的是      

if (ucRxCount <16) // Have max 6 bytes been received?

这样是否读取了16个数据?

 

5ADUC7060中,如果使用外部晶振,定时器1就要作为唤醒定时器。当器件被唤醒后,定时器1是否还能做别的用途?

 

非常感谢!

結果