Beiträge anzeigen

Diese Sektion erlaubt es ihnen alle Beiträge dieses Mitglieds zu sehen. Beachten sie, dass sie nur solche Beiträge sehen können, zu denen sie auch Zugriffsrechte haben.

Nachrichten - Telekatz

31
Has du einen Reset gemacht, nachdem du Channel und Device Address an der Betty eingestellt hast. Hab gerade gemerkt, das da irgendwo ein Bug sein muss. Nach dem Einstellen ist  der Empfang deaktiviert.

Zitat
Channel 1 und IDs 0/1

Sicher, dass du Device Address und Channel nicht vertauscht hast? Device Address lässt sich nicht auf 0 einstellen, das ist die Broadcast address.
Channel muss auf beiden Bettys gleich sein.
32
Die machen das, nach dem die auch benannt sind.

"ask_for_time" veranlasst alle Bettys, die diese Nachricht empfangen und eine aktuelle Zeit haben, diese der anfragenden Betty mittels "send_time" zu übermitteln.

Die Beantwortung von "ask_for_time" und die Üernahme der empfangenen Zeit von "send_time" erfolgt im cc1100IRQ.

"send_time" wird auch nach dem Einstellen des Datums/Uhrzeit im Settingsmenue aufgerufen und übermittelt die Zeit an alle in Reichweite befindlichen Bettys.
33
Genauso wie bei Boop.

libpath im makefile.local definieren z.B.
LIBPATH = $(ARMBASE)/lib/gcc/arm-elf/4.1.1/interwork

LD den libpath mitteilen und mit "-lgcc" libgcc.a hinzufügen:
$(LD) $(ROMLDFLAGS) -L$(LIBPATH) -o.... -lgcc
34
Für die Auto-baud Erkennung darf die anfängliche Baudrate nicht beliebig hoch sein. Die Grenze liegt bei etwa 58k Baud.

35
Für möglich halte ich das schon. Hab's aber noch nie ausprobiert weil ich kein RFM12 hab.
Mach mal und gib rückmeldung.
36
Die zwei verschiedenen Structs kann man ja beibehalten. Allerdings weiß man ja bereits von vornherein, ob man ein Icon vom Typ icon_t oder iconElement_t verwenden möchte. Und da macht es bezüglich der Übersichtlichkeit des Codes keinen Sinn, den Typ mit einem Makro zu definieren. In der entsprechenden .h Icondatei ist es nicht ersichtlich, welchen Typ das Icon denn hat.

Das du sparsam mit den Ressourcen umgehen möchtest, dagegen ist ja nicht einzuwenden. Allerdings hat dir hier der Compiler beim Testdialog einen Strich durch die Rechnung gemacht.
Bei einem dieser Bilder vom Typ iconElement_t währe die theoretische Größe der Struct 54 Bytes. Da die Structs allerdings immer auf einer Adresse eines vielfachen von 32Bit abgelegt werden, ist die tatsächliche Größe aufgrund von Füllbytes 56Bytes. Ein icon_t währe hier auch nicht größer.

Da zudem der Aufruf für ein iconElement_t
drawIconExt (ix, LCD_SIZE_Y-1 - h,
         iconList [i]->data,
         iconList [i]->width, iconList [i]->height, ICON_GRAY,
         LCD_COLOR_B, DRAW_NORCU);

aufgrund von mehr übergebenen Parametern länger ist als der entsprechende icon_t Aufruf
drawIcon (ix, LCD_SIZE_Y-1 - h, iconList [i], LCD_COLOR_B, DRAW_NORCU);
wird der Code im Endeffekt um 12 Bytes größer.

Wohlgemerkt, in diesem speziellen Fall. Wären die Bilder nur 1bpp bei gleichen Abmessungen,  sähe die Sache wieder anders aus.

37
Hallo LeoTheLoewe,

hab mir mal deinen Code angeschaut:

icon.h
///////////////////////////////////////////////////////////////////
// ICON can be defined in the appropriate C file before
// including that header or the related icon files to define the
// actual type of the icon structure:
//
// >> #define ICON   iconElement_t
//
///////////////////////////////////////////////////////////////////
#ifndef ICON
#define ICON   icon_t
#endif

///////////////////////////////////////////////////////////////////
// ICON_INFO can be defined in the appropriate C file before
// including that header to save one byte in the icon structure:
//
// >> #define ICON_INFO(i)
//
///////////////////////////////////////////////////////////////////
#ifndef ICON_INFO
#define ICON_INFO(i)        /* info    = */ i,
#define ICON_INFO_ELEMENT   unsigned char info;   // additional one byte (iconType_t might be larger)
#endif

#ifndef ICON_INFO_ELEMENT
#define ICON_INFO_ELEMENT
//#define ICON_IS_GRAY(i)   0
#define ICON_IS_GRAY(i) (sizeof(i.data) > (i.height/8 + (i.height%8 ? 1 : 0)) * i.width + 2);
#else
#define ICON_IS_GRAY(i)   ((i)->info >= ICON_GRAY)
#endif


testmenu.c
//-----------------------------------------------------------------------------
#undef  ICON_INFO
#define ICON_INFO(i)

#undef  ICON_INFO_ELEMENT
#define ICON_INFO_ELEMENT

#undef  ICON
#define ICON   iconElement_t

#include "iconFr.h"
#include "iconPlay.h"
#include "iconPause.h"
#include "iconStop.h"
#include "iconFf.h"


Ist das nicht irgendwie viel zu kompliziert gedacht, mit den vielen defines zwei verschiedene Icon Structs zu definieren, nur um eventuell ein Byte in der Struct zu sparen? Das macht den Code nicht gerade übersichtlich.

Gruß
Telekatz
38
Hallo,

1. Programmierinterface bauen.
2. Boop oder original Firmware mit dem geeigneten tool flashen.

Gruß
Telekatz
39
Software / Re: JTAG
22. Apr 2010, 09:46
Hallo Astralix,

das ist so schon alles korrekt. Der Hintergrund ist folgender.

Beim LPC2220 wird zusammen mit dem System Reset auch der TAP Controller zurückgesetzt  (deshalb srst_pulls_trst). Dadurch ist es nicht möglich die Programmausführung bereits am Resetvektor zu unterbrechen.

Warn : srst pulls trst - can not reset into halted mode. Issuing halt after reset.

Bis OpenOCD dann das halt schickt ist Boop bereits mit der Initialisierung fertig und in der Main-Loop bereits in cpu_idle() gesprungen. Dort wird die CPU in den Idle Mode geschickt und der Prozessortakt abgeschaltet. Dadurch läuft der TAP Controller auch nicht mehr und es ist keine Verbindung über JTAG möglich.

Um dennoch eine Verbindung zu erhalten musst du auf der Betty die ANYKEY ;D Taste gedrückt halten:
void cpu_idle ()
{
/* fall through if a key was pressed */
if (ANYKEY)
return;

Dadurch wird cpu_idle() sofort wieder verlassen.

In der neuesten Version von Boop hab ich deshalb ein Flag eingebaut, dass den Idle Mode ausschaltet. Es wird erst dann gelöscht, wenn  der Power Down Modus aktiviert wird. Dies passiert frühestens, wenn die Hintergrundbeleuchtung erlischt. Genug Zeit für OpenOCD sich zu verbinden und das System anzuhalten.

Gruß
Telekatz
40
Software / Re: JTAG
16. Apr 2010, 19:59
So, mit diesem Script funktioniert es jetzt zufriedenstellend:

#
if { [info exists CHIPNAME] } {
   set  _CHIPNAME $CHIPNAME
} else {
   set  _CHIPNAME lpc2220
}

if { [info exists ENDIAN] } {
   set  _ENDIAN $ENDIAN
} else {
   set  _ENDIAN little
}

if { [info exists CPUTAPID ] } {
   set _CPUTAPID $CPUTAPID
} else {
   set _CPUTAPID 0x4f1f0f0f
}

#coonfigure reset options
jtag_nsrst_delay 50
jtag_ntrst_delay 50

#use combined on interfaces or targets that can't set TRST/SRST separately
reset_config trst_and_srst srst_pulls_trst trst_push_pull srst_push_pull

jtag_khz 1000

#jtag scan chain
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm7tdmi

# Event handlers
$_TARGETNAME configure -event reset-start {jtag_khz 1000}
$_TARGETNAME configure -event reset-init  {betty_init}

arm7_9 dcc_downloads enable

$_TARGETNAME configure -work-area-phys 0x40000000 -work-area-size 0x10000 -work-area-backup 0

#flash bank <name> <driver> <base_addr> <size> <chip_width> <bus_width> <target_number> [<target_name> <banks> <sectors_per_bank> <pages_per_sector> <page_size> <num_nvmbits> <ext_freq_khz>]
set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME cfi 0x80000000 0x00100000 2 2 $_TARGETNAME
flash bank $_FLASHNAME cfi 0x82000000 0x00100000 2 2 $_TARGETNAME

arm7_9 fast_memory_access enable

proc betty_init { } {   

   # setup PLL
   # PLLCON: Enable PLL, connect PLL
   mww 0xe01fc080 0x03
   # VBPDIV: no division
   mww 0xe01fc100 0x02
   # PLLCFG: 0x42 = psel = 10 (4) = msel= 00010 (3) = 240 mhz Fcco*/
   mww 0xe01fc084 0x42
   # Activate PLL settings
   #mww 0xe01fc08c 0xaa
   #mww 0xe01fc08c 0x55
   #sleep 100
   
   # Memory Bank Configuration
   # BCFG0: 16bit, rble, 2wst - 30 mhz : Betty: FLASH 0 @ 0x80000000
   mww 0xffe00000 0x10000420
   # BCFG2: 16bit, rble, 2wst - 30 mhz : Betty: FLASH 1 @ 0x82000000
   mww 0xffe00008 0x10000420

   # BCFG1: 8 bit, 3 sram wst, rble, 5 wst 3 idcy : Betty: LCD @ 0x81000000
   #mww 0xffe00004 0x00000400

   # GPIO Pin COnfiguration for Flash access
   # PINSEL0:
   mww 0xe002c000 0x00008005
   # PINSEL1:
   mww 0xe002c004 0x00000000
   # PINSEL2:
   mww 0xe002c014 0x0de049d4
   
   # IO2SET: Set Outputs
   mww 0xe0028024 0x1FC0000
   # IO2DIR: Set Direction
   mww 0xe0028028 0x1FC0000
   
   # IO0DIR:
   mww 0xe0028008 0x002018D0
   
    # disable watchdog
   #mww 0xfffffd44 0x00008000
   # enable user reset
   #mww 0xfffffd08 0xa5000001
}

proc flash_boop {IMAGE} {
   reset init
   flash erase_sector 0 0 last
   flash write_bank 0 $IMAGE 0
   reset run
}

# For more information about the configuration files, take a look at:
# openocd.texi
41
Software / Re: JTAG
14. Apr 2010, 22:38
Zitat
Das Flash selbst sollte via CFI erkannt werden, ob openocd das flashen direkt, bzw. mit einer Helper-Routine im RAM unterstützt, weiß ich (noch) nicht.


Es funktioniert,  wenn man openocd anpasst und den Flashbaustein der Betty hinzufügt (siehe Patch im Anhang).

Gruß
Telekatz
42
Software / Re: JTAG
13. Apr 2010, 22:26
Wenn ich die Reset Konfiguration ändere, dann funktioniert das Script bei mir:

#use combined on interfaces or targets that can't set TRST/SRST separately
reset_config trst_and_srst srst_push_pull
#trst_push_pull srst_push_pull


Und nicht vergessen den Energiesparmodus in Boop auszuschalten!

Gruß
Telekatz
43
Allgemeines / Re: Wozu das Ganze?
31. Mär 2010, 19:18
"Falsch" ist die Steckerbelegung nicht.

Die Belegung an JP6 wurde so gewählt, dass man ein Flachbandkabel mit aufgequetschten D-Sub Stecker kreuzungsfrei anlöten kann.  Sie entspricht der Pinreihenfolge von der eine Seite des D-Sub Steckers zur anderen Seite.
44
Allgemeines / Re: Wozu das Ganze?
29. Mär 2010, 08:47
Zitat
richtige Kondensatoren genommen? Auf den 1µF müsste 150 stehen, auf dem mit 100µF müsste 107 stehen. Sind diese Werte kritisch? Hab sie nah an den MAX gelötet


Laut Datenblatt des MAX3232 reichen 100nF. Probier es mal damit.

Häng die Schaltung (ohne Betty) zum testen mal an ein Netzteil mit 3,3V und schließ TX und RX am Stecker zur Betty kurz.  Starte ein Terminalprogramm und prüfe ob eingegebene Zeichen wieder zurück gesendet werden.

Gruß
Telekatz

45
Allgemeines / Re: Wozu das Ganze?
18. Mär 2010, 18:43
Zitat
Muss ich also zusätzlich zum Festspannungsregler (5V) für den Max232 noch einen 3,3V für die Ferbedienung einbauen?

Du musst überhaupt keinen Spannungsregler einbauen, die Schaltung wird von der Fernbedienung mit 3,3V versorgt.

Zitat
Aber der Max232 wird ja wohl nicht mit nur 3,3V laufen

Darum nimmt man ja auch einen MAX3232.

Gruß
Telekatz