PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Eigentlich simple I/O operation funktioniert nicht.



sloti
29.03.2011, 10:10
Hallo,

ich habe ein ARM Starter KIT von IAR System. Das läuft mit dem LPC1786 von NXP. Also Cortex M3. Als Entwicklungsumgebung verwende ich die IAR Embeded Workbench. Nun habe ich versucht ein simples Programm zu schreiben, dass einfach nur eine led einschalten soll. Allerdings tut sich einfach überhaupt nichts.
Hier einmal mein Code. Ich hoffe es kann mir jemand helfen.


#include <nxp/iolpc1768.h>
#include <intrinsics.h>
#include <assert.h>
#include
#include <stdio.h>

void InitClock(void)
{
// 1. Init OSC
SCS_bit.OSCRANGE = 0;
SCS_bit.OSCEN = 1;
// 2. Wait for OSC ready
while(!SCS_bit.OSCSTAT);
// 3. Disconnect PLL
PLL0CON_bit.PLLC = 0;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 4. Disable PLL
PLL0CON_bit.PLLE = 0;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 5. Select source clock for PLL
CLKSRCSEL_bit.CLKSRC = 1; // Selects the main oscillator as a PLL clock source.
PCLKSEL0 = PCLKSEL1 = 0; // other peripherals 100/4 = 25MHz
// 6. Set PLL settings 300 MHz
PLL0CFG_bit.MSEL = 25-1;
PLL0CFG_bit.NSEL = 2-1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 7. Enable PLL
PLL0CON_bit.PLLE = 1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
// 8. Wait for the PLL to achieve lock
while(!PLL0STAT_bit.PLOCK);
// 9. Set clk divider settings
CCLKCFG = 3-1; // 1/3 Fpll
// 10. Connect the PLL
PLL0CON_bit.PLLC = 1;
PLL0FEED = 0xAA;
PLL0FEED = 0x55;
}




int main()
{

InitClock();
FLASHCFG=(1<<14);

FIO1DIR=(1<<25);
FIO1SET=(1<<25);




while(1);
}mfg
Erik

dremler
29.03.2011, 18:31
Hallo,
ich beschäftige mich auch grad mit ARM (Cortex)

Allerdings von STMicroelectronics.

Sollte aber alles ähnlich sein.

Was mir auffällt:

1. ein leeres Include
2. Weißt du der Peripherie irgendwo einen Takt zu? Also dort wo die LED dranhängt?
beim STM32 muss man folgende Reihenfolge beachten:
http://www.mikrocontroller.net/articles/STM32F10x_Standard_Peripherals_Library

also a) Takt aktivieren b) Takt verteilen c) Port Richtung festlegen d) Geschwindigkeit einstellen

Dann erst kannst du drauf zugreifen...

3. Bin nicht so fit in C aber probier mal so:



while(1)
{LED AN;
LED AUS;
}

nat. mit den entsprechenden befehlen. Ev. dazwischen jeweils ne Schleife, damit du auch was siehst:)