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

 
 
> TC0 vs UDP. ARM7S, Не хотят работать одновременно.
KAlex
сообщение Mar 30 2008, 11:24
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Что за хрень? Почему, если работает таймер, может сбоить UDP.
За одну минуту шлю в PC гдето около 30 000 пакетов по 64 байта(или меньше, неважно).
Таймер выдает прерывания - 50 герц. Как показала статистика, в среднем, в течение двух-трех минут проц вылетает в undefvec, swivec, dabtvec и тд. короче RAMEND?!?!?!
Приоритет у UDP выше.
Объясните.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Mar 30 2008, 16:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(KAlex @ Mar 30 2008, 14:24) *
Как показала статистика, в среднем, в течение двух-трех минут проц вылетает в undefvec, swivec, dabtvec и тд. короче RAMEND?!?!?!

Не очень понял, что Вы хотели сказать данной фразой - причем тут RAMEND?

Ищите ошибку в своей программе - UDP с TC0 работает нормально.
Go to the top of the page
 
+Quote Post
KAlex
сообщение Mar 31 2008, 07:54
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Цитата(aaarrr @ Mar 30 2008, 19:36) *
что Вы хотели сказать данной фразой - причем тут RAMEND?

Ну это так, фразеологизм.

В программе все нормально. Если запретить прерывания от таймера на время обработки UDP - накаких проблем. Для меня в принципе это не критично, запрещаю. Но все таки интересно, почему им нельзя работать одновременно? Прием и передача по USB происходит аппаратно. По идее, никакие програмные действия на это влиять не могут. Однако же ...?
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Mar 31 2008, 08:14
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(KAlex @ Mar 31 2008, 11:54) *
В программе все нормально. Если запретить прерывания от таймера на время обработки UDP - накаких проблем. Для меня в принципе это не критично, запрещаю. Но все таки интересно, почему им нельзя работать одновременно? Прием и передача по USB происходит аппаратно. По идее, никакие програмные действия на это влиять не могут. Однако же ...?


Влиять может многое.
Например компилятор, который криво обрабатывает выходы из прерываний или переходы между ARM/THUMB.
Или протокол обмена по USB может содержать внутри запреты прерываний с последующим ожиданием вашего таймера.
Часть функций может распологаться в озу и рекурсивный вызов некоторых функций может вызывать наползание стека на функцию.
Может влиять порядок инициализации таймера или USB, время между подачей частоты на перефирию и установка в ней регистров.
Даже банальные иголки от цепей подключенных к 50Гц.

Я прекрасно передавал в комп мегабит/с данных по протоколу MSD и при этом у меня один таймер дёргал ногу с частотой 3кГц (манчестер), а другой выдавал на внешнее оборудование 16кГц.
Go to the top of the page
 
+Quote Post
KAlex
сообщение Mar 31 2008, 08:24
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 387
Регистрация: 20-12-06
Из: Obninsk
Пользователь №: 23 719



Цитата(_4afc_ @ Mar 31 2008, 11:14) *
Например компилятор, который криво обрабатывает выходы из прерываний или переходы между ARM/THUMB.

Это как? Можно поподробнее.

Цитата(_4afc_ @ Mar 31 2008, 11:14) *
Или протокол обмена по USB может содержать внутри запреты прерываний с последующим ожиданием вашего таймера.

Не, такого нет.

Цитата(_4afc_ @ Mar 31 2008, 11:14) *
Часть функций может распологаться в озу и рекурсивный вызов некоторых функций может вызывать наползание стека на функцию.

Тоже нет.

Цитата(_4afc_ @ Mar 31 2008, 11:14) *
Может влиять порядок инициализации таймера или USB, время между подачей частоты на перефирию и установка в ней регистров.

Непонятно. (с)

Цитата(_4afc_ @ Mar 31 2008, 11:14) *
Даже банальные иголки от цепей подключенных к 50Гц.

Прерывания от таймера никакими ногами не дергает. Чисто внутреннее.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Mar 31 2008, 09:06
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(KAlex @ Mar 31 2008, 12:24) *
Это как? Можно поподробнее.


Например WinAVR криво компилирует MSD если установлены ключи thumb
intrframework. Причём видно это на USB. Другие части кода работают нормально.
IAR вроде имел проблемы с преамбулой в обработчиках в какихто режимах.

Цитата(KAlex @ Mar 31 2008, 12:24) *
Непонятно. (с)


Был код или камень в котором USB работал, только если USB включить сразу при инициализации PLL.
Был код или камень в котором SSC работал, только если SSC включить только пепед непосредственной инициализацией его регистров.

Советую начинать отделять мух от котлет. Для начала разнесите на FIQ и IRQ.
Заодно посмотрите какой тип прерываний используете по фронту или по уровню и соответствует ли это типу вашего подтверждения (выхода) из прерывания.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 31 2008, 10:32
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(_4afc_ @ Mar 31 2008, 12:06) *
Например WinAVR криво компилирует MSD если установлены ключи thumb intrframework.
WinARM, наверное? Фигушки. И без --thumb-interwork генерит кривой пролог/эпилог.
Цитата(_4afc_ @ Mar 31 2008, 12:06) *
IAR вроде имел проблемы с преамбулой в обработчиках в какихто режимах.
Не нарывался. Скорее всего вы что-то путаете.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Apr 1 2008, 07:54
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(Сергей Борщ @ Mar 31 2008, 14:32) *
Не нарывался. Скорее всего вы что-то путаете.

Я IAR не пользовался, возможно спутал с приведённой вами ссылкой про GCC.
Цитата(Сергей Борщ @ Mar 31 2008, 14:32) *
WinARM, наверное? Фигушки. И без --thumb-interwork генерит кривой пролог/эпилог.

WinAVR - конечно WinARM. У меня прерывания на асм написаны. И даже без --thumb-interwork, а просто если перенести весь или часть кода в thumb, то MSD коннектится не ко всем машинам стоящим в офисе. Причину не установил пока. Отваливается с повисанием контроллера. JTAG не разведён, поэтому сложно установить причину.
Заложил в новую партию SAM7S256 вместо SAM7S64, буду эксперементировать с кодом в озу и thumb для ускорения обмена более 2Мбит.

2KAlex:
А вы AT91C_BASE_AIC -> AIC_EOICR = AT91C_ID_TC0; делаете один раз? у вас в эпилоге или том, что вызывает timer0_irq_handler не пишется AIC_EOICR ? В этот регистр можно хоть 666 писать...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:22
Рейтинг@Mail.ru


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