您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> Q群技术问题:BF533的SPI的中断
本帖共有1872个阅读者
发表帖子 发表投票 回复主题
Q群技术问题:BF533的SPI的中断
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5195
金钱:34806
积分:6378
注册时间:2011/6/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
Q群技术问题:BF533的SPI的中断
问题:谁用过533 spi 从的收中断 怎么发十几字节只进一次中断啊啊啊

我是OP...
等级:管理员 参考IP地址:*.*.*.*
2014/4/16 19:19:46
vim007(论坛新手)
vim007
头衔:社区公民
帮派:无帮无派
帖数:50
金钱:397
积分:53
注册时间:2013/9/3
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
这个问题是我问的 就是不能用dma  对方spi主发没长度信息 只是开头结尾是c0 所以只能用中断按每一个字节收

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/4/16 19:45:11
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
不用DMA.没办法那样做,因为FIFO只有16bit,,满了不读取,后面的数据就会丢失,所以只能一个字节进一次中断。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/4/17 1:37:14
vim007(论坛新手)
vim007
头衔:社区公民
帮派:无帮无派
帖数:50
金钱:397
积分:53
注册时间:2013/9/3
3信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
追问 我就想1字节一个中断啊 问题是 我主这边发十几个字节 从这边应该进十几次中断啊 怎么只进一次中断?

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/4/17 9:19:51
vim007(论坛新手)
vim007
头衔:社区公民
帮派:无帮无派
帖数:50
金钱:397
积分:53
注册时间:2013/9/3
4信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

EX_INTERRUPT_HANDLER(SPI_ISR)
{
int i=0;
  
    *pSIC_IMASK &= ~0x00002000;//spi 写0 屏蔽中断  
      
        while(!(*pSPI_STAT&0x20));
  

            buffer[i++]=*pSPI_RDBR;
              

      if(buffer[i]==0xc0)
           {
          // count++;
            }
            count++;
    

  *pSIC_IMASK |= 0x00002000;//spi 写1 使能spi中断
      
    }
    
}
中断函数里 count 和buffer为全局变量 然后在主函数打印每次+1


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/4/17 10:38:26
vim007(论坛新手)
vim007
头衔:社区公民
帮派:无帮无派
帖数:50
金钱:397
积分:53
注册时间:2013/9/3
5信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

void Init_SPI_Interrupts(void)
{

// configure interrupt
*pSIC_IAR0 = *pSIC_IAR0 & 0xffffffff | 0x00000000;
  *pSIC_IAR1 = *pSIC_IAR1 & 0xf00fffff | 0x00400000; //

    *pSIC_IAR2 = *pSIC_IAR2 & 0xffffffff | 0x00000000;
              
      register_handler(ik_ivg11, SPI_ISR); //dma5中断五 spi中断

  
     *pIMASK |=0x00001000;
    *pSIC_IMASK |= 0x00002000; // SPI interrupt enabled
  

}
中断初始化函数


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/4/17 10:40:05
vim007(论坛新手)
vim007
头衔:社区公民
帮派:无帮无派
帖数:50
金钱:397
积分:53
注册时间:2013/9/3
6信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

int main( void )
{
/* Begin adding your custom code here */

int flag=1;
    int i;
    unsigned char temp = 0;

Set_PLL(16,3);
Init_EBIU();

   Init_SPI_Interrupts();

  
  Drv_config_to_slave();
    Drv_SPI_enable();
    memset(buffer,0,1024);
       Drv_Config_slave_read();  
    

    while(flag)
    {
     printf("count is %x\n",count);
    
    
    }
    
    
return 0;
}

主函数    主设备发送十几字节  从设备为啥只进一次中断、????


这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/4/17 10:42:12
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
7信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
从机进入中断后,打一个断点,连续运行,然后主设备发送一个字节,看从机是否立刻进入中断。
如何可以,可能是从机进入中断后,错过了主机发送的字节导致。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/4/18 0:42:01
vim007(论坛新手)
vim007
头衔:社区公民
帮派:无帮无派
帖数:50
金钱:397
积分:53
注册时间:2013/9/3
8信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
追问。从设备如果错过了主机发送的字节 是主设备发的太快?。我用spi dma 从设备收是没问题的 。       如何解决? 代码方面请指教一下

这家伙很懒,什么也没有留下!
等级:论坛新手 参考IP地址:*.*.*.*
2014/4/18 7:32:23
尊贵身份标志
andy(论坛版主)
andy
头衔:社区公民
帮派:无帮无派
帖数:2287
金钱:11132
积分:2263
注册时间:2011/6/8
9信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
如果错过主机发送的数据,只能是从机收的太慢。当从机FIFO满了,要立刻收取,否则后面的数据就送不到FIFO了。
也可能是你在中断中屏蔽了中断引起的。
另外,SPI时序是否匹配,有时时序没有配好也会错过数据。
你先别用中断,直接用查询法接收数据,看会丢数据不。

这家伙很懒,什么也没有留下!
等级:论坛版主 参考IP地址:*.*.*.*
2014/4/19 17:52:15
17
1
1/2
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.159363 Call, 1 Queries, Processed in 0.031250 second(s),