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

 
 
 
Reply to this topicStart new topic
> вопрос про ресет, AT91SAM7X
Sergei_K
сообщение Dec 5 2007, 11:45
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 49
Регистрация: 14-02-07
Пользователь №: 25 346



У меня вопрос: как корректно сбросить перриферию при помощи Reset Controller?

Я делаю сброс так:
pRSTC->RSTC_RCR = AT91C_RSTC_PERRST |
AT91C_RSTC_KEY_PASS;

Однако после выполнения этой команды программа подвисает пока не производится внешний сброс..
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 5 2007, 12:06
Сообщение #2


Гуру
******

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



Встречный вопрос: а зачем это нужно?

Прерывания запрещены? С remap'ом как обстоят дела?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 5 2007, 12:07
Сообщение #3


Гуру
******

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



Цитата(Sergei_K @ Dec 5 2007, 13:45) *
Однако после выполнения этой команды программа подвисает пока не производится внешний сброс..
Ага, тоже наступал. Надо после этой команды дождаться сброса флага SRCMP.


--------------------
На любой вопрос даю любой ответ
"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
Sergei_K
сообщение Dec 5 2007, 13:32
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 49
Регистрация: 14-02-07
Пользователь №: 25 346



Цитата(aaarrr @ Dec 5 2007, 18:06) *
Встречный вопрос: а зачем это нужно?


Интересный вопрос.. smile.gif Ну если уж вам так интересно: при работе с Timer/Counter используется функция выставления на ноге TIOA высокого, либо низкого уровня при достижении счетчиком значений, прописанных в регистры RA, RC (то есть переключение уровней).. Так вот, в некоторые моменты на данной ноге остаются нежелательные уровни, поэтому перед прописыванием очередных значений в регистры RA и RC хотелось бы сбрасывать Таймер (чтобы на TIOA был дефолтный уровень).. Команда SWTRG: Software Trigger Command сбрасывает только значение регистра CV и не влияет на TIOA.. Поэтому не вижу другой альтернативы, кроме как сбрасывать перриферию..

Цитата(aaarrr @ Dec 5 2007, 18:06) *
Прерывания запрещены? С remap'ом как обстоят дела?


Прерывания запрещать пробовал.. эффекта нет.. Ремап не делал..

Цитата
Ага, тоже наступал. Надо после этой команды дождаться сброса флага SRCMP


попробовал, результат тот же.. Дожидаюсь флага SRCMP следующим образом:

pRSTC->RSTC_RCR = AT91C_RSTC_PERRST |
AT91C_RSTC_KEY_PASS;

while ((pRSTC->RSTC_RSR & AT91C_RSTC_SRCMP) != 0);
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 5 2007, 13:54
Сообщение #5


Гуру
******

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



Цитата(Sergei_K @ Dec 5 2007, 15:32) *
попробовал, результат тот же..
У меня сбрасывалось... Учитываете, что настройки pll тоже сбрасываются? Может оно у вас работает, но мееедленно?
Цитата(Sergei_K @ Dec 5 2007, 15:32) *
Команда SWTRG: Software Trigger Command сбрасывает только значение регистра CV и не влияет на TIOA..
Судя по даташиту, за реакцию TIOA на Sofware Trigger влияет значение битов ASWTRG. Не пробовал, но в эррате противопоказаний нет.


--------------------
На любой вопрос даю любой ответ
"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
Sergei_K
сообщение Dec 5 2007, 14:34
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 49
Регистрация: 14-02-07
Пользователь №: 25 346



Цитата(Сергей Борщ @ Dec 5 2007, 19:54) *
У меня сбрасывалось... Учитываете, что настройки pll тоже сбрасываются? Может оно у вас работает, но мееедленно?


вот это возможно.. при первой возможности проверю..

Цитата(Сергей Борщ @ Dec 5 2007, 19:54) *
Судя по даташиту, за реакцию TIOA на Sofware Trigger влияет значение битов ASWTRG. Не пробовал, но в эррате противопоказаний нет.


а вот за это вам огромное спасибо smile.gif Этот бит я проморгал.. С ним все заработало как надо, так что вопрос со сбросом перриферии откладывается до лучших времен.. Тем более, что конструкция:

pRSTC->RSTC_RCR = AT91C_RSTC_PROCRST |
AT91C_RSTC_PERRST |
AT91C_RSTC_KEY_PASS;

в принципе работает и пока устраивает..
Go to the top of the page
 
+Quote Post

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

 


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


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