Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Использовать вместо Systic другой таймер
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > FreeRTOS
MiklPolikov
Всем привет !

У меня системная частота всё время меняется для экономии энергии, поэтому хочу использовать в качестве systic прерывание от таймера, привязанного к внешнему кварцу 32768 . Если кто-нибудь делал, прокомментируйте ход мыслей . Всё что я написал, необходимо и достаточно ? Ничего не забыл ?

1) В freeRTOSconfig.h нужно заменить дефайн
#define xPortSysTickHandler SysTick_Handler
на нужный мне источник прерывания.


2) Функция, в которой настраивается systick
#if configOVERRIDE_DEFAULT_TICK_CONFIGURATION == 0
void vPortSetupTimerInterrupt( void )
{
..............
Заботливо взята в дефайн configOVERRIDE_DEFAULT_TICK_CONFIGURATION , и выставив этот дефайн в 1 можно определять свою функцию vPortSetupTimerInterrupt

3) Однако, функция для усыпления системы
__weak void vPortSuppressTicksAndSleep( TickType_t xExpectedIdleTime )
содержит строчки вроде
portNVIC_SYSTICK_CTRL_REG &= ~portNVIC_SYSTICK_ENABLE_BIT;
т.е. работает напрямую с systic таймером , без возможности выбрать его через дефайн, и стало быть её надо поправить руками.


Заранее спасибо за советы !
MiklPolikov
Сделал пункты 1 и 2, работает.
Но почему-то в функции xPortSysTickHandler пришлось вставить сброс прерывания моего таймера. А сброса прерывания от Systick , который там должен бы был быть изначально, я почему-то не вижу. Вопрос : что делают вот эти функции, которые вызываются в начале и конце xPortSysTickHandler ?


Код
__asm uint32_t ulPortSetInterruptMask( void )
{
    PRESERVE8

    mrs r0, basepri
    mov r1, #configMAX_SYSCALL_INTERRUPT_PRIORITY
    msr basepri, r1
    bx r14
}
/*-----------------------------------------------------------*/

__asm void vPortClearInterruptMask( uint32_t ulNewMask )
{
    PRESERVE8

    msr basepri, r0
    bx r14
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.