关于DSP的SPI问题
我现用mega16和DSP通过SPI进行通信,DSP主机,它只需从mega16中接收数据,然后处理就行。是否可以只接:SCK,MISO,SS三线。
主 从
SCK--------SCK
MISO-----MISO
SS---------SS
这样,从机只负责发数据就可以,主机需要的时候就发空数据(MOSI另有他用,没有作为信号线使用),
启动SCK,然后从MISO得到数据,就可以了。
实际操作中,空信号发不出去,一直在发送完成标志那等待。
难道非得接上MOSI才可以?从机接空信号没用啊。
DSP主机程序
void SPI_Init() //SPI-DA初始化
{
*MCRB=*MCRB | 0x0038; //SIMO为普通IO口,空着不用
*SPICCR=0x0047; //8bit数据
*SPICTL=0x0004; //DSP为主控制器
*SPIBRR=0x0027; //1M波特率,40M/40=1M
*SPICCR=*SPICCR | 0x80; //复位SPI
}
while(1)
{
*SPITXBUF = 0xFF;
while((*SPISTS & 0x40) != 0x40);//程序在这就停住了,why?
spi_data = *SPIRXBUF;//接收从机数据
}
mega16从机程序
#include <iom16v.h>
#include <macros.h>
void port_init(void)
{
PORTA = 0xFF;
DDRA= 0x00;
PORTB = 0xF0; //SPI上拉
DDRB= 0x40;//MISO输出,其他输入
PORTC = 0x03;
DDRC= 0x00;
PORTD = 0x00;
DDRD= 0x00;
}
void spi_init(void) //spi初始化
{
DDRB|=(1<<PB6)|(~(1<<PB7))|(~(1<<PB4));
SPCR = 0xE1;//从机
SPSR = 0x00;
}
void spi_send(uchar sData)
{
SPDR = sData;
while(!(SPSR & BIT(SPIF)));
//sData=SPDR;//读从机发回来的数据
}
void main()
{
spi_init();
while(1)
{
spi_send(0x39);
}
}
//从机收到CLK就不停发送 谁告诉你的MISO接MISO? 难道不是,怎么可能,自己确定了再提建议,不懂不要误人子弟,我现在搞好了,线路就是这么接的,程序有点小问题而已。 如果按照你的描述,我也认为接得不对。
要么就是你的描述有问题。
LZ的态度,4楼兄弟情何以堪? 谁告诉你的MISO接MISO?
这倒不是,关键是有些人总是高高在上的样子,我是虚心的请教,但他摆出一副“半桶水”的姿态,真有心帮忙的会告诉你错了,错在哪?而非莫名其妙的丢下一句完事,自以为很牛,菜鸟我没看出来。 laoguren 发表于 2012-11-22 23:09 static/image/common/back.gif
这倒不是,关键是有些人总是高高在上的样子,我是虚心的请教,但他摆出一副“半桶水”的姿态,真有心帮忙 ...
LZ说的对 楼主绝对不是菜鸟!
页:
[1]