Кто любит RISC в жизни, заходим, не стесняемся.
Пт май 24, 2019 14:08:38
Доброго всем времени суток!
Кто может подсказать, где я что не понимаю? Задача такая: есть камень stm32f745, ПО не использует ОС. Кэширование данных включено. Мне необходимо закрыть область буфера в ОЗУ от кэширования, дабы избежать недопониманий с ДМА. Скопировал решение с Куба, но все равно сразу влетаю в HardFault ((
- Код:
MPU_Region_InitTypeDef MPU_InitStruct = {0};
// Disables the MPU
HAL_MPU_Disable();
// Initializes and configures the Region and the memory to be protected
MPU_InitStruct.Enable = MPU_REGION_ENABLE;
MPU_InitStruct.Number = MPU_REGION_NUMBER0;
MPU_InitStruct.BaseAddress = (uint32_t) &dh_buffer;
MPU_InitStruct.Size = MPU_REGION_SIZE_256B;
MPU_InitStruct.SubRegionDisable = 0x0;
MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE;
MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE;
MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
HAL_MPU_ConfigRegion(&MPU_InitStruct);
/* Enables the MPU */
HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
http://prntscr.com/nst006(нельзя просто картинку вставить?)
Пт май 24, 2019 14:36:27
А Вы Ератту читали, может там сразу об этом сказано. А у Вас тип uchar не смущает? для 32 бит процессора? И вот это меня смущает MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE; Как согласуется с отсутствием кеширования ?
Пт май 24, 2019 14:48:50
Еррату не догадался почитать, спасибо! Сейчас посмотрю
uchar - это прикол Кейла. объекта нет, он ему такой тип присваивает. То такое
MPU_INSTRUCTION_ACCESS_DISABLE или ENABLE на кэширование не влияет, но что-то надо туда поставить. Пробовал оба варианта - результат одинаков (
------
в эррате про MPU ничего нет
Пт май 24, 2019 15:11:28
У меня та-же фигня 8 раз прочитал так и не заработало. Вот такие они современные процики. У меня не получается сгенерировать прерывание от АЦП, хотя запуск АЦП вроде по событию заставил работать, процик TMS320F280xx.
Сб май 25, 2019 14:46:58
Я понял. Нельзя управлять MPU при включенном кэше
Вс май 26, 2019 18:47:37
Без ОС и проблемы с кэшированием?
Мне кажется, в таком случае лучше использовать кольцевой буфер - пока заполняется одна половина, вторая будет гарантировано свободной и синхронизированой.
Так же, попробуйте найти из-за чего вылетает исключение.
Либо как-то иначе решать задачу.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.