6475|7

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM8SPI中断问题求助!! [复制链接]

请教一下以下问题:
        在调试SPI中断通信时,发现发送空中断标志一直为1,清不掉。
    想问一下如何同时使用SPI的发送中断和接收中断?
    SPI如何接收?
    中断标志位如何清除?在什么条件下会自动清除?

   谢谢!
此帖出自stm32/stm8论坛

最新回复

                                 芯片设计理念问题,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); }  详情 回复 发表于 2010-9-5 14:46
点赞 关注
 

回复
举报

62

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 我也遇到了这个问题,使能SPI_ICR 寄存器的TXIE位后,就持续地进中断,其他什么事情都干不了。如何清除中断标志?
此帖出自stm32/stm8论坛
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
另外,中文版的RM0016中最后一句话没法理解,但英文版没有这句
TXIE:Tx缓冲空中断
0:TXE中断禁止
1:TXE中断使能。当TXE标志置位时,允许产生中断请求
注意:为了正确地运行,TXIE为要同时设置为1
此帖出自stm32/stm8论坛
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 
这里是英文版的说明文字:
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.
此帖出自stm32/stm8论坛
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 中文版的翻译是依据英文第4版,正是因为那句话有问题,所以在英文第6版中已经把那句话删除了,而你看的英文版正是第6版。
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 谢谢版主这么快的回复。进入中断后我如何清除SPI的中断标志?我现在持续的进SPI发送结束中断,无法退出
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

7
 
                                 TXE是发送缓冲器空标志,只要在DR寄存器写入数据,就会清除这个标志。
此帖出自stm32/stm8论坛
 
 
 

回复

56

帖子

0

TA的资源

一粒金砂(初级)

8
 
芯片设计理念问题,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);
}
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表