IAR workbench + olimex msp430-jtag-ISO

#1974947
Lesenswert?

hallo zusammen,

ich will einen msp430F1232 mittels olimex msp430-jtag-ISO Programmer und 
der IAR workbench programmieren.
ich habe die Treiber von olimex installiert und ins IAR .. Verzeichniss 
kopiert (alles laut Anleitung auf der olimex-Seite).

Nun ist es aber so, dass ich keine Erfahrung mit dem msp430, dem olimex 
Programmer und der IAR Workbench habe und mir deswegen verschiedene 
Tutorials, Anleitung und Beispiele angeschaut habe.
Auch die Beiträge hier im Forum zum Thema msp430 programmieren bin ich 
durchgegangen.

Das verwirrende ist das in jeder Anleitung, die man im Netz findet, auch 
andere Einstellungen in der IAR Workbench vorgenommen werden. Das mir 
einzigst Klare ist, dass unter "general options" --> Device meinen 
mps430f1232 auswählen muß.

diese ganze Testerei, mit den verschieden Anleitungen und 
unterschiedlichen Einstellungen hat zur Folge das ich jetzt bei 
"download und debug" eine Fehlermeldung bekomme "session could not be 
started ...   *.txt was corrupt or an unsopported Format"

Welche Einstellung ist nur die richtige?
Welche Einstellungen muß ich vornehmen?
muß ich "Debug" oder "Release" auswählen?
..
..


bitte helft mir Licht ins Dunkel zu bekommen.

Gruß dete
#1975307
Lesenswert?

Ich habe jetzt einige Erfolge erzielt.
Ich bin nochmal die die Tutorials durchgegangen die ich gefunden hatte 
und
und stieß, für die Einstellungen unter "options" auf dem Punkt:

Debugger --> setup --> override default  --> haken rein

download und debug starten und siehe da er tat was.
Es wurde erkannt dann mein target ein msp430f123 ist. ????
obwohl auf der TI Sample tüte msp430f1232 steht ???
naja habe also unter general options das device auf msp430f123 geändert 
und seit dem funktioniert es.

Aber es tauchen einige neue Fragen auf:

woran erkenne ich ob ich zum programmieren nun Jtag oder SPY-BI-WIRE 
benutze?

und:

an den Pins 28,27,26 und 25 des msp430 ist die jtag schnittstelle.
wenn ich aber diese Pins als GPIO (P1.7, P1.6 P1.5 und P1.4) nutze,
und nur zum Programmieren sie als jtag, Wie wird dann im debug modus 
zwischen jtag komm. und eigentlichen Daten die an den pins rein und raus 
sollen unterschieden?

oder seh ich das was falsch? und ja was?

z.Z letzte Frage:

Im debugmodus, an der stelle:
1
 P1DIR=0xFF;  // port 1 = output

steigt der Strom der in schaltung reinfließt extrem an. obwohl an dem 
port nichts angeschloßen ist? (nur halt die Jtag schnittstelle) 
eigentlich ist da ein LCD modul dranne(steckbar)
#1977030
Lesenswert?

hallo

ich benutze jtag, das ist nun sicher.
soweit funktioniert alles, auch der plötzlich es stromanstieg ist 
behoben.

--> jetzt gehts ans programmieren

habe dazu auch noch eine frage / problem
1
 for(;;) 
2
      {  
3
        if ((P2IN & 0x10) == 0 && tempp == 0 )
4
          {
5
           tempp = 1;
6
           inc++;
7
          }
8
        if ((P2IN & 0x10) == 1)
9
          {
10
           tempp = 0;
11
          }
12
      }

an P2.4 ist taster angeschloßen und in der endlosschleife (in der später 
noch mehr passieren soll) prüfe ich ob taster gedrückt ist oder nicht.
ist er gedrückt liegt an p2.4 low an und damit soll inc un eins erhöht 
werden.
damit das aber pro drücken nur einmal passiert, wird halt diese tempp =1 
gesetzt.
ist Taster nicht gedrückt liegt ein high an (mit oszi gemessen)

problem:
das ein low anliegt erkennt er und geht auch in die 1. if bedingung rein
aber das high erkennt er nicht und setzt dementsprechend tempp nicht 
wieder auf 0
und somit komme ich auch nicht wider in die erste if bedingung ???

was ist hier falsch?
Persönliche Seite #1977223
Lesenswert?

Dete Kosschlovsski schrieb:
> jetzt kapier ich gar nichts mehr

Wieso nicht?

Du müsstest entweder anstelle von

> if ((P2IN & 0x10) == 1)

mit dem Wert vergleichen, der bei einer verANDund mit 0x10 nur 
herauskommen kann:

> if ((P2IN & 0x10) == 0x10)

oder aber (und das macht Christians Beispiel) einfach nur überprüfen, 
daß das Ergebnis der verANDung wahr, also nicht 0 ist.

> if ((P2IN & 0x10) != 0)

oder, kürzer formuliert

> if (P2IN & 0x10)
Persönliche Seite #1977255
Lesenswert?

Dete Kosschlovsski schrieb:
> es wäre doch einfacher die pins einzeln abzu fragen, oder?

> also nur den P2.4 ober er ==0 oder ==1 ist
> geht das?

Nur auf wenigen Controllerarchitekturen, die den Zugriff auf einzelne 
Bits erlauben, und dann auch nur, wenn der C-Compiler für diese 
Architekturen diese einzelnen Bits wiederum in C-Datentypen verpackt.

Für die MCS-51-Reihe gibt es derartiges, aber für MSP430 nicht.

Einfacher ist das auch nicht, es bedarf nur etwas mehr Beschäftigung 
mit Bitoperationen in C.

Wer etwas mehr C programmiert, für den sind Ausdrücke wie die weiter 
oben vollkommen normal und transparent zu lesen.

In der AVR-Welt (die in diesem Forum recht häufig vertreten ist), werden 
übrigens gerne Konstanten für die Nummern der Bits verwendet und dann 
mit dem Schiebeoperator der Bitwert daraus bestimmt.

So etwas sieht dann so aus:
1
#define PIN4 4
2

3
if (P2IN & (1 << PIN4))

Das aber ist auf dem MSP430 wiederum ungebräuchlich, dort wird der 
Konstante nicht die Nummer, sondern der Wert des Bits zugewiesen und 
entsprechend anders abgefragt:
1
#define PIN4 0x10
2

3
if (P2IN & PIN4)

Die Bit_nummern sind für die AVR-Reihe wichtig, da dort die mit den 
üblichen Compilern ausgelieferten Headerdateien, die die 
Controllerperipherie beschreiben, auch von Assemblerprogrammen aus 
genutzt werden können sollen; die AVR-Reihe kann wie auch die 
MCS-51-Reihe bitweise auf Register zugreifen, und dafür ist das 
erforderlich.

Beim MSP430 aber enthalten die Headerdateien keine Bitnummern, sondern 
eben Bitwerte, und Du wirst in Codebeispielen von TI praktisch nie die 
(1 << Bitnummer)-Notation finden.
#1984604
Lesenswert?

hallo

erstmal vielen Dank für euere Antworten und eure hilfe.
in den letzten Freizeitstunden hab ich viel am Quellcode geschafft.

mein anfängliches Tasterproblem hat sich auch erledigt -- Es ist mir wie 
schuppen von den Augen gefallen

aber ein kleines großes Problem ahb ich noch:

ich muß über 400 (genauere zahl kann ich noch nicht nennen) x 5 byte 
speichern.

Anfangs hatte ich mir eine switch anweisung überlegt

a la:

..
..
case 100:
Din[0] = 12;
Din[1] = 24;
Din[2] = 8;
Din[3] = 34;
Din[4] = 1;
break;
case 101:
Din[0] = 255;
Din[1] = 89;
Din[2] = 87;
Din[3] = 32;
Din[4] = 11;
break;
.
.
usw...

aber auch Speichergründen hatte ich das verworfen und bin auf:

char D1[400] = {1,23,56,75,7,8 ....
char D2[400] = {23,2,5,15,7,81 ....
char D3[400] = {14,223,52,35,7,28 ....
char D4[400] = {21,213,143,45,7,84 ....
char D5[400] = {17,233,150,77,7,82 ....

aber bei so vielen Werten mekkert der comiler rum, selbst bei nur 50 
Werten pro array.
testhalber sind die Arrays jetzt nur 25 lang

compilermeldung:

Error[e16]: Segment CSTACK (size: 0x50 align: 0x1) is too long for 
segment definition. At least 0x2d more bytes needed. The problem 
occurred while processing the segment placement command 
"-Z(DATA)CSTACK+_STACK_SIZE#",
where at the moment of placement the available memory ranges were 
"CODE:2dd-2ff"
   Reserved ranges relevant to this placement:
   200-2c9              DATA16_I
   2ca-2dc              DATA16_Z
   2dd-2ff              CSTACK


wie kann ich die ca 400 x 5 byte speichern?
#1984682
Lesenswert?

wollt gearden schreiben das ich das gefunden habe.

ich bekomme die Meldung:

   IAR C/C++ Compiler V5.10.6.30180/W32, Kickstart edition for MSP430
   Copyright 1996-2010 IAR Systems AB.

 936 bytes of CODE  memory
 127 bytes of CONST memory
 146 bytes of DATA  memory (+ 14 bytes shared)


...

     IAR Universal Linker V4.61T/W32
     Copyright (C) 1987-2010 IAR Systems AB.

 1 670 bytes of CODE  memory
   201 bytes of DATA  memory (+ 14 absolute )
   102 bytes of CONST memory


...

wenn ich mir die Werte anschaue, würde ich sagen das die etwa 2kB  für 
die array da noch rein passen. Das Programm ist komplett.
#1986447
Lesenswert?

nur zur info:

ich habe das Problem gelöst.
Da sich die Werte in den 5 char Arrays nicht ändern und nur gelesen 
werden,
habe ich sie als const char [] .. deklariert.
somit mekkert der Compiler oder Linker nicht rum.

@ all: danke für eure hilfe,
Ich wünsche euch allen ein frohes Fest

gruß Dete

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