初级会员
- 积分
- 170
- 金钱
- 170
- 注册时间
- 2019-2-18
- 在线时间
- 42 小时
|
10金钱
最近调试FREERTOS的时候出现挂死现象,定位很久没有解决,希望大家帮忙看看。
主要接口:
STM32F429,通过LTDC控制RGB LCD,通过FMC bank5连接SDRAM作为LCD的缓存,通过FMC的PSRAM接口访问外部存储器。另外在USB上实现了虚拟串口。
任务描述:
任务1:LED闪烁;
任务2:检测USB是否收到命令。具体方法是检测USB命令标志是否为1,如果有的话则通过PSRAM接口通过memcpy读取外部存储器2048个半字,然后通过USB发给上位机。
中断描述:
USB中断:将收到的2字节命令存入buffer,然后将USB命令标准置1,退出中断。
问题描述:
读取PSRAM的时候系统挂死,现象是上位机没有收到数据,LED灯停止闪烁。
此时通过波形可以看到存储器没有使能wait信号,并且STM32没有读够2048个半字,说明是STM32停止读数而不是存储器异常;
此时测量SDRAM的SDNE信号固定是高电平说明没有SDRAM访问。
但是如果单独测试LCD+SDRAM或通过USB读取PSRAM上的数据都没有问题。
为了防止读取PSRAM时被其他任务打断,memcpy被设置为临界区如下,但是感觉没有保护住。
taskENTER_CRITICAL();
memcpy(rd_buf, (uint16_t *)DAT_ADDR, rd_bytes);
taskEXIT_CRITICAL();
个人感觉是因为FMC上同时挂载SDRAM和PSRAM,在运行过程中二者出现总线竞争引起的。但是LTDC使用SDRAM缓存完全是后台运行的,CPU只是初始化配置一下,运行起来后就没有办法暂停,让PSRAM接口先运行。
希望大家帮忙分析一下,看看设计有什么缺陷或者有什么定位思路,谢谢!
|
|