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

 
 
 
Reply to this topicStart new topic
> Полный сброс SAM7, RSTC_RCR или WDT
KAlex
сообщение May 15 2008, 10:22
Сообщение #1


Местный
***

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



Железка подключена к компу по usb.
Иногда возникает необходимость рестарта.
если даю команду:
AT91C_BASE_RSTC->RSTC_RCR = AT91C_SYSC_PROCRST | AT91C_SYSC_PERRST | (0xA5 << 24);
комп пишет "устройство не определено"
Если же сбрасываться по собаке, все ок.
Почему? В чем разница?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 15 2008, 10:59
Сообщение #2


Гуру
******

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



А pull-up на USB как управляется?
Go to the top of the page
 
+Quote Post
KAlex
сообщение May 15 2008, 11:12
Сообщение #3


Местный
***

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



PA19.
При начале инитдевайс в 0. Инит достаточно долгий, около 5 сек. Затем в 1.
Инит проходит, что через WDT, что програмно. 100%.
Go to the top of the page
 
+Quote Post
_dem
сообщение May 15 2008, 11:44
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



Есть ньюанс smile.gif
Код
void Reset( void )
{

    // perfoming MCU reset using RESET controller
    AT91C_BASE_RSTC->RSTC_RCR = (0xA5000000) | (AT91C_RSTC_PROCRST) | (AT91C_RSTC_EXTRST) |(AT91C_RSTC_PERRST); // Reset CPU;PERIPHERAL;NRST
    
    // waiting for reset complete
    while (AT91C_BASE_RSTC->RSTC_RSR && AT91C_RSTC_SRCMP) {};
    
    void (*resetVector)(void) = 0x000000;
    resetVector();
}


Последнее - resetVector() - контрольная перестраховка smile.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 15 2008, 11:56
Сообщение #5


Гуру
******

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



Цитата(_dem @ May 15 2008, 15:44) *
Последнее - resetVector() - контрольная перестраховка smile.gif

Да здесь сплошь перестраховки. Достаточно сделать так:
Код
    while(0x01)
        AT91C_BASE_RSTC->RSTC_RCR = (0xa5UL << 0x18) | AT91C_RSTC_PROCRST | AT91C_RSTC_PERRST;
Go to the top of the page
 
+Quote Post
_dem
сообщение May 15 2008, 12:01
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 263
Регистрация: 2-02-07
Из: CN, Ukraine
Пользователь №: 24 970



Можно.
Для меня в свое время было откровением, что просто дать команду сброса недостаточно. Надо еще дождаться, пока ты сам себя сбросишь smile.gif

Для меня важно то, что после многих итераций вышеприведенный код нормально (тьфу-тьфу-тьфу) работает на всех наших проектах с SAM7 (S/X).
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 15 2008, 12:05
Сообщение #7


Гуру
******

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



Цитата(_dem @ May 15 2008, 16:01) *
Для меня в свое время было откровением, что просто дать команду сброса недостаточно. Надо еще дождаться, пока ты сам себя сбросишь smile.gif

Ну, дождаться можно и просто ничего не делая smile.gif

2 KAlex: а что будет, если после неудачного сброса шнурок USB передернуть?
К сожалению, сейчас нет под рукой платы с управлением USB pull-up.
Go to the top of the page
 
+Quote Post
KAlex
сообщение May 16 2008, 06:50
Сообщение #8


Местный
***

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



Цитата(aaarrr @ May 15 2008, 15:05) *
а что будет, если после неудачного сброса шнурок USB передернуть?

Если передернуть, то устройство определяется.
Сделал сброс с ожиданием, пока полет нормальный.
Go to the top of the page
 
+Quote Post

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

 


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


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