реклама на сайте
подробности

 
 
> LPC2368 Прерывание по совпадению таймера, помогите
sasha968m
сообщение Jan 17 2017, 19:22
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 16-11-11
Из: Макеевка, Донецкая обл.
Пользователь №: 68 333



Всем здравствуйте!
Помогите, пожалуйста, разобраться с прерыванием от таймера0 по совпадению.
Только начал осваивать 32 разрядные микроконтроллеры. Есть отладочная плата SK-MLPC1768/2387/2368, с установленным LPC2368.
Для обучения пользуюсь IAR 7.50.2.10505
Прикрепленный файл  main.txt ( 2.9 килобайт ) Кол-во скачиваний: 75

Вставлял ловушку в бесконечном цикле и проверял 0 бит регистра T0IR. Видно что таймер входит в прерывание (бит устанавливается), но дальше действий программа никаких не выполняет, а должна быть бегущая единица.
Как должна работать эта программа ясно, но почему не работает не понятно.
Исходник взят из интернета, кроме настройки PLL. PLL настраивается. Проверялось.
Подскажите, направьте пожалуйста!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jcxz
сообщение Jan 18 2017, 08:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



1.Устанавливаете запрос синхронного сброса
Код
T0TCR = 0x00000002;
но не дожидаетесь его окончания. Значит сброс у Вас реально может происходить после последующих записей конфигурации.
2.Не чистите регистр флагов запросов прерываний.
3.Неправильно рассчитываете период:
Код
//Регистр совпадения = 1000 (1 Гц)
T0MR0 = 100;

Как можно было сделать столько ошибок в такой простейшей периферии???
Читайте внимательнее юзермануал!
Да и в CTCR неплохо бы соотв. значение записать.
После этого смотрите появляется ли флаг активного запроса прерывания в IR?
И если появляется, а входа в ISR нет - читайте про контроллер прерываний и всё что с ним связано.

По контроллеру прерываний:
1.А где у Вас глобальное разрешение прерываний IRQ? (Вы ведь вроде этому прерыванию от таймера назначаете линию IRQ?)
2.А где обработчик прерывания IRQ?
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 18 2017, 08:09
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(jcxz @ Jan 18 2017, 10:03) *
Читайте внимательнее юзермануал!

Ну Вы и не ленивый читать галиматью написанную в силе "= 0x00000002;" sm.gif Я лично не стал.
Ну в Автору большой совет - если хотите что бы кто-то читал написанное Вами и разбирался - НЕ ПИШИТЕ в том "стиле", как написали. Все биты и константы должны иметь ИМЕНА.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 18 2017, 08:24
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(zltigo @ Jan 18 2017, 11:09) *
Ну Вы и не ленивый читать галиматью написанную в силе "= 0x00000002;" sm.gif Я лично не стал.

Я прочитал просто потому, что много работал с LPC-шной периферией и помню почти наизусть её, тем более таймера - почти самое простое там.
Тем более они не изменились при переходе на Cortex LPC17xx/LPC43xx.
Так бы да - и читать бы не стал.

Цитата(zltigo @ Jan 18 2017, 11:09) *
Все биты и константы должны иметь ИМЕНА.

Насчёт первого (битов в конфигурационных регистрах периферии) не совсем с Вами согласен.
Как правило, когда прописываешь их значения в какой-то регистр, всегда перед глазами открытая страничка с описанием этого регистра.
И мне например удобнее соотносить описания полей в мануале с исходником по номерам битов, а не их именам (которых может и не быть или быть неудобными).
Так что именно для битовых полей в регистрах конфигурации периферии я отступаю от этого правила, и чаще всего прописываю так:
T0MCR = B0 | B1;
А точнее даже так:
concat(T, nTIM_nrf, MCR) = B0 | B1;
ну или через указатель.
Так как все назначения номеров таймеров, портов UART/SPI/... и пр. периферии у меня собраны в одном месте и нигде нет прямых ссылок на регистры периферии:
Код
//Распределение UART-ов
#define nUART_service 3   //номер UART сервисного порта
//Распределение GP-таймеров
#define nTIM_cpu      0   //таймер коротких интервалов
#define nTIM_intmon   1   //таймер контролЯ длительности запретов прерываний (длЯ отладки)
#define nTIM_nrf      2   //таймер драйвера nRF24L01+
//Распределение SSP-портов
#define nSSP_nrf      0   //nRF24L01+

где concat - это текстовая склейка :
Код
#define concatVOID
#define concat_SUBST2(a, b, c, d, e, f, g, h, i, j, k, l, ...) \
        a##b##c##d##e##f##g##h##i##j##k##l
#define concat_SUBST(...) concat_SUBST2(__VA_ARGS__)
#define concat(...) concat_SUBST(__VA_ARGS__, concatVOID, concatVOID, \
        concatVOID, concatVOID, concatVOID, concatVOID, concatVOID, concatVOID, \
        concatVOID, concatVOID)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 18 2017, 08:43
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(jcxz @ Jan 18 2017, 10:24) *
Я прочитал просто потому, что много работал с LPC-шной периферией и помню почти наизусть её, тем более таймера - почти самое простое там.
Тем более они не изменились при переходе на Cortex LPC17xx/LPC43xx.
Так бы да - и читать бы не стал.

Я тоже работал и работаю и 34xx и 17хх тоже помню многое, но помню ИМЕНА а не "второй бит справа". Более того, что значит "второй бит справа" если и знал, то в тот краткий миг, когда его описывал.
Никаких особых дополнительных наворотов в описании не использую.
Внешне получается где-то так:
CODE

//---------------------------------------------------------------------------
void init_mrt_timers(void)
{
// Enable MRT clock
SYSAHBCLKCTRL1 |= CTRL1_MRT;
// Peripheral reset control to MRT, a "1" bring it out of reset.
PRESETCTRL1 |= ( CTRL1_MRT );
PRESETCTRL1 &= ~( CTRL1_MRT );

.......

MRT_INTVAL0 = 0;
MRT_INTVAL0 = MRT_INTVAL_LOAD;
MRT_CTRL0 = MRT_CTRL_ONE_SHOT|MRT_CTRL_INTEN;

VIC_EnableIRQ( MRT_IRQn );
}
.....
//---------------------------------------------------------------------------
void vlfx_tx_timeout_start( bint slots )
{
MRT_INTVAL0 = ((((CPU_CLOCK_HZ/CC1000_BAUD)*10) + 1)*slots);
MRT_INTVAL0 |= MRT_INTVAL_LOAD;

}


В случае, когда более-менее универсальный исходник планируется, тогда еще, да, можно алиасы назначить:
CODE

#define TsPR_SYS T1PR
#define TsIR_SYS T1IR
#define TsMR0_SYS T1MR0
#define TsMCR_SYS T1MCR
#define TsTCR_SYS T1TCR
#define TsTC_SYS T1TC
#define VIC_TIMERs_SYS VIC_TIMER1

//---------------------------------------------------------------------------
static void init_systimer( bint ext_source )
{
ulong compare_match;

// Tick does not require the use of the timer prescale. This is
// defaulted to zero but can be used if necessary
TsPR_SYS = 0;
// Calculate the match value required for our wanted tick rate
compare_match = CPU_CLOCK_HZ / BUS_DIVIDER / SYS_TICK_RATE_HZ;
TsMR0_SYS = compare_match - 1;
// Generate tick with timer compare match
TsMCR_SYS = (MCR_MR0INT | MCR_MR0RES);
TsTCR_SYS = 0;

if( ext_source )
{ // External source
}
else
{ // Start the timer
#if( configUSE_PREEMPTION == 1 )
extern void ( vPortPreemptiveTickEntry )( void );
install_irq( VIC_TIMERs_SYS, (void *)vPortPreemptiveTickEntry, VIC_SYSTEM_PRIOR, TRUE );
#else
extern void ( vNonPreemptiveTick )( void );
install_irq( VIC_TIMERs_SYS, (void *)vNonPreemptiveTick, VIC_SYSTEM_PRIOR, TRUE );

#endif
TsTCR_SYS = TCR_ENABLE;
}
}


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- sasha968m   LPC2368 Прерывание по совпадению таймера, помогите   Jan 17 2017, 19:22
|- - jcxz   Цитата(zltigo @ Jan 18 2017, 11:43) #defi...   Jan 18 2017, 09:18
|- - zltigo   Цитата(jcxz @ Jan 18 2017, 11:18) Мой вар...   Jan 18 2017, 09:49
|- - jcxz   Цитата(zltigo @ Jan 18 2017, 12:49) А для...   Jan 20 2017, 11:40
|- - zltigo   Цитата(jcxz @ Jan 20 2017, 13:40) о чём В...   Jan 20 2017, 11:49
- - sasha968m   Цитата(jcxz @ Jan 18 2017, 11:03) 1.Устан...   Jan 18 2017, 11:24
|- - zltigo   Цитата(sasha968m @ Jan 18 2017, 13:24) Пр...   Jan 18 2017, 11:31
||- - sasha968m   Цитата(zltigo @ Jan 18 2017, 14:31) Это н...   Jan 18 2017, 11:51
||- - zltigo   Цитата(sasha968m @ Jan 18 2017, 13:51) Да...   Jan 18 2017, 17:14
|- - jcxz   Цитата(sasha968m @ Jan 18 2017, 14:24) jc...   Jan 18 2017, 19:49
- - sasha968m   zltigo, спасибо! Уже скачал. Проект мой получи...   Jan 18 2017, 19:24
- - sasha968m   Я, кажется, понял. Выставил в первый бит 1, дожда...   Jan 18 2017, 20:38
|- - jcxz   Цитата(sasha968m @ Jan 18 2017, 23:38) Я,...   Jan 19 2017, 08:19
- - sasha968m   Понял, благодарю.   Jan 19 2017, 10:20


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 14:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01423 секунд с 7
ELECTRONIX ©2004-2016