Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Это работает хорошо:
- uint16_t read16, write16;
- write16 = 0xB16C;
- //Write to SDRAM
- *((uint16_t *)0xC0000002) = write16;
- read16 = *((uint16_t *)0xC0000002);
- Адреса заданного банка начинаются с 0xC0000000
- А вот это - уже нет:
- for (i = 0x00; i < 0x7F; i++)
- {
- *((__IO uint16_t *)0xC0000000 + i*2) = (uint16_t)i;
- }
- read16 = 0;
- for (i = 0x00; i < 0x7F; i++)
- {
- read16 = *(__IO uint16_t *)(0xC0000000 + i*2);
- if (read16 != (uint16_t)i)
- {
- //Обработчик ошибки
- }
- }
- Если делать так:
- uint16_t testarr[16] = {0,1,2,3,4,5,6,7,8,9,0xA,0xB,0xC,0xD,0xE,0xF};
- uint16_t readarr[16];
- uint16_t *testvar_ptr = (uint16_t *)0xC0000000 + 0x100;
- memcpy(testvar_ptr,testarr,sizeof(testarr));
- memcpy(readarr,testvar_ptr,sizeof(readarr));
- То тоже случается обсерушен. Прерывания в это время я выключаю (в errata сказано, что разрешённые прерывания могут портить чтение/запись в память на некоторых ревизиях процессора).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement