打印
[AVR单片机]

使用XMEGA C系列单片机的SPI时IF一直不置位

[复制链接]
1214|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kiravsl|  楼主 | 2014-9-18 15:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,小弟在使用XMEGA C系列单片机的SPI时,STATUS寄存器中的IF一直不置位(SPI工作在主模式),串行传输一直未完成,导致下面代码中的while循环一直出不来。
通过调试,工作模式、片选信号都没问题。
不知道有什么原因会导致SPI STATUS寄存器中的IF一直不置位,有哪位大侠遇到过,帮帮忙解答一下。困扰几天了,多谢!
附上代码:

void spid_init()
{
  PORTD.DIR |= ((1<<4)|(1<<5)|(1<<7));  //4-ss,5-mosi, 7-sck
  PORTD.DIR &= ~(1<<6);//6-miso
  PORTD.OUT |= ((1<<4)|(1<<5)|(1<<7)); //all '1'
  
  SPID.CTRL = ( SPI_ENABLE_bm + SPI_MASTER_bm //MSB first in master
               //+ SPI_MODE1_bm
               //  +SPI_MODE0_bm
                   );//Mod0
  SPID.INTCTRL = 0;//(SPI_INTLVL1_bm + SPI_INTLVL0_bm ); //高级别中断
  SPID.STATUS = SPID.STATUS;
}

unsigned char spid_txbyte(unsigned char ch)
{
  SPID.DATA = ch;         
  while(!(SPID.STATUS&SPI_IF_bm));   
  return ( ch );
}

unsigned char spid_rxbyte(unsigned char ch)
{
  SPID.DATA = ch;     
while(!(SPID.STATUS&SPI_IF_bm));                                                     
  return (SPID.DATA);
}

相关帖子

沙发
airwill| | 2014-9-24 06:43 | 只看该作者
先测一下,spi 引脚有没有波形出来,来判断要发送的时候,spi 的设置有没有问题

使用特权

评论回复
板凳
kiravsl|  楼主 | 2014-9-25 16:17 | 只看该作者
多谢版主回答。是程序的问题,上面的程序有阻塞的风险,当使用SPI发送未完成时来了中断,中断处理函数中又马上使用SPI,就阻塞了。SPI传输换成中断方式处理就好了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝