Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2019-ноя-12 23:56

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2 Все  След.
Автор Сообщение
 Заголовок сообщения: Работа с MDR_TIMER1 и расчёт задержки
СообщениеДобавлено: 2014-ноя-21 11:29 
Не в сети
Аватара пользователя

Зарегистрирован: 2014-авг-14 16:20
Сообщения: 76
Откуда: г. Саратов
Здравствуйте. Пытаюсь обработать прерывание таймера Timer1.
Но прерывания не возникает, или возникает, но не обрабатывается.
В чем может быть проблема?
Открыть main.c
Код:
#include <stdint.h>
#include "MDR32F9Qx_config.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_port.h"
#include "MDR32F9Qx_board.h"
#include "MDR32F9Qx_timer.h"
#include "MDR32Fx.h"

void clock_init()
{
   RST_CLK_HSEconfig(RST_CLK_HSE_ON);
   RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV1);
   RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);
   RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul5);/** 80 MHz */
   RST_CLK_CPU_PLLcmd(ENABLE);
   RST_CLK_CPU_PLLuse(ENABLE);
}

void gpio_init()
{
   PORT_InitTypeDef port_init;
   PORT_StructInit(&port_init);

   RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTF, ENABLE);

   port_init.PORT_FUNC = PORT_FUNC_PORT;
   port_init.PORT_MODE = PORT_MODE_DIGITAL;
   port_init.PORT_SPEED = PORT_SPEED_MAXFAST;
   port_init.PORT_OE = PORT_OE_OUT;
   port_init.PORT_Pin = PORT_Pin_2;
   PORT_Init(MDR_PORTF, &port_init);
}

void timer_init()
{
   RST_CLK_PCLKcmd(RST_CLK_PCLK_TIMER1, ENABLE);
   MDR_TIMER_TypeDef timer_init;
   TIMER_BRGInit(&timer_init, TIMER_HCLKdiv1);
   timer_init.CNTRL = 0x1; /** счёт вверх по TIM_CLK */
   timer_init.IE = 0x2;    /** разрешаем прерывание, если CNT == ARR */
   timer_init.CNT = 0x1;   /** начальное значение таймера */
   timer_init.ARR = 0xF;   /** основание счёта */
   timer_init.PSG = 0x0;   /** предделитель */

   NVIC_EnableIRQ(Timer1_IRQn);
}

void Timer1_IRQHandler()
{
   PORT_ResetBits(MDR_PORTF, PORT_Pin_2);
}

int main(void)
{
   int i;
   clock_init();
   gpio_init();
   timer_init();

   while(1)
   {
      PORT_SetBits(MDR_PORTF, PORT_Pin_2);
   }

   return 0;
}
Закрыть

и в startup_MDR32F9Qx.S закомментировал 235 строку (и надо ли её комментировать?)
Открыть startup_MDR32F9Qx.S
***
def_default_handler WWDG_IRQHandler
// def_default_handler Timer1_IRQHandler
def_default_handler Timer2_IRQHandler
def_default_handler Timer3_IRQHandler
***
Закрыть


и второй вопросик, это как рассчитать время, которое будет отсчитывать таймер?
Т.е. как рассчитать число, которое надо будет записать в MDR_TIMER1->ARR чтобы получить задержку на определенное количество микросекунд?

Контроллер К1986ВЕ91Т

Заранее спасибо:)

_________________
Я Волшебник.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2014-ноя-21 12:13 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 457
1.Так таймер работать не будет.
timer_init никак не указывает на MDR_TIMER1; Все записи делаются в ОЗУ а не в перефирийном блоке
должно быть
MDR_TIMER1->CNTRL = 0x1; /** счёт вверх по TIM_CLK */
и тд.
2.В стартапе ничего комментировать не надо. строка с объявлением вектора должна быть.
3.Нужно дополнительно инициализировать регистр MDR_RST_CLK->TIM_CLOCK

время задержки считается от частоты ядра.
Сперва на предделитель из MDR_RST_CLK->TIM_CLOCK, затем предделитель из PSG это частота одного тика таймера.
Далее количество тиков в основании счета определяют время задержки.
PS.Подробности мог упустить - давно это было.

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2014-ноя-21 12:31 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1372
Откуда: Тула
К тому же обработка прерываний чуть сложнее -надо сбрасывать флаги.
Дружеский бесплатный совет - начните с примера от миландра.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2014-ноя-24 14:04 
Не в сети
Аватара пользователя

Зарегистрирован: 2014-авг-14 16:20
Сообщения: 76
Откуда: г. Саратов
спасибо большое за ответы
prostoRoman а если не секрет, то что
Цитата:
К тому же обработка прерываний чуть сложнее -надо сбрасывать флаги.

просто в примерах миландра не нашел, как именно это сделать.
Просто таймер заработал, а обработка внешнего прерывания нет.
Источником для прерываний служит другой контроллер (на котором программа с таймером), сигналы он подает нормально, на осциллографе все это хорошо видно, но обработчик внешнего прерывания EXT_INT1_IRQHandler такое ощущение, что один раз запускается, и дальше из обработчика не выходит, не реагируя на новые импульсы на Port B11
Открыть Код
Код:
#include <stdint.h>
#include "MDR32F9Qx_config.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_port.h"
#include "MDR32F9Qx_ebc.h"
#include "MDR32F9Qx_board.h"
#include "MDR32F9Qx_timer.h"
#include "MDR32Fx.h"

uint8_t flag;

void clock_init()
{
  RST_CLK_HSEconfig(RST_CLK_HSE_ON);
   RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV1);
   RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);
   RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul3);
   RST_CLK_CPU_PLLcmd(ENABLE);
   RST_CLK_CPU_PLLuse(ENABLE);
}

void gpio_init()
{
   PORT_InitTypeDef port_init;
   PORT_StructInit(&port_init);

   RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE);
   RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTF, ENABLE);

   port_init.PORT_FUNC = PORT_FUNC_ALTER;
   port_init.PORT_MODE = PORT_MODE_DIGITAL;
   port_init.PORT_SPEED = PORT_SPEED_MAXFAST;
   port_init.PORT_OE = PORT_OE_IN;
   port_init.PORT_Pin = PORT_Pin_11;
   PORT_Init(MDR_PORTB, &port_init);

   port_init.PORT_FUNC = PORT_FUNC_PORT;
   port_init.PORT_MODE = PORT_MODE_DIGITAL;
   port_init.PORT_SPEED = PORT_SPEED_MAXFAST;
   port_init.PORT_OE = PORT_OE_OUT;
   port_init.PORT_Pin = PORT_Pin_2;
   PORT_Init(MDR_PORTF, &port_init);
}

void EXT_INT1_IRQHandler()
{
   if (flag == 0)
   {
      PORT_ResetBits(MDR_PORTF, PORT_Pin_2);
      flag = 1;
   }
   else
   {
      PORT_SetBits(MDR_PORTF, PORT_Pin_2);
      flag = 0;
   }
}

int main(void)
{
   clock_init();
   gpio_init();
   flag = 0;
   NVIC_EnableIRQ(EXT_INT1_IRQn);

   __enable_irq();

   while(1)
   {

   }

   return 0;
}
Закрыть

где я мог ошибиться?
Буду премного благодарен за любую помощь
P.S. Есть предположение, что контроллер каким-то образом не выходит из обработчика прерывания, и поэтому я получаю такую вот проблему.
P.P.S. Просто ещё не достаточно хорошо освоил контроллер, поэтому и столько глупых вопросов..

_________________
Я Волшебник.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2014-ноя-24 15:08 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1372
Откуда: Тула
Не секрет, хотя, может, и не очевидно. И в миландровских примерах не нашел - они вообще старательно избегают обработки прерываний в примерах.
Итак:
1. В серии ве9х прерывание формируется путём объединения сигналов событий из регистра STATUS, маскируемых битами регистра IE. (такая же фигня с запросами дма -- там регистр DMA_RE, но не суть)
2. В регистре STATUS биты взводятся сами, а сбрасывать их НУЖНО РУКАМИ, записывая ноль.
3. Какие события будут вызывать прерывания (или передачу дма) выбирается установкой единичек в регистре IE (DMA_RE соответственно).
4. Обработчик прерывания такого таймера я вижу так: при входе считывается регистр STATUS во временную переменную; в ней проверяются интересующие биты и каждый сбрасывается отдельно. Вообще тут требуется внимание. Худший случай, годный для обучения, просто писать в STATUS ноль.


Но если же мы говорим таки за ВНЕШНИЕ прерывания -- то тут мой опыт неудачный: смотрите темы viewtopic.php?f=33&t=260 viewtopic.php?f=34&t=511
пример: viewtopic.php?p=4063#p4063

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2014-ноя-25 09:25 
Не в сети
Аватара пользователя

Зарегистрирован: 2014-авг-14 16:20
Сообщения: 76
Откуда: г. Саратов
prostoRoman писал(а):
И в миландровских примерах не нашел - они вообще старательно избегают обработки прерываний в примерах.

ай-ай, вот негодники :D
prostoRoman писал(а):
В регистре STATUS биты взводятся сами, а сбрасывать их НУЖНО РУКАМИ, записывая ноль.

например, в таймере это ясно, добавление конструкции вида MDR_TIMER1->STATUS &= ~(1 << 1); решает проблему. Но у меня проблема с обработкой внешних прерываний. С таймером пока что проблем нет:)
prostoRoman писал(а):
Но если же мы говорим таки за ВНЕШНИЕ прерывания -- то тут мой опыт неудачный: смотрите темы viewtopic.php?f=33&t=260 viewtopic.php?f=34&t=511
пример: viewtopic.php?p=4063#p4063

посмотрел темы, только не совсем охота использовать в проекте такой хитрый ход-костыль, какой предложен уважаемым товарищем AbraKadabra в этой теме http://forum.milandr.ru/viewtopic.php?f=33&t=260&start=30#p10273
AbraKadabra писал(а):
Код работает, хотя, понятно, применим не для всех случаев. В моем случае внешние прерывания случаются в районе 200Гц и я могу не опасаться что-то пропустить.

просто у меня частОты побольше, и я как раз могу опасаться, что что-то пропущу..

_________________
Я Волшебник.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2014-ноя-25 11:47 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 457
С внешним прерыванием все сложнее. В том плане, что оно срабатывает ТОЛЬКО ПО УРОВНЮ.
Пока висит активный уровень - есть запрос на прерывание. См. соответствующий раздел описания в районе 493 стр. соотвествующий раздел (в зависимости от версии).
Поэтому удобнее использовать таймер в режиме захвата - есть событие по фронту.

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2014-ноя-25 14:50 
Не в сети
Аватара пользователя

Зарегистрирован: 2014-авг-14 16:20
Сообщения: 76
Откуда: г. Саратов
редактор писал(а):
С внешним прерыванием все сложнее. В том плане, что оно срабатывает ТОЛЬКО ПО УРОВНЮ.
Пока висит активный уровень - есть запрос на прерывание. См. соответствующий раздел описания в районе 493 стр. соотвествующий раздел (в зависимости от версии).
Поэтому удобнее использовать таймер в режиме захвата - есть событие по фронту.

в том то и дело, что он срабатывает только по уровню. Да и к тому же, не реагируя на внешний сигнал (который на фотке желтый). Даже если включу контроллер без сигнала, то прерывание продолжает работать
т.е. всё выглядит у меня так
Вложение:
Комментарий к файлу: желтый: сигнал, вызывающий прерывания
зелёный: результат работы прерывания

IMG_20141125_142251.jpg
IMG_20141125_142251.jpg [ 3.18 МБ | Просмотров: 9654 ]

а должно быть (как я думаю) так
Вложение:
diag.jpg
diag.jpg [ 31.38 КБ | Просмотров: 9654 ]

Открыть полный код
Код:
#include <stdint.h>
#include "MDR32F9Qx_config.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_port.h"
#include "MDR32F9Qx_ebc.h"
#include "MDR32F9Qx_board.h"
#include "MDR32F9Qx_timer.h"
#include "MDR32Fx.h"

uint8_t flag;
uint16_t i;
volatile uint32_t sec;

void clock_init()
{
#if MODE == IN
   RST_CLK_HSEconfig(RST_CLK_HSE_ON);
   RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV1);
   RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);
   RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul3);/** 72 MHz */
   RST_CLK_CPU_PLLcmd(ENABLE);
   RST_CLK_CPU_PLLuse(ENABLE);
}

void gpio_init()
{
   PORT_InitTypeDef port_init;
   PORT_StructInit(&port_init);

   RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE);
   RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTF, ENABLE);

   port_init.PORT_FUNC = PORT_FUNC_ALTER;
   port_init.PORT_MODE = PORT_MODE_DIGITAL;
   port_init.PORT_SPEED = PORT_SPEED_MAXFAST;
   port_init.PORT_OE = PORT_OE_IN;
   port_init.PORT_PULL_DOWN = PORT_PULL_DOWN_ON;
   port_init.PORT_PULL_UP = PORT_PULL_UP_OFF;
   port_init.PORT_Pin = PORT_Pin_11;
   PORT_Init(MDR_PORTB, &port_init);

   port_init.PORT_FUNC = PORT_FUNC_PORT;
   port_init.PORT_MODE = PORT_MODE_DIGITAL;
   port_init.PORT_SPEED = PORT_SPEED_MAXFAST;
   port_init.PORT_OE = PORT_OE_OUT;
   port_init.PORT_Pin = PORT_Pin_2;
   PORT_Init(MDR_PORTF, &port_init);
}


void EXT_INT1_IRQHandler()
{
   NVIC_SetPendingIRQ(EXT_INT1_IRQn); /** Принудительная остановка прерывания в режим ожидания */
   if (flag == 0)
   {
      PORT_ResetBits(MDR_PORTF, PORT_Pin_2);
      flag = 1;
   }
   else
   {
      PORT_SetBits(MDR_PORTF, PORT_Pin_2);
      flag = 0;
   }
}


int main(void)
{
   clock_init();
   gpio_init();
   flag = 0;
   NVIC_EnableIRQ(EXT_INT1_IRQn);

   __enable_irq();

   while(1)
   {

   }

   return 0;
}
Закрыть

контроллер К1986ВЕ91Т с маркировкой на корпусе 1202

просто думаю, что я что-то не совсем верно делаю. Если прерывания так и должны работать (как у меня на фото), то тогда зачем они такие нужны? :)
а с таймером, надо попробовать сделать, только есть один небольшой вопрос: насколько упадёт быстродействие обработки прерывания, если делать не напрямую, а через таймер?

_________________
Я Волшебник.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2014-ноя-25 14:58 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1372
Откуда: Тула
грубо - ни на сколько.
точнее - на синхронизацию в таймере + код проверки источника прерывания в обработчике (может и отсутствовать)
в любом случае, думаю упадет не критично - быстрее только на логике.

с прерыванием у меня была примерно та же картина.
можно попробовать поковырять где-то в NVIC -> ICPR....

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2014-ноя-25 16:14 
Не в сети
Аватара пользователя

Зарегистрирован: 2014-авг-14 16:20
Сообщения: 76
Откуда: г. Саратов
Окончательно подзаемучившись с прерыванием EXT_INT1 перепаял провод на ногу EXT_INT2, и вуаля! код заработал, так как надо (естественно пришлось перестроить порт с B11 на C12)
Вложение:
IMG_20141125_155518.jpg
IMG_20141125_155518.jpg [ 3.07 МБ | Просмотров: 9647 ]

всё вроде бы хорошо, но мне не даёт покоя мысль, что не нравилось EXT_INT1, чтобы последовать примеру EXT_INT2?
поэтому если кто-нибудь сможет объяснить, в чем причина, то я (и наверняка не только я) был бы очень рад этому объяснению. :)
провода припаивались к ногам контроллера, всякие резисторы на землю тоже всё как надо, но EXT_INT1 не работает, а EXT_INT2 да.
вот код с рабочим EXT_INT2, может кому-нибудь пригодится
Открыть снова код
Код:
#include <stdint.h>
#include "MDR32F9Qx_config.h"
#include "MDR32F9Qx_rst_clk.h"
#include "MDR32F9Qx_port.h"
#include "MDR32F9Qx_ebc.h"
#include "MDR32F9Qx_board.h"
#include "MDR32F9Qx_timer.h"
#include "MDR32Fx.h"



uint8_t flag;
uint16_t i;
volatile uint32_t sec;

void clock_init()
{
   RST_CLK_HSEconfig(RST_CLK_HSE_ON);
   RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV1);
   RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);
   RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul3);/** 72 MHz */
   RST_CLK_CPU_PLLcmd(ENABLE);
   RST_CLK_CPU_PLLuse(ENABLE);
}

void gpio_init()
{
   PORT_InitTypeDef port_init;
   PORT_StructInit(&port_init);

   RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC, ENABLE);
   RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTF, ENABLE);

   port_init.PORT_FUNC = PORT_FUNC_ALTER;
   port_init.PORT_MODE = PORT_MODE_DIGITAL;
   port_init.PORT_SPEED = PORT_SPEED_MAXFAST;
   port_init.PORT_OE = PORT_OE_IN;
   port_init.PORT_PULL_DOWN = PORT_PULL_DOWN_ON;
   port_init.PORT_PULL_UP = PORT_PULL_UP_OFF;
   port_init.PORT_Pin = PORT_Pin_12;
   PORT_Init(MDR_PORTC, &port_init);

   port_init.PORT_FUNC = PORT_FUNC_PORT;
   port_init.PORT_MODE = PORT_MODE_DIGITAL;
   port_init.PORT_SPEED = PORT_SPEED_MAXFAST;
   port_init.PORT_OE = PORT_OE_OUT;
   port_init.PORT_Pin = PORT_Pin_2;
   PORT_Init(MDR_PORTF, &port_init);
}

void EXT_INT2_IRQHandler()
{
   if (flag == 0)
   {
      PORT_ResetBits(MDR_PORTF, PORT_Pin_2);
      flag = 1;
   }
   else
   {
      PORT_SetBits(MDR_PORTF, PORT_Pin_2);
      flag = 0;
   }
}


int main(void)
{
   clock_init();
   gpio_init();
   flag = 0;
   NVIC_EnableIRQ(EXT_INT2_IRQn);

   __enable_irq();

   while(1) { }

   return 0;
}
Закрыть

всем спасибо за помощь :)

_________________
Я Волшебник.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2014-ноя-25 16:43 
Не в сети

Зарегистрирован: 2010-сен-21 12:57
Сообщения: 714
Откуда: г. Санкт-Петербург
Kirra писал(а):
всё вроде бы хорошо, но мне не даёт покоя мысль, что не нравилось EXT_INT1, чтобы последовать примеру EXT_INT2?

В коде для EXT_INT2 пропала строка
NVIC_SetPendingIRQ(EXT_INT1_IRQn);


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2014-ноя-25 20:31 
Не в сети
Аватара пользователя

Зарегистрирован: 2014-авг-14 16:20
Сообщения: 76
Откуда: г. Саратов
vasili писал(а):
В коде для EXT_INT2 пропала строка
NVIC_SetPendingIRQ(EXT_INT1_IRQn);

эта строка не влияет особо на работу EXT_INT1. Что с ней, что без неё, результат одинаковый

_________________
Я Волшебник.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2014-ноя-26 09:22 
Не в сети

Зарегистрирован: 2010-сен-21 12:57
Сообщения: 714
Откуда: г. Санкт-Петербург
Возможно убит вывод PB11. Проверьте его в качестве простого порта ввода. Повторите эксперимент на другом МК.

У себя проверил на ВЕ92 с выводом PA0. EXT_INT1 работает как надо.

NVIC_SetPendingIRQ(EXT_INT1_IRQn); ещё как влияет!


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-янв-15 13:46 
Не в сети

Зарегистрирован: 2014-июл-28 11:16
Сообщения: 13
Откуда: Новосибирск
Kirra писал(а):
и в startup_MDR32F9Qx.S закомментировал 235 строку (и надо ли её комментировать?)
Открыть startup_MDR32F9Qx.S
***
def_default_handler WWDG_IRQHandler
// def_default_handler Timer1_IRQHandler
def_default_handler Timer2_IRQHandler
def_default_handler Timer3_IRQHandler
***
Закрыть



Могу сказать, почему не надо комментировать эту строку.

def_default_handler - это директива задания дефолтного обработчика прерывания (это можно понять из названия). Она создает слабый символ Timer1_IRQHandler, который является заглушкой - то есть указывает сам на себя.

На этапе сборки проекта у вас в объекте startup_MDR32F9Qx.o есть символ <Timer1_IRQHandler>, который не делает ничего, а в объекте из вашего кода, скажем, main.o тоже есть символ <Timer1_IRQHandler>, который показывает на ваш обработчик прерывания, если _вы_ его определили.

На этапе линковки линкер заменяет кусок кода, помеченный слабым символом, на код, который вы пометили этим же символом самостоятельно в своей программе. Таким образом, вместо заглушки подставляется ваш обработчик прерывания.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2015-янв-16 13:23 
Не в сети
Аватара пользователя

Зарегистрирован: 2014-авг-14 16:20
Сообщения: 76
Откуда: г. Саратов
Верно ли я понял, что если такой код
Код:
***
def_default_handler WWDG_IRQHandler
def_default_handler Timer1_IRQHandler
def_default_handler Timer2_IRQHandler
def_default_handler Timer3_IRQHandler
***

заменить, допустим на такой
Код:
***
def_default_handler WWDG_IRQHandler
def_default_handler My_Timer1_IRQHandler
def_default_handler Timer2_IRQHandler
def_default_handler Timer3_IRQHandler
***


то и обработчик писать уже так
Код:
void My_Timer1_IRQHandler(void)
{
  /** всякий код */
}

??

_________________
Я Волшебник.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2 Все  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB