您好!
我注意 到、当尝试从外部64MB SDRAM (Alliance AS4C32M16SM)读取32位数据时、在某些情况下会触发中止异常。
当我尝试从 SDRAM 中读取4字节数据时、基于非4字节已排列的地址、在整个内存结束时从地址0x80800000处读取该错误。
如果我在地址高达 0x807FFFFC 的存储器中读取、我可以读取32位数据、而不会出现任何问题。 但是、从地址 0x80800000开始、我只能在4字节地址间隔内读取32位数据。 如果我尝试读取位置0x80800000、它读数正常、但如果我尝试0x80800001、 0x8080000002和 0x8080000003、则会触发中止异常。 对0x80800004的读取访问是正常的、依此类推。 这种行为在存储器的末尾重复出现。
执行以下代码可以重现例外情况(RM 在芯片修订版本 D 上)
--------------------------------------------------
uint32_t * SDRAM_ptr; uint32_t var_test; SDRAM_ptr =(uint32_t *) 0x8000000; var_test =* SDRAM_ptr;// read OK */ SDRAM_ptr =(uint32_t *) 0x8000000001; var_test =* SDRAM_ptr **读取 OK *;var_tr = *(uint_t_tr = 0x800002 *)*(uint_t_tr = 8) * SDRAM = uint_tr *(uint_t_tr = 8) /*读取正常*/ SDRAM_PTR =(uint32_t *) 0x800004; var_test =* SDRAM_PTR;/*读取正常*/ SDRAM_PTR =(uint32_t *) 0x80800000; var_test =* ptr_var;//读取正常*SDRAM_PTR =(uint32_t *) 0x80800000; * SDRAM = * SDRAM =* 800t_tr_exception;* /*触发中止异常*/ SDRAM_PTR =(uint32_t *) 0x80800003; var_test =* SDRAM_PTR;//触发中止异常*/ SDRAM_PTR =(uint32_t *) 0x80800004; var_test =* SDRAM_PTR;//读取 OK */
--------------------------------------------------
是否有人能指出我如何解决这个问题的方向?
提前感谢
Nton Armstrong

