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

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> SAM4S, Ничего не выходит
Грендайзер
сообщение Aug 10 2015, 05:51
Сообщение #61


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Цитата
Пардон, но вам до такого понимания как пешком до Луны

Ну видимо не мне одному... колдунство с отключением прерывания не сработало sad.gif
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Aug 10 2015, 06:25
Сообщение #62


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Цитата(Грендайзер @ Aug 7 2015, 16:39) *
Частота работы ядра - 100 МГц, частота работы ЦАП - 50 МГц, прерывание возникает не ратьше чем в 25 циклов ЦАП. Ядро какбэ успеет ещё до Камчатки пешком дойти, пока процесс чухнётся.

25 циклов на 50 МГц - это 50 циклов на 100 МГц, оно у Вас вообще из прерываний вылезает?
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Aug 10 2015, 07:14
Сообщение #63


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Вылезает. При выходе из прерывания, я его отключаю. Тут дрогой интересный момент. Как я понял, некоторое время контроллер работает нормально, в ходе пошаговой отладки (с отключённым прерыванием) процессор некоторое время работает нормально, а потом вылетает в пустой цикл в функции
Код
void Dummy_Handler(void)
{
        while (1) {
        }
}

как будто поступило прерывание, обработчик для которого не указан. Хотя никаких других прерываний я не включал. Ничего не менял кроме программы внутри main и в обработчике. По традиуии приведу код.

Код
    while (1)
    {
        if(n == 7)
        {n = 0;}
        if(DACC -> DACC_IMR == 0) // если прерывание отключено
        {DACC -> DACC_IER = DACC_IER_TXRDY;} // включить прерывание
        
    }
    return 0;
}

void DACC_Handler( void )
{     
    DACC -> DACC_ISR;
    DACC -> DACC_CDR = DACC_CDR_DATA(dout[n]);
    n = n + 1;
    DACC -> DACC_IDR = DACC_IDR_TXRDY; // отключить прерывание
    return;
}


P.S.
Цитата
25 циклов на 50 МГц - это 50 циклов на 100 МГц

25 циклов на 50 это 25 циклов на 50. Частота работы ЦАП 50МГц

Сообщение отредактировал Грендайзер - Aug 10 2015, 07:17
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Aug 11 2015, 11:38
Сообщение #64


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Ну сейчас меня с гавн съедят, и всё же... Товарищ scifi Вы где? Вы были правы! Правда так я и не допетрил кой чего, а именно... Следующий код обработчика прерывания, как я уже писал результата не даёт:
Код
void DACC_Handler( void )
{
    DACC -> DACC_ISR; // читаем регистр что бы сбросить флаг прерывания
    DACC -> DACC_CDR = DACC_CDR_DATA(dout[n]); //передаём данные в в цап
    {n = n + 1;} // увеличиваем индекс элемента массива
        DACC -> DACC_IDR = DACC_IDR_TXRDY; // отключаем прерывание в переферии
    return;
}

не зависимо от того какая строчка "n = n + 1" или "DACC -> DACC_CDR = DACC_CDR_DATA(dout[n]);" идёт раньше. Но стоит одну из этих строк (или их обе - не важно) поставить после строки "DACC -> DACC_IDR = DACC_IDR_TXRDY;" как всё чудным образом начинает работать. Т.е.
Код
void DACC_Handler( void )
{
    DACC -> DACC_ISR;
    DACC -> DACC_IDR = DACC_IDR_TXRDY;
    [u]DACC -> DACC_CDR = DACC_CDR_DATA(dout[n]);[/u]
    [u]{n = n + 1;}[/u]
    return;
}

или
Код
    DACC -> DACC_ISR;
        [u]{n = n + 1;}[/u]
    DACC -> DACC_IDR = DACC_IDR_TXRDY;
    [u]DACC -> DACC_CDR = DACC_CDR_DATA(dout[n]);[/u]
    return;

или
Код
    DACC -> DACC_ISR;
        [u]DACC -> DACC_CDR = DACC_CDR_DATA(dout[n]);[/u]
    DACC -> DACC_IDR = DACC_IDR_TXRDY;
        [u]{n = n + 1;}[/u]
    return;

Из - за чего это происходит? smile3046.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th August 2025 - 07:04
Рейтинг@Mail.ru


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