通过上面一些方法的 测试,现在出现 已经可以 输出连续的18个脉冲时钟, 从设备也你能 正常回传 18位的数据,
现在的 初始化和 读程序如下。
但是还是发现了一个问题,依然没有解决,就是 通过读输入的 数据,发现 2个临时变量的 数据是一样的。
程序如下:
s->SPICCR.bit.SPISWRESET = 0; // Put SPI in reset state
s->SPICCR.bit.SPICHAR = 0x8; // 9-bit character//////////////////
s->SPICCR.bit.SPILBK = 0; // loopback off
s->SPICCR.bit.CLKPOLARITY = 1; // Rising edge without delay
s->SPICTL.bit.SPIINTENA = 0; // disable SPI interrupt
s->SPICTL.bit.TALK = 1; // enable transmission
s->SPICTL.bit.MASTER_SLAVE = 1; // master
s->SPICTL.bit.CLK_PHASE = 0; // Rising edge without delay
s->SPICTL.bit.OVERRUNINTENA = 0; // disable reciever overrun interrupt
s->SPIBRR = 20; // SPICLK = LSPCLK / 4 (max SPICLK)
s->SPIPRI.bit.SOFT=1; //停止前完成当前的接收 、发送操作
s->SPIPRI.bit.FREE=0; //
s->SPIFFTX.bit.TXFFST=2; //发送FIFO具有2个字///////////////////
//s->SPIFFTX.bit.TXFFIL=2;
s->SPIFFRX.bit.RXFFST=2; //接收FIFO具有2个字///////////////
//s->SPIFFRX.bit.RXFFIL=2;
s->SPIFFTX.bit.TXFFIENA=1; ////发送FIFO中断使能//////////////////
s->SPIFFRX.bit.RXFFIENA=1; ///接收FIFO 中断使能
s->SPICCR.bit.SPISWRESET=1; // Enable SPI
下面是 通信程序。
s->SPITXBUF = 0; //send out the data
s->SPITXBUF = 0; //send out the data
while(s->SPISTS.bit.INT_FLAG == 0); //wait for the packet to complete
for(i=0;i<10;i++);
stat_reg1 = s->SPIRXBUF;
stat_reg2 = s->SPIRXBUF;
以上数据通过示波器观察已经确定。 现在依然是 读回的2个数据一样。、
在两个读入中间加 延时倒是可以读取,
stat_reg1 = s->SPIRXBUF;
for(i=0;i<100;i++);
stat_reg2 = s->SPIRXBUF;
但是因为程序里面有 1个10Khz 的中断。要产生,还是会产生读出的 数据会有错误
因为s->SPISTS.bit.INT_FLAG 中断标志的产生会在每个数据接收9位完都会产生,
所以,要想读取 18位数据,就需要分2次读取。如果这2次读取的数据间隔时间短,就会出现2次读回一样的数据。
如个使用2个FIFIO 来保持接收的数据,不知道是否可以。现在程序也已经定了2个FIFO 但是在数据读取方面还是不行