硬汉嵌入式论坛

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

[emWin] stemwin使用外部SDRAM执行gui_init时进入硬件异常

[复制链接]

13

主题

40

回帖

79

积分

初级会员

积分
79
发表于 2019-5-10 08:43:09 | 显示全部楼层 |阅读模式
使用SDRAM时执行完GUI_X_Config函数,在跳出该函数时,进入硬件异常HardFault_Handler,使用内部ram没有问题;外部sDram单独使用时没有问题,下面是部分代码,请高手指点:

#define EX_SRAM   1/*1 used extern sram, 0 used internal sram */

#if EX_SRAM
#define GUI_NUMBYTES  (1024*1024*2)
#else
#define GUI_NUMBYTES  (140*1024)
#endif

/* Define the average block size */
#define GUI_BLOCKSIZE 5000//0x80


/*SDRAM起始地址 存储空间2的起始地址*/
#define SDRAM_BANK_ADDR ((unsigned int)0xD0000000)
#define EXT_SDRAM_SIZE                (8 * 1024 * 1024)

#define EXT_SDRAM_ADDR SDRAM_BANK_ADDR

/* LCD显存, 图层1, 分配2M字节 */
#define SDRAM_LCD_BUF1                 SDRAM_BANK_ADDR

/* LCD显存, 图层2, 分配2M字节 */
#define SDRAM_LCD_BUF2           (SDRAM_LCD_BUF1 + 2 * 1024 * 1024)

/* emWin动态内存首地址         emWin动态内存使用,除了显存使用的8MB,后8MB给动态内存使用 */
#define SDRAM_APP_BUF     (SDRAM_LCD_BUF2 + 2 * 1024 * 1024)



void GUI_X_Config(void)
{
#if EX_SRAM
        //static U32 *aMemory;
        //aMemory = (U32 *)SDRAM_APP_BUF;
        static U32 aMemory[GUI_NUMBYTES / 4] __attribute__((at(SDRAM_APP_BUF)));
        /*  Assign memory to emWin */
        GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
        GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);
#else       
        /* 32 bit aligned memory area */
        static U32 aMemory[GUI_NUMBYTES / 4];
       
        /*  Assign memory to emWin */
        GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
        GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);
#endif
}


下面时SDram的测试程序(可以写入也可读取):
#define testValue ((unsigned short *)0xD0000000)
void sdram_read_write_test(void)
{
        unsigned short  i = 0;
       
        for(i = 0; i< 1000; i++)
        {
               
                testValue[i] = i;
        }
        memcpy(testbuff, (unsigned int *)testValue, sizeof(testbuff));
        memset(testValue, 0, 0x800000);
        i = 0;
       
}


请高手指点迷津。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115778
QQ
发表于 2019-5-10 13:08:34 | 显示全部楼层
任意下载这个帖子里面一个emWin例子

http://www.armbbs.cn/forum.php?m ... &extra=page%3D1

SDRAM驱动文件里面有个test函数,你用那个函数测试下是否正常。
回复

使用道具 举报

13

主题

40

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2019-5-13 13:43:27 | 显示全部楼层
拷贝一段数据到指定的SDRAM中,第一个字节一直为0,其他的都正确,好像第一个字节不能用一样,更换地址后任然会出现这个问题,例如aMemory = (unsigned int *)(0xD0400000);那个aMemory[0]这个地址不能使用,不知道这个是什么问题
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-17 22:14 , Processed in 0.221595 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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