新手上路
积分 47
金钱 47
注册时间 2017-10-7
在线时间 7 小时
1 金钱
开发环境:VS2017+VisualGDB+arm-eabi-gcc 6.2。
SRAM初始化,使用原子的代码。
SRAM读写代码:
[mw_shl_code=c,true]void FSMC_SRAM_WriteBuffer(void* pBuffer, u32 WriteAddr, u32 n) {
u8* pbuf = (u8*)pBuffer;
for (; n != 0; n--) {
*(vu8*)(BANK1_SRAM3_ADDR + WriteAddr) = *pbuf;
++WriteAddr;
++pbuf;
}
}[/mw_shl_code]
[mw_shl_code=c,true]void FSMC_SRAM_ReadBuffer(void* pBuffer, u32 ReadAddr, u32 n) {
u8* pbuf = (u8*)pBuffer;
for (; n != 0; n--) {
*pbuf = *(vu8*)(BANK1_SRAM3_ADDR + ReadAddr);
++ReadAddr;
++pbuf;
}
}[/mw_shl_code]
验证代码:
[mw_shl_code=c,true]#define BANK1_SRAM3_SIZE ((u32)(1024*1024)) // size in bytes
#define TEST_BUFF_SIZE 256
u8 g_sram_test_buf[TEST_BUFF_SIZE];
u32 sram_rw_test() {
u32 addr = 0;
for (int i = 0; i < TEST_BUFF_SIZE; i++)
g_sram_test_buf = i;
while ( addr < BANK1_SRAM3_SIZE ) {
sram.write(g_sram_test_buf, addr, TEST_BUFF_SIZE);
addr += TEST_BUFF_SIZE;
}
addr = 0;
while ( addr < BANK1_SRAM3_SIZE ) {
memset(g_sram_test_buf, 0, TEST_BUFF_SIZE);
sram.read(g_sram_test_buf, addr, TEST_BUFF_SIZE);
for ( int i = 0; i < TEST_BUFF_SIZE; i++ ) {
if (g_sram_test_buf != i) return addr;
}
//tty_write_large_buff_sync(&tty2, g_sram_test_buf, sizeof(g_sram_test_buf));
//tty2.write(g_sram_test_buf, sizeof(g_sram_test_buf));
addr += TEST_BUFF_SIZE;
}
return addr;
}
#undef TEST_BUFF_SIZE[/mw_shl_code]
main中调用如下:
[mw_shl_code=c,true]tty2.printf("start to test sram\n");
u32 sram_test_result = sram_rw_test();
tty2.printf("sram test result: %u\r\n", sram_test_result);[/mw_shl_code]
问题描述如附件图片所示。
我来回答