看看是不是把SCIA的开了,而没有开SCIC的
再就是SCICTL寄存器的配置
把这些控制寄存器的配置都弄好了就OK了
再就是别忘了打开SCIC的时钟
慢慢调下就能通讯了
1 注意数据写入SPITXBUF时是左对齐,而读入SPIRXBUF是右对齐。这个问题在16位字长时不突出,但是在16位以下数据字长时要特别注意,一般方法是做左移运算。2 数据丢失问题:在开启SPIFIFO增强功能时,不能根据SpiaRegs.SPISTS.bit.BUFFULL_FLAG来暂停发送数据。因为此时的TXBUF是从TXFIFO中得数据。程序中写入TXBUF,只是写入发送缓冲器即FIFO。根据先进先出原理,你源源不断地向TXBUF写数据,则FIFO里总是保存你最后写入的数据,而不会将SpiaRegs.SPISTS.bit.BUFFULL_FLAG位置1,所以会发现数据丢失。正确的方法应该判断SPITXFIFO中的字的个数。
刚开始我也很郁闷,浪费了我一个礼拜的时间!能不能多给点分,哈哈!这个问题也困扰我很久...首先DSP是32位寻址的!当使用16位通信时,其实也是32位寻址,就是利用16位总线传输两次达到32位通信的效果,即:外部的写使能输出信号XWE0会输出两次低电平(通信两次)。32位模式当然只通信一次。当然你的情况是正常的。32位模式下一次就能把数据和地址传输完,16位要传两次。我们先不管时序(我忘了时序到底是什么样子,手册都在办公室,那个表的时序的确是那样传输的,当时想通了,现在给忘了),你用16位模式传输数据时,比如0x1234ABCD,看看对不对就行了,只要对就不要管时序了!我是做软件的,只要软件上能解决,硬件上我是不管的。在不增加系统负担上,我主张改软件。还有一点,你用的16位模式,实际上也是32位寻址和数据传输的,16位只是为了方便硬件扩展。软件上依然数传输32位数据,我的问题就是32位数据的高位是0,还以为没有写进去,其实写的是0.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)