laoguren 发表于 2012-11-3 14:58:04

关于DSP的SPI问题

我现用mega16和DSP通过SPI进行通信,DSP主机,它只需从mega16中接收数据,然后处理就行。
是否可以只接:SCK,MISO,SS三线。

主          从
SCK--------SCK
MISO-----MISO
SS---------SS

这样,从机只负责发数据就可以,主机需要的时候就发空数据(MOSI另有他用,没有作为信号线使用),
启动SCK,然后从MISO得到数据,就可以了。
实际操作中,空信号发不出去,一直在发送完成标志那等待。
难道非得接上MOSI才可以?从机接空信号没用啊。

laoguren 发表于 2012-11-3 16:39:24

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;//接收从机数据
}

laoguren 发表于 2012-11-3 16:39:57

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就不停发送

steaven2000 发表于 2012-11-20 17:12:42

谁告诉你的MISO接MISO?

laoguren 发表于 2012-11-21 20:55:28

难道不是,怎么可能,自己确定了再提建议,不懂不要误人子弟,我现在搞好了,线路就是这么接的,程序有点小问题而已。

xiangxiadage 发表于 2012-11-22 18:44:56

如果按照你的描述,我也认为接得不对。
要么就是你的描述有问题。

LZ的态度,4楼兄弟情何以堪?

laoguren 发表于 2012-11-22 23:09:32

谁告诉你的MISO接MISO?
这倒不是,关键是有些人总是高高在上的样子,我是虚心的请教,但他摆出一副“半桶水”的姿态,真有心帮忙的会告诉你错了,错在哪?而非莫名其妙的丢下一句完事,自以为很牛,菜鸟我没看出来。

huanying1136 发表于 2012-11-24 09:52:38

laoguren 发表于 2012-11-22 23:09 static/image/common/back.gif
这倒不是,关键是有些人总是高高在上的样子,我是虚心的请教,但他摆出一副“半桶水”的姿态,真有心帮忙 ...

LZ说的对

rx_78gp02a 发表于 2012-11-24 16:30:16

楼主绝对不是菜鸟!
页: [1]
查看完整版本: 关于DSP的SPI问题