打印
[STM8]

STM8 SPI中断问题求助!!

[复制链接]
6836|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lxm8happy|  楼主 | 2009-10-23 09:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教一下以下问题:
        在调试SPI中断通信时,发现发送空中断标志一直为1,清不掉。
    想问一下如何同时使用SPI的发送中断和接收中断?
    SPI如何接收?
    中断标志位如何清除?在什么条件下会自动清除?

   谢谢!
沙发
superzhang| | 2010-9-2 11:23 | 只看该作者
我也遇到了这个问题,使能SPI_ICR 寄存器的TXIE位后,就持续地进中断,其他什么事情都干不了。如何清除中断标志?

使用特权

评论回复
板凳
superzhang| | 2010-9-2 11:28 | 只看该作者
另外,中文版的RM0016中最后一句话没法理解,但英文版没有这句
TXIE:Tx缓冲空中断
0:TXE中断禁止
1:TXE中断使能。当TXE标志置位时,允许产生中断请求
注意:为了正确地运行,TXIE为要同时设置为1

使用特权

评论回复
地板
superzhang| | 2010-9-2 11:30 | 只看该作者
这里是英文版的说明文字:
Bit 7 TXIE: Tx buffer empty interrupt enable
0: TXE interrupt masked
1: TXE interrupt not masked. This allows a interrupt request to be generated when the TXE flag is
set.

使用特权

评论回复
5
香水城| | 2010-9-2 11:40 | 只看该作者
中文版的翻译是依据英文第4版,正是因为那句话有问题,所以在英文第6版中已经把那句话删除了,而你看的英文版正是第6版。

使用特权

评论回复
6
superzhang| | 2010-9-2 11:51 | 只看该作者
谢谢香水城这么快的回复。进入中断后我如何清除SPI的中断标志?我现在持续的进SPI发送结束中断,无法退出

使用特权

评论回复
7
香水城| | 2010-9-2 12:29 | 只看该作者
TXE是发送缓冲器空标志,只要在DR寄存器写入数据,就会清除这个标志。

使用特权

评论回复
8
有意思| | 2010-9-5 14:46 | 只看该作者
芯片设计理念问题,SPI的发送空中断,和其他理念不太一样,一般来说,DR冲有到无产生一个中断,而STM的是只要空就是1,产生中断,我也是研究了半天才弄明白??
void SPI_InterruptISR(void)
{
    //u8 temp;
    P_SPIfdstr fd=&exspifd;

    if (SPI->SR & SPI_FLAG_RXNE) {
        if (!fd->full) {
            fd->Rxbuff[fd->front++] = (u8)SPI->DR;
            fd->front %= MAXSPIRXDBUFFSIZE;
            if (fd->front == fd->rear)
                fd->full = 1;
        }
    }

    if (SPI->SR & SPI_FLAG_TXE) {
        if (fd->full || (fd->write != fd->read)) {
            SPI->DR = fd->Txbuff[fd->read++];
            fd->read %= MAXSPITXDBUFFSIZE;
            fd->full = 0;
        } else {
            SPI_ITConfig(SPI_IT_TXE, DISABLE);//缓冲区数据发送完成后,关闭中断,再次发送时打开
        }
    }        
}

void spi_send_buf(u8 *buf, u8 len)
{
    u8 i=0;
    P_SPIfdstr fd=&exspifd;

    for (i=0; i<len; i++) {
        fd->Txbuff[fd->write++] = *buf++;
        fd->write %= MAXSPITXDBUFFSIZE;
    }

    //SPI->DR = fd->Txbuff[fd->read];
    SPI_ITConfig(SPI_IT_TXE, ENABLE);
}

使用特权

评论回复
9
kenmy| | 2013-12-25 16:09 | 只看该作者
有意思 发表于 2010-9-5 14:46
芯片设计理念问题,SPI的发送空中断,和其他理念不太一样,一般来说,DR冲有到无产生一个中断,而STM的是只 ...

谢谢楼主的提示,SPI中断正常了

使用特权

评论回复
10
zhaor| | 2014-1-3 16:14 | 只看该作者
有意思版主,能提供以下你的这个完整的程序吗?

使用特权

评论回复
11
thanks

使用特权

评论回复
12
huangcunxiake| | 2017-1-4 20:05 | 只看该作者
有不少单片机的数据收发器都是接收器的接收中断,在你读走了数据后自动清零。

使用特权

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

本版积分规则

5

主题

6

帖子

0

粉丝