Yang.Lian
发表于 2024-5-17 14:37:35
本帖最后由 Yang.Lian 于 2024-5-17 16:17 编辑
在 STC32G12K128 上 使用 COSYII 2.2.1 时候 4/5 中断都可以正常中断
但是 DMA_ADC_VECTOR (48)中断,却中断不了。
用 DMA_ADC_STA |= 0x01,又可以正常进入对应的中断。
如果不使用 COSYII 操作系统,直接 main 里用同样的代码初始化又可以正常中断。
好奇怪,求解
进一步测试发现,这个跟时钟的配置有关系
如果 SYSCFG_SYSCLK 配置成 11059200
且SYSCFG_SYSTICKCYCLE 配置成 1250 就会导致 DMA_ADC_VECTOR (48)中断 进不去
如果 SYSCFG_SYSCLK 配置成 12000000
且SYSCFG_SYSTICKCYCLE 配置成 1000 就没有这个问题 DMA_ADC_VECTOR (48)中断 可以正常进
我晕了个大了,我之前问过 11059200 和 1250 的时钟配置有没有隐患,楼主回复说没有,我就没有往这个事情上想,没想到还真有问题
不知道这算不算一个bug,还是说我不应该用 11059200/1250 的搭配?
CosyOS
发表于 2024-5-17 16:20:51
Yang.Lian 发表于 2024-5-17 14:37
在 STC32G12K128 上 使用 COSYII 2.2.1 时候 4/5 中断都可以正常中断
但是 DMA_ADC_VECTOR (48)中断,却 ...
你下载最新的 CosyOS-II-STC32G-工程模板 试一下,在顶楼有提供下载。
Yang.Lian
发表于 2024-5-17 16:56:03
本帖最后由 Yang.Lian 于 2024-5-17 17:00 编辑
CosyOS 发表于 2024-5-17 16:20
你下载最新的 CosyOS-II-STC32G-工程模板 试一下,在顶楼有提供下载。
非常乐意效劳
两个版本都测试了,表现是一模一样
本来想看看是什么原因,看了一下调度的代码,劝退了,楼主上,我下,我可以帮忙测试
我建了两个分支,新旧版本都有
CosyOS
发表于 2024-5-17 18:09:15
Yang.Lian 发表于 2024-5-17 14:37
在 STC32G12K128 上 使用 COSYII 2.2.1 时候 4/5 中断都可以正常中断
但是 DMA_ADC_VECTOR (48)中断,却 ...
从理论上来说,除了误差之外,我确实没想到会有什么隐患。
CosyOS 的 系统滴答周期 和 任务调度 等,怎么会影响到 DMA 中断?
这个问题我也不理解,想不到是什么原因。
Yang.Lian
发表于 2024-5-17 18:16:17
本帖最后由 Yang.Lian 于 2024-5-17 18:21 编辑
CosyOS 发表于 2024-5-17 18:09
从理论上来说,除了误差之外,我确实没想到会有什么隐患。
CosyOS 的 系统滴答周期 和 任务调度 等,怎么 ...
真的好奇怪啊
我现在收回我说的,即便我用12000000/1000 还是有问题
上一个帖子的时候,我只在 12000000/1000 和 11059200/1000 之间改动,确实可以表现出 ADC DMA 中断能进和不能进的问题
现在我把DEBUG调试输出到 UART1,也确实可以在串口看到 CosyOS-II 任务管理器(彩蛋新版本是中文,旧版本是英文)
此时 ADC DMA又进不了
CosyOS
发表于 2024-5-17 18:18:02
Yang.Lian 发表于 2024-5-17 16:56
非常乐意效劳
两个版本都测试了,表现是一模一样
我看你可以配置为 11059200 和 1000 ,延时误差很小的,
测试一下,DMA中断会不会正常。
CosyOS
发表于 2024-5-17 18:20:53
本帖最后由 CosyOS 于 2024-5-17 18:22 编辑
Yang.Lian 发表于 2024-5-17 18:16
真的好奇怪啊
我现在收回我说的,即便我用12000000/1000 还是有问题
我建议你把相关代码发给我,我来查找原因。
或者你把相关的地方,都好好查一遍。
CosyOS
发表于 2024-5-17 18:27:16
Yang.Lian 发表于 2024-5-17 16:56
非常乐意效劳
两个版本都测试了,表现是一模一样
屏蔽警告:
删除 285~290 行即可。
Yang.Lian
发表于 2024-5-17 18:32:17
上代码
CosyOS
发表于 2024-5-17 18:34:16
Yang.Lian 发表于 2024-5-17 18:16
真的好奇怪啊
我现在收回我说的,即便我用12000000/1000 还是有问题
测试程序中,
STC32G_UART_Isr.c ,对 UART2中断 进行了条件编译;
STC32G_Exit_Isr.c ,屏蔽了 INT0中断;
STC32G_Timer_Isr.c ,屏蔽了 TM1 和 TM3 中断。
其它中断,原封未动。