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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Xmega Прерывания
bob1
сообщение Mar 3 2011, 17:49
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 82
Регистрация: 17-09-06
Пользователь №: 20 471



Цитата(Pavel_Bor @ Mar 3 2011, 15:49) *
а как изменяется код если с событием?


Принцип следующий. Вход канала событий подключается к выводу на котором кнопка. Выход канала событий к счетчику. Период счетчика =1. По переполнению счетчика делаем прерывание........
В канале событий задаем значение цифрового фильтра от 1...8. Часть кода должна быть в AVR1001.
Данный метод будет работать при более низких тактовых частотах.
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Mar 4 2011, 08:37
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660




У меня cod vision ругается на строку ISR(PORTE_INT0_vect)
- declaration syntax error

Сообщение отредактировал Pavel_Bor - Mar 4 2011, 08:41
Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Mar 14 2011, 12:31
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Код
//Допустим вешаю я две кнопки на порт Е 6 и 7

    PORTE.PIN6CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;
    PORTE.PIN7CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;

//ставлю уровень прерывания для этого порта LOW

    PORTE.INTCTRL=PORTE.INTCTRL & ~PORT_INT0LVL_gm;

#asm("sei") //Разрешаю прерывания

//Ну и собственно само прерывание

    interrupt [PORTE_INT0_vect] void porte_int0_isr(void)
    {
        while((PORTE.IN&PIN6_bm)!=PIN6_bm){};  // ждем отпускания кнопки
           for(i=0;i<20;i++);   //время на дребезг
                PORTD.OUT=0xff;
    }


Так вот не попадаю я в тело прерывания..
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 14 2011, 16:46
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Pavel_Bor @ Mar 14 2011, 14:31) *
Код
//Допустим вешаю я две кнопки на порт Е 6 и 7

    PORTE.PIN6CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;
    PORTE.PIN7CTRL=PORT_OPC_PULLUP_gc | PORT_ISC_BOTHEDGES_gc;

//ставлю уровень прерывания для этого порта LOW

    PORTE.INTCTRL=PORTE.INTCTRL & ~PORT_INT0LVL_gm;

#asm("sei") //Разрешаю прерывания

//Ну и собственно само прерывание

    interrupt [PORTE_INT0_vect] void porte_int0_isr(void)
    {
        while((PORTE.IN&PIN6_bm)!=PIN6_bm){};  // ждем отпускания кнопки
           for(i=0;i<20;i++);   //время на дребезг
                PORTD.OUT=0xff;
    }


Так вот не попадаю я в тело прерывания..



Может не разрешён соотв. уровень прерываний?
Код
              PMIC.CTRL |= PMIC_LOLVLEN_bm;

Go to the top of the page
 
+Quote Post
Pavel_Bor
сообщение Mar 17 2011, 14:15
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 15-04-10
Из: Украина
Пользователь №: 56 660



Цитата(_Артём_ @ Mar 14 2011, 19:46) *
Может не разрешён соотв. уровень прерываний?
Код
              PMIC.CTRL |= PMIC_LOLVLEN_bm;



Cтоит, он вот здесь прописан
Код
void main(void)
{
    #pragma optsize-
    #asm("cli")        

    PMIC.CTRL|=PMIC_LOLVLEN_bm;  

    // Restore optimization for size if needed
    #pragma optsize_default
...
}


Сообщение отредактировал Pavel_Bor - Mar 17 2011, 14:15
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 17 2011, 16:16
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Pavel_Bor @ Mar 17 2011, 16:15) *
Cтоит, он вот здесь прописан
Код
void main(void)
{
    #pragma optsize-
    #asm("cli")        

    PMIC.CTRL|=PMIC_LOLVLEN_bm;  

    // Restore optimization for size if needed
    #pragma optsize_default
...
}


Наверно не проинициализирован регистр INT0MASK (если нужно прерывание 0).
Цитата
13.14.11. INT0MASK - регистр маски прерывания 0

Биты 7:0 - INT0MSK[7:0]: регистр маски прерывания 0

С помощью данных бит можно указать, какие линии порта используются в качестве прерывания 0 порта ввода-вывода. Если бит INT0MASKn сделать равным единице, то линия n будет использоваться, как источник прерывания 0. Условия генерации прерываний для каждой линии порта дополнительно задаются с помощью регистров PINnCTRL.


http://www.gaw.ru/html.cgi/txt/doc/micros/...ega_a/13_14.htm
Go to the top of the page
 
+Quote Post

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

 


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


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