原创 ATmega168的SPI发送完寄存器SPIF不置位的问题

2009-6-11 09:47 4932 10 11 分类: MCU/ 嵌入式

利用ATmega168的硬件SPI驱动74HC595来扩展串行接口。把MOSI和SCK设置为输出,然后设置好寄存器。,具体如下:


static void vSpi595Init(void)
{
  DDRB|=(1<<PB3)|(1<<PB5);  //设置io口状态,spi的mosi和sck输出
  DDRD|=(1<<PD5);                   //设置595锁存引脚的方向


  SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);//使能SPI主机模式传送速度。
}


然后调用如下的发送函数


static void vSPIMasterTransmit(unsigned char ucData)
{
   SS_L();                                        //拉低存储寄存器时钟
   SPDR = ucData;                          // 启动数据传输 
    while(!(SPSR & (1<<SPIF)));    // 等待传输结束
    SS_H();                                     //拉高存储寄存器时钟
}


却发现死活不产生SPIF的中断。更换芯片,调整时钟和SPI数率都不管用。


后来去ouravr网站去搜,发现好多人碰到同样的问题,并且恰恰有个人给出了解决方法。就是需要把SS管脚设置为输出才行。


修改后的初始化函数为


static void vSpi595Init(void)
{
  DDRB|=(1<<PB3)|(1<<PB5))|(1<<PB2);    //设置io口状态,spi的mosi和sck  SS输出
  DDRD|=(1<<PD5);                   //设置595锁存引脚的方向


  SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);//使能SPI主机模式传送速度。
}


就是说当作为主机的时候,SS必须设置为输出,而芯片复位后该SS引脚默认为输入,所以必须程序中主动设置一下。再Datasheet里面好像也没有明确指出这一点。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户377235 2015-10-1 12:35

请问,若将SS设置为输出,而对方送给本机SS口的也是输出,要是本机的SS输出数据与对方送来的数据相反,则会烧坏端口,怎么解决这个问题呢?

用户395069 2007-9-1 00:10

我们所用的元件全是自己买的,不过要报啦!那不是队服哦,那是所有参加的学生都会发一件给你的啦,放心吧,只是还没有发给你罢了,到比赛的前一天肯定会发给你的,放心吧,加油哦!大家一起努力

用户53464 2007-9-1 00:02

你们老师真好啊~~
我们老师都不管我们了,老师就是给我们提供器件,整个暑假也没指导我们多少,你们还有队服~~好羡慕~~~
相关推荐阅读
用户1008175 2010-10-19 16:53
差不多一年没有写日志了,再重新拾起来吧
去年9月份到现在都没写过,期间也很少登陆,都不像个做技术的人了。...
用户1008175 2009-09-22 16:22
PCF8563使用不当产生的问题
PCF8563具有中断输出的功能,当设置的定时器减为0的时候,int管脚电平拉低。在一个应用中,我将int管脚连接到MSP430F1611的一个引脚中断上,期望int管脚不断地产生中断。运行起来后发现...
用户1008175 2009-08-25 09:54
74HC04使用不当导致XTR111电压输出产生问题
74HC04应用不当导致XTR111电压输出问题<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office"...
用户1008175 2009-06-17 15:18
4~20mA电流输出(电流环)应用笔记
最近查了一些4~20mA输出的电路。结合自己的实践做了一下总结。大部分内容来自网上(链接见参考部分)。感兴趣的可以下载看看。...
用户1008175 2009-02-20 23:46
小问题大智慧
1,100/101跟101/102相比,哪个数大?     能快速回答上来吗?口算比较难了,但是,可以根据特点做个大胆推断,分子比分母小1,是不是相当于比较1/2和2/3谁大哪?显然是后者大。我们再用...
我要评论
1
10
关闭 站长推荐上一条 /3 下一条