硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3162|回复: 8
收起左侧

[有问必答] fsmc被中断打断的问题

[复制链接]

4

主题

12

回帖

24

积分

新手上路

积分
24
发表于 2019-7-2 13:52:47 | 显示全部楼层 |阅读模式
本帖最后由 赵静 于 2019-7-2 14:08 编辑

int fpga_wrn(uint16_t addr,uint16_t data)//uint16_t
{
  fpga_write(fpga_addr,addr);
  fpga_write(fpga_data,data);

  return 0;
}

#define fpga_write(offset,data)        *((volatile unsigned short int *)(FPGA_BASE + (offset << 19))) = data        

用STM32通过FSMC和FPGA通信,想问一下,在FSMC通信未完成时,如果被一个中断打断了,会有影响吗?



我没有说明白,被中断后,该中断里面也进行了FSMC的数据传输,那么这个中断完成之后,被打断的里面的数据会被更改吗?


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106901
QQ
发表于 2019-7-2 14:03:39 | 显示全部楼层
无影响。
回复

使用道具 举报

4

主题

12

回帖

24

积分

新手上路

积分
24
 楼主| 发表于 2019-7-2 14:07:50 | 显示全部楼层

我没有说明白,被中断后,该中断里面也进行了FSMC的数据传输,那么这个中断完成之后,被打断的里面的数据会被更改吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106901
QQ
发表于 2019-7-2 14:57:28 | 显示全部楼层
赵静 发表于 2019-7-2 14:07
我没有说明白,被中断后,该中断里面也进行了FSMC的数据传输,那么这个中断完成之后,被打断的里面的数据 ...

操作FSMC的不同地址无影响,同一个地址有影响,就跟你一个变量,中断里面和中断外面都操作是一个道理
回复

使用道具 举报

4

主题

6

回帖

18

积分

新手上路

积分
18
发表于 2022-2-12 15:12:33 | 显示全部楼层
eric2013 发表于 2019-7-2 14:57
操作FSMC的不同地址无影响,同一个地址有影响,就跟你一个变量,中断里面和中断外面都操作是一个道理

对于这个有点疑问?通过FSMC往一个地址写数据时,是要执行时序的。也就是需要一定的时间。疑问1:比如程序操作连续向地址A和地址B写入数据,会不会存在向A写数据的时序还没有执行完,然后执行写B地址导致时序阻塞出问题?
疑问2:正在向地址A写数据时,时序还没有执行完。有一个中断产生,中断里面也有通过FSMC操作其他地址写入数据时会不会有冲突?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106901
QQ
发表于 2022-2-12 15:46:48 | 显示全部楼层
村头柯师傅 发表于 2022-2-12 15:12
对于这个有点疑问?通过FSMC往一个地址写数据时,是要执行时序的。也就是需要一定的时间。疑问1:比如程 ...

这个要看你操作什么外设了。

FSMC操作SRAM这种一次性写入的,随意。而NOR,NAND这种的不行。以NAND为例,是串行的,先发地址,然后发数据,这种的被打断操作别的是不行的。
回复

使用道具 举报

4

主题

6

回帖

18

积分

新手上路

积分
18
发表于 2022-2-19 10:42:36 | 显示全部楼层
eric2013 发表于 2022-2-12 15:46
这个要看你操作什么外设了。

FSMC操作SRAM这种一次性写入的,随意。而NOR,NAND这种的不行。以NAND为例 ...

就算是SRAM也有时序吧也需要时间几十ns。还是说一条指令执行时间肯定比这个时间长?也就是SRAM操作是原子的?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106901
QQ
发表于 2022-2-19 14:34:11 | 显示全部楼层
村头柯师傅 发表于 2022-2-19 10:42
就算是SRAM也有时序吧也需要时间几十ns。还是说一条指令执行时间肯定比这个时间长?也就是SRAM操作是原子 ...

这种的无影响,你可以测试下。总线时的SRAM时序,必须这次写入完毕了,才会启动下次,无法时序进行中抢占的。原子操作是指的对同一个地址的不同任务或中断操作。这种涉及到原子性。

这就跟你操作内部SRAM是一样的,内部SRAM也是挂在总线上的。不同任务随意操作,除非你操作的是同一个地址的变量,这种的会有原子问题。
回复

使用道具 举报

210

主题

1044

回帖

1684

积分

至尊会员

More we do, more we can do.

积分
1684
发表于 2022-2-21 08:54:35 | 显示全部楼层
本帖最后由 emwin 于 2022-2-21 08:56 编辑

看代码一次操作涉及2个步骤(地址和数据),中断里再读写应该有问题(大概率,可能有特别的没考虑全),接口并发最好考虑清楚怎么解决。
(备注:没想到是个老帖,草率了。)
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 10:30 , Processed in 0.305805 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表