|
Несколько вопросов по ARM Cortex M3 |
|
|
|
 |
Ответов
|
Nov 23 2011, 14:45
|
Знающий
   
Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748

|
Сегодня посмотрел примеры для других плат, что-то переделал и запустил прерывание на своей, заморгало:
void TIM_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //TIM_OCInitTypeDef TIM_OCInitStructure; NVIC_InitTypeDef NVIC_InitStructure;
/* Enable TIM2 */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/* TIM1 config */ TIM_TimeBaseStructure.TIM_Period = 0x4AF; TIM_TimeBaseStructure.TIM_Prescaler = ((SystemCoreClock/1200) - 1); TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
#if 0 /* Output Compare Timing Mode configuration: Channel1 */ TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; TIM_OCInitStructure.TIM_Pulse = 0x0; TIM_OC1Init(TIM1, &TIM_OCInitStructure); #endif /* Immediate load of TIM2 Precaler values */ TIM_PrescalerConfig(TIM2, ((SystemCoreClock/1200) - 1), TIM_PSCReloadMode_Immediate);
/* Clear TIM2 update pending flags */ TIM_ClearFlag(TIM2, TIM_FLAG_Update);
/* Enable the TIM2 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);
/* Enable TIM2 Update interrupts */ TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); /* TIM2 enable counters */ TIM_Cmd(TIM2, ENABLE); }
void TIM2_IRQHandler(void) { /* Clear TIM3 update interrupt */ TIM_ClearITPendingBit(TIM2, TIM_IT_Update); /* Toggle LED2 */ STM32vldiscovery_LEDToggle(LED3); }
поясните мне пожалуйста, зачем в обработчике нужно вот это: TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
И еще, там где закоментировано if 0 endif в этом случае выход таймера подсоединяется на внешнюю ногу, я прав?
и еще последний вопрос, все эти обработчики уже объявлены в ассемблерном файле boot и чтобы вызвать что то из обработчика нужно или внутрь него писать или вызвать из него внешнюю функцию. не накладно ли? (push pop...)-так сделано в примерах.
|
|
|
|
|
Nov 23 2011, 15:42
|
Профессионал
    
Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528

|
Цитата(inventor @ Nov 23 2011, 21:45)  и еще последний вопрос, все эти обработчики уже объявлены в ассемблерном файле boot и чтобы вызвать что то из обработчика нужно или внутрь него писать или вызвать из него внешнюю функцию. не накладно ли? (push pop...)-так сделано в примерах. Не нужно, достаточно просто написать свою функцию с тем же именем и, если это С++, то ещё и extern "C" добавить. Объявления в ассемблерном файле сделаны так, что ругани по поводу переопределения не будет.
--------------------
Russia est omnis divisa in partes octo.
|
|
|
|
Сообщений в этой теме
inventor Несколько вопросов по ARM Cortex M3 Nov 22 2011, 16:12 Danis Цитата(inventor @ Nov 22 2011, 20:12) ...... Nov 22 2011, 16:41 KRS Цитата(inventor @ Nov 22 2011, 20:12) при... Nov 22 2011, 19:46 Beginning Дабы не плодить темы задам вопрос тут.
Разбираю ин... Nov 23 2011, 09:24 AHTOXA В регистр контроллера, расположенный по адресу 0x4... Nov 23 2011, 09:38 Beginning Спс. Меня смутило то, что обращение идёт напрямую ... Nov 23 2011, 09:54 AHTOXA Цитата(Beginning @ Nov 23 2011, 15:54) Не... Nov 23 2011, 10:22 Beginning Да вы правы - это демо проекты из freeRTOS. Полови... Nov 23 2011, 11:37   inventor Цитата(Sergey_Aleksandrovi4 @ Nov 27 2011, 18... Nov 28 2011, 10:57 Flexz Потому что далеко не все запросы прерываний сбрасы... Nov 28 2011, 11:50 Nix_86 Прорабатываю вопросы реализации СнК на базе ядер C... Mar 18 2012, 10:44 aaarrr Если экстраполировать опыт с девятым ядром, то TCM... Mar 18 2012, 13:15 Nix_86 Цитата(aaarrr @ Mar 18 2012, 16:15) Если ... Mar 18 2012, 18:20
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|