LPCXpresso IDE erzeugt fehlerhaften Maschinencode?

OP Persönliche Seite #2298933
Lesenswert?

Ich habe hier ein eigenes Board mit dem LPC1754.
Als IDE hab ich kurzerhand LPCXpresso genommen.
Mein Board programmiere ich per ISP (also der Hardwarebootloader auf 
UART0)
Die Hex - Files dafür erzeugt mit LPCXpresso auch mit einer winzigen 
Modifikation.
Doch jetzt fängt der Spaß an, nach dem Programmieren schien der Code 
einfach nicht zu laufen, 4 Stunden Startup Code durchwühlen später bin 
ich dann einfach mal vom Bootloader aus direkt in eine sehr simple main 
gesprungen (adresse aus dem disassembler listing) und siehe da, GPIOs 
wackeln funktioniert.
Anscheinend ist der erzeugte Code von LPCXpresso so nicht lauffähig.

http://pastebin.com/KgayWJmT

Ist was der Disassembler draus macht.

Ein Sprung aus dem Bootloader nach 00000128 <ResetISR>: bringt nichts, 
der code hängt sich irgendwo auf.
Nur ein Sprung direkt nach 00000300 <main>: funktioniert, ist aber nicht 
sinn der sache, da so keinerlei startup code ausgeführt wird.

Hat jemand eine Idee woran das liegen könnte? Ich hab nicht mehr so ganz 
den durchblick gerade ...
OP Persönliche Seite #2298940
Lesenswert?

Achja der Code selbst ist vielleicht auch noch interessant ...
1
/*
2
===============================================================================
3
 Name        : main.c
4
 Author      : 
5
 Version     :
6
 Copyright   : Copyright (C) 
7
 Description : main definition
8
===============================================================================
9
*/
10

11

12
#include "LPC17xx.h"
13
#include <cr_section_macros.h>
14
#include <NXP/crp.h>
15

16
// Variable to store CRP value in. Will be placed automatically
17
// by the linker when "Enable Code Read Protect" selected.
18
// See crp.h header for more information
19
__CRP const unsigned int CRP_WORD = CRP_NO_CRP ;
20

21
// TODO: insert other include files here
22

23
// TODO: insert other definitions and declarations here
24

25
int main(void) {
26
   uint32_t i, j;
27

28
    /* SystemClockUpdate() updates the SystemFrequency variable */
29
    //SystemClockUpdate();
30

31
    LPC_GPIO2->FIODIR = 0x000000FF;    /* P2.xx defined as Outputs */
32
    LPC_GPIO2->FIOCLR = 0x000000FF;    /* turn off all the LEDs */
33

34
    while(1)
35
    {
36
    for(i = 0; i < 8; i++)
37
    {
38
      LPC_GPIO2->FIOSET = 1 << i;
39
      for(j = 1000000; j > 0; j--);
40
    }
41
    LPC_GPIO2->FIOCLR = 0x000000FF;
42
    for(j = 1000000; j > 0; j--);
43
    }
44
  return 0 ;
45
}
OP Persönliche Seite #2299564
Lesenswert?

Manchmal hilft drüber schlafen doch ... Bei genauerer Betrachtung ist 
mir dann aufgefallen, dass das SCS Register noch auf den default wert 
(1-20MHz und Main Oscillator Enable) gesetzt war, und da n diesem Fall 
im Startup Code gewartet wird bis der Main Oscillator Stabil ist (auch 
wenn er nicht als Taktquelle genutzt wird, das hab ich auf internen RC 
Oszillator gesetzt) hängt er sich ohne lebenszeichen einfach auf.

Also: Aufpassen wenn man den Startup Code von LPCXpresso nutzt und 
garkeinen Externen Quarz am Main Oscillator hat, egal ob man ihn nutzt 
oder nicht!

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