Advertisement
Guest User

STM32F429 FMC SDRAM

a guest
Sep 30th, 2015
254
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.17 KB | None | 0 0
  1. Это работает хорошо:
  2.     uint16_t read16, write16;
  3.     write16 = 0xB16C;
  4.  
  5. //Write to SDRAM
  6.     *((uint16_t *)0xC0000002) = write16;
  7.     read16 = *((uint16_t *)0xC0000002);
  8.  
  9. Адреса заданного банка начинаются с 0xC0000000
  10.  
  11. А вот это - уже нет:
  12.     for (i = 0x00; i < 0x7F; i++)
  13.     {
  14.         *((__IO uint16_t *)0xC0000000 + i*2) = (uint16_t)i;
  15.     }
  16.    
  17.     read16 = 0;
  18.    
  19.     for (i = 0x00; i < 0x7F; i++)
  20.     {
  21.         read16 = *(__IO uint16_t *)(0xC0000000 + i*2);
  22.         if (read16 != (uint16_t)i)
  23.         {
  24.             //Обработчик ошибки
  25.         }
  26.     }
  27.  
  28. Если делать так:
  29.     uint16_t testarr[16] = {0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF};
  30.     uint16_t readarr[16];
  31.     uint16_t *testvar_ptr = (uint16_t *)0xC0000000 + 0x100;
  32.  
  33.     memcpy(testvar_ptr,testarr,sizeof(testarr));
  34.     memcpy(readarr,testvar_ptr,sizeof(readarr));
  35.  
  36. То тоже случается обсерушен. Прерывания в это время я выключаю (в errata сказано, что разрешённые прерывания могут портить чтение/запись в память на некоторых ревизиях процессора).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement