ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
25 ноября
432532
il-2 (13.08.2013 11:17, просмотров: 1065)
"Realtime Interrupts" support for TNKernel CortexM3 port По существу - в TNKernel используется глобальное разрешение/запрет прерываний (PRIMASK) в критических секциях (tn_disable_interrupt/tn_enable_interrupt) и при переключении контекста. У меня в связи с этим были проблемы с прерываниями, реакция на которые должна быть мгновенной (6мкс при тактовой 48МГц уже проблемно при использовании TNKernel). Выкладываю пропатченый фаил (для ARM RealView) с решением данной проблемы. При задании в проекте константы DISABLED_PRIORITY_GROUP (только для данного ассемблерного файла) будет компилироваться вариант с поддержкой Realtime Interrupts, если константа не задана, то все будет "по старому". Для запрета/разрешения прерываний вместо регистра PRIMASK используется регистр BASEPRI. При BASEPRI = 0 прерывания разрешены, при BASEPRI = DISABLED_PRIORITY_GROUP остаются разрешенными прерывания, входящие в группу с более высоким приоритетом чем DISABLED_PRIORITY_GROUP. При использовании PRIORITY GROUPING = 5 (2бита на группу и 2бита на подгруппу) и DISABLED_PRIORITY_GROUP = 0x40 мы получаем группу 0. Прерывания с данной группой будут всегда разрешены. Ограничение - в данных прерываниях нельзя использовать функции TNKernel. PS: Значение в BASEPRI оказывает влияние только на группу приоритетов, подгруппы не учитываются!!! Пока у меня данный вариант работает нормально. Приглашаю всех желающих на тестирование и портирование