at91sam7 - Hello World zu langsam ?

Gast #575049
Lesenswert?

Hallo NG,

nach langem hin und her und Hilfe hier aus dem Forum blinkt meine LED 
jetzt endlich! Ich habe allerdings das gefühl, dass sie das viel zu 
langsam tut (ca. 1x an und aus pro Sek.).

Weis jemand, was der auskommentierte Bereich "ENABLE PIT" bedeutet?

der Quelltext sieht so aus (IAR workbench):

        NAME    main

        PUBLIC  main

        COMMON  INTVEC:CODE
        CODE32

        B       main


        RSEG    ICODE:CODE
        CODE32

main:   NOP

// 
#######################################################################
//  It is assumed that a led is connected to PIOA17.
//  Adjust the code if your hardware is set up differently.
// 
#######################################################################

#define WDT_MR    0xFFFFFD44
#define WDT_MR_WDDIS  0x8000

#define PIT_MR    0xFFFFFD30
#define PIT_MR_PITEN_BIT  24
#define PIT_MR_PIV_BIT  0

#define PIOA_BASE    0xFFFFF400
#define PIOA_PER_P17  0x20000
#define PIOA_PER_OFFSET  0x0
#define PIOA_OER_OFFSET  0x10
#define PIOA_SODR_OFFSET  0x30
#define PIOA_PDSR    0xFFFFF43C
#define PIOA_CODR_OFFSET  0x34

// #define PIT_SR      0xFFFFFD34
// #define PIT_PIVR    0xFFFFFD38

// Startup code begin
// Disable Watchdog
// 
-----------------------------------------------------------------------
  ldr r0, =WDT_MR // load Watchdog address
  ldr r1, =WDT_MR_WDDIS // mask Disable bit
  str r1, [r0] // Watchdog disabled
// 
-----------------------------------------------------------------------
//Startup code end

// Enable PIT 
------------------------------------------------------------
//  ldr r0, =PIT_MR // PIT mode address
//  ldr r1, =1<<PIT_MR_PITEN_BIT|0xFFFFF<<PIT_MR_PIV_BIT
//  str r1, [r0]
// 
-----------------------------------------------------------------------

#define r0PIOA_BASE r0
  ldr r0PIOA_BASE, =PIOA_BASE

// PIO  control for pin 17
// 
-----------------------------------------------------------------------
  ldr r1, =PIOA_PER_P17 // mask Pin 17-20,24
  str r1, [r0PIOA_BASE,#PIOA_PER_OFFSET] //pin 17 PIO controlled
// 
-----------------------------------------------------------------------

// output for pin 17
// 
-----------------------------------------------------------------------
  ldr r1, =PIOA_PER_P17 // mask Pin 17
  str r1, [r0PIOA_BASE,#PIOA_OER_OFFSET] // pin 17 output
// 
-----------------------------------------------------------------------

loop:
// led on
// 
-----------------------------------------------------------------------
  ldr r1, =PIOA_PER_P17 // mask Pin 17
  str r1, [r0PIOA_BASE,#PIOA_CODR_OFFSET] // pins 17 on
// 
-----------------------------------------------------------------------

        ldr     r8, =0x1000

wait1:  subs    r8,r8,#1
        bne     wait1

// led off
// 
-----------------------------------------------------------------------
  ldr r1, =PIOA_PER_P17 // mask Pin 17
  str r1, [r0PIOA_BASE,#PIOA_SODR_OFFSET] // pins 17 off
// 
-----------------------------------------------------------------------

        ldr     r8, =0x1000

wait2:  subs    r8,r8,#1
        bne     wait2

        B loop
Gast #575099
Lesenswert?

@peter,
dein at91sam7 läuft mit dem sog. slow clock (~32khz). dieser ist nach 
den reset aktiv.

sieh dir mal die iar beispielprogramme an. dort findest du eine funktion 
namens AT91F_LowLevelInit. dieser kannst du die notw. schritte zur init. 
des clock-systems entnehmen.

gruss
gerhard

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren