Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: сторожевой таймер в at91sam7s256
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
sergey sva
Где бы пример посмотреть работы с 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 );
то его каждый раз нужно настраивать?
aaarrr
Цитата(sergey sva @ Oct 24 2009, 16:55) *
В дальнейшем коде его нужно сбрасывать, если сбрасывать так AT91C_BASE_WDTC->WDTC_WDCR = (AT91C_WDTC_WDRSTT | AT91C_WDTC_KEY );
то его каждый раз нужно настраивать?

Нет, не нужно, естественно.
sergey sva
Еще такой вопрос,хотелось бы чтобы вы глянули своим опытным глазом,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секунда. ?
aaarrr
Цитата(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Гц.
Посмотрите, как скомпилировалось у вас.
sergey sva
Цитата
"Кажется" - это немного неправильный подход, вам так не кажется?

вы правы smile.gif подход по методу пальцем в небо.

Компилятор gcc вот он на генерировал :
Код
  71                  .L6:
  72 0050 80309FE5         ldr    r3, .L8+4    @ tmp155,
  73 0054 002093E5         ldr    r2, [r3, #0]    @ tt.4, tt
  74 0058 2637A0E3         mov    r3, #9961472    @ tmp156,
  75 005c 963C83E2         add    r3, r3, #38400    @ tmp156, tmp156,
  76 0060 7F3083E2         add    r3, r3, #127    @ tmp156, tmp156,
  77 0064 030052E1         cmp    r2, r3    @ tt.4, tmp156
  78 0068 0500008A         bhi    .L2    @,
  79 006c 64309FE5         ldr    r3, .L8+4    @ tmp157,
  80 0070 003093E5         ldr    r3, [r3, #0]    @ tt.5, tt
  81 0074 012083E2         add    r2, r3, #1    @ tt.6, tt.5,
  82 0078 58309FE5         ldr    r3, .L8+4    @ tmp158,
  83 007c 002083E5         str    r2, [r3, #0]    @ tt.6, tt
  84 0080 020000EA         b    .L3    @
  85                  .L2:
  86 0084 4C309FE5         ldr    r3, .L8+4    @ tmp159,
  87 0088 0020A0E3         mov    r2, #0    @ tmp160,
  88 008c 002083E5         str    r2, [r3, #0]    @ tmp160, tt
  89                  .L3:
  90 0090 40309FE5         ldr    r3, .L8+4    @ tmp161,
  91 0094 002093E5         ldr    r2, [r3, #0]    @ tt.7, tt
  92 0098 1337A0E3         mov    r3, #4980736    @ tmp162,
  93 009c 4B3C83E2         add    r3, r3, #19200    @ tmp162, tmp162,
  94 00a0 403083E2         add    r3, r3, #64    @ tmp162, tmp162,
  95 00a4 030052E1         cmp    r2, r3    @ tt.7, tmp162
  96 00a8 0400009A         bls    .L4    @,
  97 00ac 20309FE5         ldr    r3, .L8    @ tmp163,
  98 00b0 003093E5         ldr    r3, [r3, #0]    @ pPIO.8, pPIO
  99 00b4 0222A0E3         mov    r2, #536870912    @ tmp164,
100 00b8 302083E5         str    r2, [r3, #48]    @ tmp164, <variable>.PIO_SODR
101 00bc E3FFFFEA         b    .L6    @


Включил оптимизацию -О6 совсем другое дело:
Код
  69                  .L6:
  70 004c 020053E1         cmp    r3, r2    @ prephitmp.17, tmp152
  71 0050 013083E2         add    r3, r3, #1    @ prephitmp.17, prephitmp.17,
  72 0054 0030A083         movhi    r3, #0    @ prephitmp.17,
  73 0058 0200008A         bhi    .L3    @,
  74 005c 0C0053E1         cmp    r3, ip    @ prephitmp.17, tmp153
  75 0060 30008185         strhi    r0, [r1, #48]    @ tmp154, <variable>.PIO_SODR
  76 0064 F8FFFF8A         bhi    .L6    @,
  77                  .L3:
  78 0068 340081E5         str    r0, [r1, #52]    @ tmp154, <variable>.PIO_CODR
  79 006c F6FFFFEA         b    .L6    @
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.