搜索
bottom↓
回复: 4

用CUBEMX生成的FREERTOS工程加入了一个中断就没法运行了,

[复制链接]
(33189033)

出0入0汤圆

发表于 2020-3-29 22:41:26 | 显示全部楼层 |阅读模式
本帖最后由 chinaboy25 于 2020-3-29 22:43 编辑

用CUBEMX生成的FREERTOS工程加入了一个SPI2中断就没法运行了,不知怎么回事,请教一下,SPI2中断一直运行,最开始是1M速率,现在降到最低256K的速率运行,CPU时钟72M,刚认为是频繁进入中断引起的,现在测试程序中断就一句话,还是不能运行,应该不是资源问题,不知怎么回事请大虾赐教;工程如附件



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(32754775)

出0入0汤圆

发表于 2020-4-3 23:19:04 | 显示全部楼层
你那样写一句话还是会频繁进中断啊,收一个数马上又发一个,然后中断直接返回了,自动生成的函数没有运行,收到的数据没有读取,标志位也没有清除。
另外FreeRTOS已经用了SysTick做为时基,建议SYS配置里的timebase就不要用SysTick了。
还有FreeRTOS的TOTAL_HEAP_SIZE默认是3072,建议改大点试试,比如16384。
(32714684)

出0入0汤圆

 楼主| 发表于 2020-4-4 10:27:15 | 显示全部楼层
本帖最后由 chinaboy25 于 2020-4-4 10:30 编辑
liubaoning1986 发表于 2020-4-3 23:19
你那样写一句话还是会频繁进中断啊,收一个数马上又发一个,然后中断直接返回了,自动生成的函数没有运行, ...


清中断就是写寄存器,里面的哪句话就是清中断,手册上是说写数据寄存器就能清中断,我在中断里加了一个翻转IO的测试,输出是9-10k的方波,时钟是72M,这样算的话可以报7K时钟,足够任务切换和中断时间了;
时基这个测试工程没忘了改的,原工程是TIM4;改过来结果也是一样的;
(33189032)

出0入0汤圆

发表于 2020-3-29 22:41:27 | 显示全部楼层
这个逻辑有问题,写数据寄存器就会向外发送数据, 在中断中写一下数据寄存器,主机就会在时钟线上产生一次时钟,不可能只是要清一下中断标志就必须要产生一次时钟发一次数据。
手册上是这么写的:clearing of the RXNE bit is performed by reading the SPI_DR register. 注意是读,不是写。
这些操作在CubeMX自动生成的中断处理代码HAL_SPI_IRQHandler中都已经自动处理了,而在你的代码中在运行这个函数之前就return了,偏偏没有运行这个函数。
最后,你的配置中SPI选择了Transmit only master,但是中断却开了RXNE,接收非空中断,感觉即使进中断了也不会进的是RXNE,因为SPI根本没有开启接收数据的功能,可能是因为err进的中断吧,因为你还开了SPI_IT_ERR。
(32667758)

出0入0汤圆

 楼主| 发表于 2020-4-4 23:29:21 | 显示全部楼层
本帖最后由 chinaboy25 于 2020-4-4 23:37 编辑

加了一句读寄存器后正常了;好奇怪我开的只是仅传送模式,产生了RXNE中断,需要读寄存器清除,可能是开了中断的原因,还有一个奇怪的是输出9-10K的翻转电平,也不知怎么解释

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2021-4-18 01:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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