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

 
 
> 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
Ответов
sasha968m
сообщение Jan 18 2017, 11:24
Сообщение #2





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



Цитата(jcxz @ Jan 18 2017, 11:03) *
1.Устанавливаете запрос синхронного сброса
Код
T0TCR = 0x00000002;
но не дожидаетесь его окончания. Значит сброс у Вас реально может происходить после последующих записей конфигурации.

jcxz, это значит что после операции T0TCR = 0x00000002; нужно проверить сбросился ли ТС и только потом продолжать конфигурацию?

Цитата(jcxz @ Jan 18 2017, 11:03) *
2.Не чистите регистр флагов запросов прерываний.

Его обязательно чистить в конфигурации таймера? Читал в юзер мануал что по сбросу он очищен.


Цитата(jcxz @ Jan 18 2017, 11:03) *
3.Неправильно рассчитываете период:
Код
//Регистр совпадения = 1000 (1 Гц)
T0MR0 = 100;


jcxz, так правильно будет?
Код
PCLKSEL0 |= 0x0000000E; //Timer0Clk=72Mhz/8= 9 MHz      
}

void Timer0_Init(void){
//Предделитель таймера = 8999
T0PR = 8999;
//Сбросить счетчик и делитель
T0TCR = 0x00000002;
//Режим таймера
Т0СТСR = 0;
//При совпадении сбрасываем таймер и вызываем прерывание
T0MCR = 0x00000003;
//Регистр совпадения = 1000 (1 Гц)
T0MR0 = 1000;



Цитата(jcxz @ Jan 18 2017, 11:03) *
Как можно было сделать столько ошибок в такой простейшей периферии???
Читайте внимательнее юзермануал!
Да и в CTCR неплохо бы соотв. значение записать.

До этого я программировал только AVR (mega) на Ассемблере. В С, можно сказать, я полный балбес, только учусь.

Цитата(jcxz @ Jan 18 2017, 11:03) *
После этого смотрите появляется ли флаг активного запроса прерывания в IR?
И если появляется, а входа в ISR нет - читайте про контроллер прерываний и всё что с ним связано.


В бесконечный цикл вставлял такой код
Код
//if (T0IR & (1 << 0)) {FIO2CLR = (1<<13);      //Зажгли светодиод              |    
                    // T0TCR = 0x00000000;     //Остановили таймер - счётчик   |    
                    // T0IR = 0x00000001;      //сбросили флаг прерывания      |Ловушка                
                    // T0TCR = 0x00000002;     //сбросили таймер - счётчик     |    
                     // T0TCR = 0x00000001;}    //запустили таймер - счётчик    |
// else {FIO2SET = (1<<13);}

и по светодиоду видел, что 0 бит T0IR с определённым периодом устанавливается (таймер входит в прерывание).

Цитата(jcxz @ Jan 18 2017, 11:03) *
По контроллеру прерываний:
1.А где у Вас глобальное разрешение прерываний IRQ? (Вы ведь вроде этому прерыванию от таймера назначаете линию IRQ?)

Это не оно VICIntEnable |= 0x00000010;?

Цитата(jcxz @ Jan 18 2017, 11:03) *
2.А где обработчик прерывания IRQ?

Вроде это обработчик прерывания
Код
__irq void Timer0_Int (void)
{

  
if (n!=0x2000000) {n<<=1;}
else {n = 0x04000000;}
T0IR = 0x00000001; /*Сбросить флаг прерывания в Timer0*/
//Бегущая единица
IOSET1 = 0x3C000000;
IOCLR1 = n; /* Установить состояние порта */
VICVectAddr = 0; /*Перевести VIC в исходное состояние*/
}


Пробовал я писать имена битов в регистрах, как в других примерах из интернета, но IAR выдаёт на них ошибки. Нужны, видимо какие-то библиотеки, ноя пока не пойму какие и где их брать.
Ребята выше привели много разных примеров кода, ноя их не понимаю. Буду пробовать разбираться.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jan 18 2017, 11:31
Сообщение #3


Гуру
******

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



Цитата(sasha968m @ Jan 18 2017, 13:24) *
Пробовал я писать имена битов в регистрах, как в других примерах из интернета, но IAR выдаёт на них ошибки. Нужны, видимо какие-то библиотеки, ноя пока не пойму какие и где их брать.

Это называется заголовки, а не библиотеки. Есть в комплекте компилятора, или пишутся свои. У ИАР они очень специфичные под себя заточенные, посему абстракниые примеры их интернету не годятся. Либо свои пишите, либо надстройки над ИАРовскими допишите, либо на милость ИАР сдавайтесь (категорически не рекомендую).
Но САМОЕ главное начинайте не с таскания и усугубления всякого мусора из интернета, а изучения базовых понятий языка.


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

Сообщений в этой теме
- sasha968m   LPC2368 Прерывание по совпадению таймера, помогите   Jan 17 2017, 19:22
- - jcxz   1.Устанавливаете запрос синхронного сброса КодT0TC...   Jan 18 2017, 08:03
|- - zltigo   Цитата(jcxz @ Jan 18 2017, 10:03) Читайте...   Jan 18 2017, 08:09
|- - jcxz   Цитата(zltigo @ Jan 18 2017, 11:09) Ну Вы...   Jan 18 2017, 08:24
|- - zltigo   Цитата(jcxz @ Jan 18 2017, 10:24) Я прочи...   Jan 18 2017, 08:43
|- - 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   Цитата(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 Текстовая версия Сейчас: 30th July 2025 - 11:58
Рейтинг@Mail.ru


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