第一步,打开SDRAM例程,SDRAM的起始地址为: 0xD000000, 分配RAM1大小为4M字节。
编译SDRAM例程,会生成一个.sct文件。
图1 使用Keil存储器分配图设置SDRAM的起始位置和大小
第二步, 取消选择Use Memory Layout from Target Dialog,手动编辑FMC_SDRAM.sct文件
图2 不再使用Keil的存储器设置对话框
图3 .sct文件修改前后对比
第三步,SDRAM变量声明
/* ADDRESS: 0x0D0000000 SIZE: 0x400000 */
#pragma arm section rwdata = "SD_RAM1", zidata = "SD_RAM1"
__IO uint8_t USART1_Rx_Buffer[0x10000]; // 0x10000: 64K
__IO uint16_t USART1_Rx_Count;
#pragma arm section rwdata
/* ADDRESS: 0xD0400000 SIZE: 0x400000 */
__IO uint8_t USART1_Rx_Buffer2[0x10000] __attribute__ ((at(0xD0400000))); // 0x10000: 64K
第四步,对示例代码进行硬件仿真测试,在观察串口查看变量的位置和内容。
for (counter = 0x00; counter < IS42S16400J_SIZE; counter++)
{
*(__IO uint8_t*) (SDRAM_BANK_ADDR + counter) = (uint8_t)0x0;
}
for(counter = 0; counter < 0x10000; ++counter){
USART1_Rx_Buffer[counter] = 0x03;
}
for (counter = 0x00; counter < IS42S16400J_SIZE; counter++)
{
*(__IO uint8_t*) (SDRAM_BANK_ADDR + 0x400000 + counter) = (uint8_t)0x0;
}
for(counter = 0; counter < 0x10000; ++counter){
USART1_Rx_Buffer2[counter] = 0x02;
}
|
|