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

 
 
> сторожевой таймер в at91sam7s256
sergey sva
сообщение Oct 24 2009, 12:55
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Где бы пример посмотреть работы с WDT на сайте atmel таких примеров нет. Регистр WDT_CR для сброса таймера, но как понял
что после этого его нуэно заново настраивать (вызывает повторную инициализацию) ?ссылка
Код
#if WDT_ON
     /* Сброс сторожевого таймера                                          */
     AT91C_BASE_WDTC->WDTC_WDCR = (AT91C_WDTC_WDRSTT | AT91C_WDTC_KEY );
     /* установки сторожевого таймера                                      */
     AT91C_BASE_WDTC->WDTC_WDMR = (AT91C_WDTC_WDV | AT91C_WDTC_WDRSTEN | AT91C_WDTC_WDRPROC | AT91C_WDTC_WDD);

#else

   /* После сброса, сторожевой таймер включен. Выключение таймера.         */
      AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS;
#endif

В дальнейшем коде его нужно сбрасывать, если сбрасывать так AT91C_BASE_WDTC->WDTC_WDCR = (AT91C_WDTC_WDRSTT | AT91C_WDTC_KEY );
то его каждый раз нужно настраивать?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sergey sva
сообщение Oct 24 2009, 17:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Еще такой вопрос,хотелось бы чтобы вы глянули своим опытным глазом,smile.gif светодиод мигает примерно за 11 секунд, включился 11секунд
выключился. Частота pll 96мгц. pll выбран в качестве основного генератора AT91C_BASE_PMC->PMC_MCKR |= AT91C_PMC_CSS_PLL_CLK;
AT91C_BASE_PMC->PMC_MCKR = AT91C_PMC_PRES_CLK_2.
Код
#include "at91sam7s256.h"
AT91S_PIO * pPIO = AT91C_BASE_PIOA;
#define OUT_MASK        (1UL<<29)

unsigned long tt = 0;
int main(void){
      AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOA);
      pPIO->PIO_PER  = OUT_MASK;
      pPIO->PIO_OER  = OUT_MASK;
      pPIO->PIO_SODR = OUT_MASK;
      pPIO->PIO_CODR = (1UL<<29);

for(;;){
    if(tt < 10000000){tt++;}else {tt=0;}

    if(tt >5000000){pPIO->PIO_SODR =  (1<<29);} else{pPIO->PIO_CODR =  (1<<29);}
}



return 0;
}//end main

11секунд кажется слишком долго, для частоты 48 мгц , ведь процессор должен работать на такой частоте ,если выбран в качестве основного pll?
И мигать он тогда должен с частотой 1секунда. ?

Сообщение отредактировал sergey sva - Oct 24 2009, 17:22
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Oct 24 2009, 18:20
Сообщение #3


Гуру
******

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



Цитата(sergey sva @ Oct 24 2009, 21:22) *
11секунд кажется слишком долго, для частоты 48 мгц , ведь процессор должен работать на такой частоте ,если выбран в качестве основного pll?
И мигать он тогда должен с частотой 1секунда. ?

"Кажется" - это немного неправильный подход, вам так не кажется?

Вот что дает дизассемблирование такого цикла (компилятор RVDS 2.2):
Код
        0x0000002c:    e1500003    ..P.    CMP      r0,r3
        0x00000030:    23a00000    ...#    MOVCS    r0,#0
        0x00000034:    2a000003    ...*    BCS      {pc} + 0x14 ; 0x48
        0x00000038:    e2800001    ....    ADD      r0,r0,#1
        0x0000003c:    e1500004    ..P.    CMP      r0,r4
        0x00000040:    85812030    0 ..    STRHI    r2,[r1,#0x30]
        0x00000044:    8afffff8    ....    BHI      {pc} - 0x18 ; 0x2c
        0x00000048:    e5812034    4 ..    STR      r2,[r1,#0x34]
        0x0000004c:    eafffff6    ....    B        {pc} - 0x20 ; 0x2c

Цикл выполняется за 13 тактов, если 0 < tt <= 5M, или 11 тактов, если tt > 5M. Т.е мигать он должен с частотой примерно 0.63Гц.
Посмотрите, как скомпилировалось у вас.
Go to the top of the page
 
+Quote Post



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

 


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


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