Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

  • wacco
  • Registratie: Augustus 2002
  • Laatst online: 21-03-2023

wacco

cli, hlt.

Topicstarter
Er is al wat discussie geweest in de kroeg maar gooi het nu toch maar in een apart topic. Ik heb een printje met een LPC2136 en krijg hem niet opgestart. :(

De situatie;
  • Ik kan met de bootloader discusseren, flashen, code verifyen.
  • Daarmee neem ik aan dat de voeding stabiel genoeg is (hij is ontstoord met tig condensatoren)
  • Daarmee neem ik aan dat de klok loopt (kan de bootloader werken zonder klok? Het is een 25MHz kristal)
  • Ik gebruik de WinARM set van 2006
  • Ik probeer te werken met de daarvoor geporte examples, om precies te zijn, de UART example.
  • Ik heb de ROM.ld aangepast naar 256K, omdat ik een 36 en niet een 38 gebruik. target.h heb ik aangepast naar 25MHz klok (zie hieronder). Verder geen aanpassingen.
  • 90% van de tijd start 'ie niet op als ik P0.14 hoog hou, en reset hoog breng.
  • Eenmaal opgestart kan ik 40x resetten zonder problemen, maar flash opnieuw of breng ook P0.14 een keertje laag en we zijn weer terug in het bijna altijd fail.
  • 'opgestart' is hier dat UART1 hoog gaat, maar er wordt verder niets ge-echo'd op UART0, dus misschien dat het verhaal alsnog is vastgelopen.
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
target.c:
#define Fosc    25000000UL

/* System frequence,should be (1~32)multiples of Fosc,and should be equal or 
less than 60MHz. */
#define FCCLK   (Fosc * 1)
/* Used in example code */
#define Fcclk (Fosc * 1)

/* CCO frequence,should be 2/4/8/16 multiples of FCCLK, ranged from 156MHz to 
320MHz. */
#define Fcco    (FCCLK * 8)

/* VPB clock frequence , must be 1/2/4 multiples of (FCCLK / 4). */
#define Fpclk   (FCCLK / 4) * 1


Ik heb -geen- clue wat ik hiermee moet beginnen. Ik heb ook dit geprobeerd, alle leds laten knipperen;
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
main.c:
#include "LPC214x.h"

/* Main application entry, init all modules & enter runloop */
int main(void) {
    int i = 0, j = 0;
    /* All IO is shared between modules, so init them here:
     * PWM on pin P0.7, P0.8, P0.9 (RGB) and P0.21 (FPGA)
     * Led outputs on P1.17, P1.18, P1.19
     * Chip select lines outputs on P0.10, P0.11
     * TxD, RxD on P0.0, P0.1
     * SCL, SDA on P0.2, P0.3
     * SCLK, SO, SI on P0.4, P0.5, P0.6
     * Everything else is unused or input.
     */
    PINSEL0 = 0x000A9555;
    PINSEL1 = 0x00000200;
    PINSEL2 = 0;
    IODIR0 = 0;
    IODIR1 = 0x000E0000;
    
    IOSET0 = 0xFFFFFFFF;
    IOSET1 = 0xFFFFFFFF;
    
    /* Blink */
    while(1)
        if(i++) {
            if(j) {
                j = 0;
                IOCLR0 = 0x00000000;
                IOCLR1 = 0x00000000;
            } else {
                j = 1;
                IOSET0 = 0xFFFFFFFF;
                IOSET1 = 0xFFFFFFFF;
            }
        };
        
    return 0;
}

Dan in de standaard template makefile:
TARGET = main

# List C source files here. (C dependencies are automatically generated.)
# use file-extension c for "c-only"-files
SRC = $(TARGET).c 
#SRC += 
#SRC += 

# List C source files here which must be compiled in ARM-Mode.
# use file-extension c for "c-only"-files
#SRCARM = main.c
SRCARM += ../Common_WinARM/src/irq.c
SRCARM += ../Common_WinARM/src/target.c
SRCARM += ../Common_WinARM/src/timer.c

Compiled zonder problemen, flashed ook zonder problemen, doet vervolgens geen barst. :/

Ik ga nu naar school waar een oscilloscoop staat waarmee ik de voeding (na een reset) en klok (is die stabiel) ga checken maar verwacht dus geen rare dingen daar omdat de bootloader wel werkt. Weet iemand wat ik fout doe met de code? Verkeerde compiler/headers/opties..?

Spolap: Interactive webcomic


  • Sprite_tm
  • Registratie: September 2002
  • Laatst online: 29-10 06:07

Sprite_tm

Semi-Chinees

C:
1
2
main.c:
#include "LPC214x.h"


Weet je 1000% zeker dat de registers van de LPC214X op dezelfde plaats zitten als die van je LPC2136? Moet je niet LPC2136.h includen toevallig?


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    /* Blink */
    while(1)
        if(i++) {
            if(j) {
                j = 0;
                IOCLR0 = 0x00000000;
                IOCLR1 = 0x00000000;
            } else {
                j = 1;
                IOSET0 = 0xFFFFFFFF;
                IOSET1 = 0xFFFFFFFF;
            }
        };
        
    return 0;
}

Als je device op 25MHz draait, zal deze code je LEDs met een MHz of 5 laten knipperen. Bedoel je niet if (!(i++)) { ?

Komt bij dat je iirc de bits in IOCLR 1 moet maken als je de pin omlaag wilt brengen, niet 0 zoals je nu doet. Dat kan ik fout hebben tho'.

UART: IIRC moet je redelijk expliciet zelf de PLL en multipliers van je chip aanzetten; default draait je ARM-core op enkel je 25MHz van je kristal en je peripherials zelfs op slechts 1/4e ervan. Dat moet je wel meenemen als je de baudrate wilt berekenen.

[ Voor 15% gewijzigd door Sprite_tm op 17-12-2008 17:32 ]

Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog


  • Sphere-
  • Registratie: November 2003
  • Laatst online: 28-08 19:53
en verder moet je een 1 schrijven naar IOCLRx om de output pinnen laag te trekken.
Uit de datasheet:
GPIO Output Clear register 0 and 1 (IO0CLR - 0xE002 800C and
IO1CLR - 0xE002 801C)

This register is used to produce a LOW level at port pins if they are configured as GPIO in
an OUTPUT mode. Writing 1 produces a LOW level at the corresponding port pins and
clears the corresponding bits in the IOSET register. Writing 0 has no effect. If any pin is
configured as an input or a secondary function, writing to IOCLR has no effect.
Edit: Eroverheen gelezen dat sprite dat ook al zei, iig bevestiging nu.

Edit: verder kan je idd beter LPC213x.h included welke je bij WinARM hier kan vinden: WinARM\arm-elf\include\arch\philips\keil\LPC213x.h

[ Voor 16% gewijzigd door Sphere- op 17-12-2008 19:32 ]


  • mux
  • Registratie: Januari 2007
  • Laatst online: 19-11 16:51

mux

99% efficient!

ik zou ook even een timer interruptje of delay gebruiken en dan met een negate je poorten omflippen (portX ^= 0xffffffff;) voor diagnostics, want dit ziet er enigszins ieuw uit en gaat zoals gezegd extreem snel knipperen. Zelfs sprite kan niet zo snel zien, hoewel some say...

  • wacco
  • Registratie: Augustus 2002
  • Laatst online: 21-03-2023

wacco

cli, hlt.

Topicstarter
Ik had wat haast met het schrijven met die code. Bovenstaande zou in principe de led dus continue aan moeten hebben, maar dat gebeurt al niet.
Sprite_tm schreef op woensdag 17 december 2008 @ 17:29:
C:
1
2
main.c:
#include "LPC214x.h"


Weet je 1000% zeker dat de registers van de LPC214X op dezelfde plaats zitten als die van je LPC2136? Moet je niet LPC2136.h includen toevallig?
Voorbeeldcode gebruikt die, heb nog geen andere kunnen vinden.
Sphere- schreef op woensdag 17 december 2008 @ 19:22:
Edit: verder kan je idd beter LPC213x.h included welke je bij WinARM hier kan vinden: WinARM\arm-elf\include\arch\philips\keil\LPC213x.h
Verrek 8)7
Even snel een diff gedaan, enige verschil lijkt de notatie te zijn. Maar ga toch maar die 3x dan gebruiken.
Sprite_tm schreef op woensdag 17 december 2008 @ 17:29:
Als je device op 25MHz draait, zal deze code je LEDs met een MHz of 5 laten knipperen. Bedoel je niet if (!(i++)) { ?

Komt bij dat je iirc de bits in IOCLR 1 moet maken als je de pin omlaag wilt brengen, niet 0 zoals je nu doet. Dat kan ik fout hebben tho'.
Dat heb je niet fout, ik was door de lichte frustratie slordig. :P
UART: IIRC moet je redelijk expliciet zelf de PLL en multipliers van je chip aanzetten; default draait je ARM-core op enkel je 25MHz van je kristal en je peripherials zelfs op slechts 1/4e ervan. Dat moet je wel meenemen als je de baudrate wilt berekenen.
Voor zover ik het allemaal begrijp doet de startup.S dat door functies in target.c aan te roepen. Die heb ik verder niet aangeraakt, doen de demo's ook niet. Voor deze code maakt het natuurlijk ook niet echt uit, tenzij die waardes dus niet kunnen en de microcontroller erop vast loopt.
ssj3gohan schreef op woensdag 17 december 2008 @ 19:53:
ik zou ook even een timer interruptje of delay gebruiken en dan met een negate je poorten omflippen (portX ^= 0xffffffff;) voor diagnostics, want dit ziet er enigszins ieuw uit en gaat zoals gezegd extreem snel knipperen. Zelfs sprite kan niet zo snel zien, hoewel some say...
Lekker boeiend dat het ieuw is, het is maar een test. Een timer kan verkeerd ingesteld worden en dan ben ik alleen maar verder van huis. :P
Verder ben ik het wel met je eens natuurlijk. :>

Ik heb op school nog zitten meten, en ik zie keurige sinusjes bij de kristallen. Alleen maak ik me redelijk zorgen over de Vpp, hoort die zo laag te zijn? :?

Er zit wat meer spul op die printplaat dus hierbij de kristallen aanwezig;
6 MHz van de FT2232 - periode vlotter dan 0.1us? 4.0 Vpp - werkt wel goed
25MHz van de LPC2136 - periode ong 20ns, 0.4 Vpp ?? - werkt niet goed
26MHz van de CC2500 - periode iets vlotter dan 20ns, 0.2 Vpp ?? - kan niet testen zonder mcu
14.3MHz van de videodecoder - periode ong 55ns, 0.8 Vpp ?? - kan niet testen zonder mcu

Ze lijken me allemaal eigenlijk 2x te snel (usb is 1 / 0.1 = 10, iets sneller is 12, is een 6MHz kristal), dus misschien heb ik niet goed afgelezen. Aangezien de kristallen gewoon de juiste frequentie zijn en de USB wel werkt zal dat wel het geval zijn. Qua voltages daarentegen ben ik vrij zeker. Behalve dan of dat zo hoort.

De datasheet is niet veel duidelijker. Max voltage op XTAL1 mag maar 1.8V zijn en figuur 9.1 heeft het over Vdd. Zal dus wel niet over het kristal gaan. Dus kan zo'n Vpp nu wel of niet kloppen?

Als het niet zou kloppen is het daarbij ook gigantisch bizar dat de bootloader dus wel werkt en ik wel kan flashen. 8)7

Dit kristal is het; digikey, ik heb er parallel 2x een 22pF condensator naast zitten.

Spolap: Interactive webcomic


  • Sprite_tm
  • Registratie: September 2002
  • Laatst online: 29-10 06:07

Sprite_tm

Semi-Chinees

Meten aan kristallen is zowiezo wat icky: als je pech hebt vervormt de probe van je 'scoop alles zo dat het geheel op een andere frequentie gaat oscilleren.

Je kan dmv de bootloader ook een programmaatje naar RAM laden en het daar uitvoeren; kan je sw dat ook aan en zoja, heb je dat al wel es geprobeerd?

Als laatste maatregel zou je nog es kunnen proberen om een stukkie assembly te schrijven en daarmee de goede werking te testen; weet je iig zeker dat de lpc niet brak is. Kan ik je aanraden om eerst mij ff via icq of msn ofzo een schop te geven; ik heb hier nog het eea voor de LPC2138 liggen, misschien dat daar iets bijzit wat het mysterie kan oplossen.

Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog


  • wacco
  • Registratie: Augustus 2002
  • Laatst online: 21-03-2023

wacco

cli, hlt.

Topicstarter
Mja, ken dat probleem van het vergeten van pull-down/up weerstanden op bussen, als je het meet klopt het :p

M'n probleem is dat de FT2232 z'n DTR & RTS omhoog trekt in idle als deze aan de pc hangt. Deze worden (geinverteerd) gebruikt als signaal voor reset & P0.14. Dus zodra flash magic de poort sluit schieten die pinnen omhoog en wordt reset dus laag. Ik heb nog geen optie gevonden om de poort open te houden na reset (moet wel aanvinken in advanced -> keep DTR/RTS asserted during flashing om het zowiezo te laten werken). Dus flashen naar RAM is wat zinloos. :(

Ik ga morgenochtend nog even klooien met die andere header file, als dat niet helpt weet ik je te vinden want m'n ARM asm skills zijn redelijk ehh.. nonexistent ;)

Is er daarnaast andersom iemand met een werkend LPC printje, waar ik dan bovenstaande zet-ledje-aan voor kan compilen? Dan kunnen we in principe ook uitsluiten of het aan m'n print of aan de sw ligt.

Spolap: Interactive webcomic


  • wacco
  • Registratie: Augustus 2002
  • Laatst online: 21-03-2023

wacco

cli, hlt.

Topicstarter
Woeiz! :D

Heb het verhaal even een paar dagen laten liggen om m'n kop leeg te krijgen, en vanochtend dit getikt;
.text
.align 2
.global _start
_start:
	bal	Reset
	bal	.
	bal	.
	bal	.
	bal	.
	bal	.
	bal	.
	bal	.

Reset:
	ldr	r1, =0xE002C000	@; PINSEL0
	ldr	r2, =0x00000000
	str	r2, [r1]
	
	ldr	r1, =0xE002C004	@; PINSEL1
	str	r2, [r1]
	
	ldr	r1, =0xE002C014	@; PINSEL2
	str	r2, [r1]
	
	ldr	r1, =0xE0028008	@; IODIR0
	ldr	r2, =0xFFFFFFFF
	str	r2, [r1]
	
	ldr	r1, =0xE0028018	@; IODIR1
	str	r2, [r1]
	
	ldr	r1, =0xE0028004	@; IOSET0
	str	r2, [r1]
	
	ldr	r1, =0xE0028014	@; IOSET1
	str	r2, [r1]
	
Loop:
	ldr	r1, =0xE002800C	@; IOCLR0
	str	r2, [r1]
	
	ldr	r4, =1000000
l1:	subs	r4, r4, #1
	bne	l1
	
	ldr	r1, =0xE0028004	@; IOSET0
	str	r2, [r1]
	
	ldr	r4, =1000000
l2:	subs	r4, r4, #1
	bne	l2
	
	bal	Loop

Met link script;
/* Memory Definitions */
MEMORY
{
  ROM (rx) : ORIGIN = 0x00000000, LENGTH = 256k
  RAM (rw) : ORIGIN = 0x40000000, LENGTH = 32k
}

/* Section Definitions */
SECTIONS
{
   .text :
  {
	*(.text .text.*)
	. = ALIGN(4);
  } > ROM
}

Gecompiled en gelinkt door;
arm-elf-gcc-4.1.1.exe -Tlpc2136-test.ld -nostartfiles -Wl,-Map=test.map,
	--cref,-nostdlib -s -o test test.S
arm-elf-objcopy.exe --output-target ihex test test.hex

Conclusie; hoop knipperende lampjes. :P

Dus assembly werkt en de hardware werkt. Het probleem ligt duidelijk in de WinARM toolkit en/of m'n linker script. Ik heb m'n linker script even hier gepaste; http://pastebin.com/f5104eabf http://pastebin.com/f6c4de09e

Heeft iemand een idee wat het kan zijn? Ik kan bar weinig bronnen vinden over mensen die de LPC2136 gebruiken, iedereen lijkt voor z'n grote broertje te gaan en geen problemen te hebben :(

[ Voor 1% gewijzigd door wacco op 22-12-2008 11:03 . Reden: nog wat zitten klooien in script, de verkeerde online gemikt 8)7 ]

Spolap: Interactive webcomic


  • mux
  • Registratie: Januari 2007
  • Laatst online: 19-11 16:51

mux

99% efficient!

Het zijn ook geen microcontrollers die zo bijster lang bestaan. De meeste mensen die het gebruiken die ik ken worden gesponsord door nxp (studenten) of maken er kleine-oplagedingen mee. Ondanks dat het verreweg de goedkoopste arm7-based microcontrollers met fatsoenlijke docs en veel peripherals zijn wordt het niet echt superveel gebruikt...

  • DaWaN
  • Registratie: Oktober 2002
  • Laatst online: 20-11 16:11

DaWaN

'r you wicked ??

Je kunt ipv WinARM ook eens YAGARTO proberen:
http://www.yagarto.de/

Swieso zie ik bijna nooit WinARM gebruikt worden. YAGARTO wordt zelfs aangeraden door Atmel voor hun ARM serie µC's

If you do not change direction, you may end up where you are heading


  • wacco
  • Registratie: Augustus 2002
  • Laatst online: 21-03-2023

wacco

cli, hlt.

Topicstarter
Nog even de oplossing aan dit topic hangen, want ik heb het gevonden (gisteren al, maar ben meteen door gestormd met andere software problemen die ik tegen kwam :X).

Het probleem zit 'em in het feit dat target.h je klok configureert, maar dit blijkt een *kuch* dikke leugen te zijn. In de startup.S staat dit;
        .set PLL_SETUP,  1
        .set PLLCFG_Val, 0x00000024
...
                MOV     R3, #PLLCFG_Val
                STR     R3, [R0, #PLLCFG_OFS] 

En gaat dan vrolijk verder proberen te werken met die config. Dus de hele PLL liep in de soep, en geen klok is geen code execution :(

De truc is dus om PLL_SETUP op 0 te gooien en in je eigen init nog even TargetResetInit(); aan te roepen om alsnog de configuratie van target.h te laden. Dan werkt het wel. 8)
DaWaN schreef op maandag 22 december 2008 @ 12:03:
Je kunt ipv WinARM ook eens YAGARTO proberen:
http://www.yagarto.de/

Swieso zie ik bijna nooit WinARM gebruikt worden. YAGARTO wordt zelfs aangeraden door Atmel voor hun ARM serie µC's
Ah. Waarom vind ik dit soort dingen altijd een week te laat. Ik ga er eens naar kijken als ik niet richting deadlines zit te werken. ;)

Spolap: Interactive webcomic

Pagina: 1