中级会员
- 积分
- 335
- 威望
- 216
- 贡献
- 39
- 兑换币
- 0
- 注册时间
- 2009-9-23
- 在线时间
- 40 小时
|
1贡献
本帖最后由 4829543www 于 2009-10-18 20:07 编辑
我写了一个简单的spi双机的通讯程序,下到片子了以后主机能发,从机也有等待,但从机的时钟线一连到主机的时钟线上,从数据寄存器上读的数就是0xff。不知道是为什么,请问大虾们:从机是如何设定的,有什么说头吗?还有spi传两组数据时,中间需要有间隔吗?
(初始化已设定,32分频,dg128b,
SPI0CR1_SPIE = 0;//允许SPI中断
SPI0CR1_SPE = 1;//允许SPI
SPI0CR1_SPTIE = 0;//发送中断允许位,置位为0较好,否则数据发送完成,容易进入中断
SPI0CR1_CPHA = 0;//时钟相位选择位,
SPI0CR1_CPOL = 1;//时钟极性选择位,1为低电平有效,空闲时为高电平.
SPI0CR2_SPISWAI = 1;//1为等待模式下,时钟禁止
)
void main(void)//主机主程序
{
SPI_Sdata = 0xaa;
sysInit();//spi初始化
EnableInterrupts;
DDRB = 0XFF;
while(1)
SPI_Send(SPI_Sdata);//发送一个数据
for(;;)
{} /* wait forever */
}
void main(void)//从机主程序
{
SPI_Sdata = 0xaa;
sysInit();//spi初始化
EnableInterrupts;
DDRB = 0XFF;
while(1)
PORTB = SPI_Receive();//显示接收数据
for(;;)
{} /* wait forever */
}
////////发送数据函数
void SPI_Send(unsigned char SPI_Sdata)
{
SPI0DR = SPI_Sdata;写入数据寄存器
while(0 == SPI0SR_SPIF);//数据寄存满后开始发送
}
////////接收数据函数
unsigned char SPI_Receive(void)
{
while( 0 == SPI0SR_SPIF);//等待SPIDR寄存器数据满
return SPI0DR;//读取SPI数据寄存器中的数据
} |
最佳答案
查看完整内容
端口要首先初始化,另外带调试器调试时候总是读出的数据是:0xff,这是调试器的问题,调试器要把所有寄存器都要读取,所以,读出spi总是0xff,我开始调的时候就是在端口初始化上折腾了几天
|