closed

Loginbox

Please enter your username and password into the following fields to log in.


  • Username:
  • Password:
  •  
  • Auto log in on every visit.


  •  

DDRD und SerPortD0 stören sich



grech offline
Benutzer
Avatar
Gender: male
Location: GERMANY  Saarland
Age: 61
Posts: 15
Registered: 10 / 2015
Private message
Subject: DDRD und SerPortD0 stören sich  -  Posted: 04.06.2019 - 14:37   -  
Hallo zusammen,
ich verwende einen XMega und habe so ziemlich alle Ports belegt.
Wenn ich SerPortD0 verwende möchte und Bit4-7 am Port D anders konfigurieren möchte
funktioniert die serielle nicht mehr.
Lass ich die Konfiguration mittels DDRD weg geht die serielle.
Aber das nutzt mir ja nichts. Ich will ja die Bit4-7 als Ausgänge verwenden.
Kann mir jemand erklären was ich anders machen sollte.
Danke

Code

program XMEGA_CP2104;

device = XMega256A3U , VCC = 3.3;
{ $BOOTRST $20000}         {Reset Jump to $20000}

Import SysTick, SerPortD0, BeepPort, SysLEDblink;

//From System Import LongWord, word64;

Define
  // The XMegas don't provide any Oscillator fuses.
  // So the application must setup the desired values
  // possible OSC types: extXTAL, extClock, ext32kHz, int32Khz, int2MHz, int32MHz

  //>> CPU       =32MHz, PeripherX4=32MHz, PeripherX2=32MHz
  OSCtype        = int32MHz,
  PLLmul         = 4,
  prescB         = 1,
  prescC         = 1;
  SysTick        = 10;              // msec} 
  StackSize      = $0032, iData;
  FrameSize      = $0064, iData;

  SerPortD0      = 256000;          // 256 kbit
  TxBufferD0     = 40, iData;
  RXBufferD0     = 40, idata;

  BeepPort       = PortF, 7;
  SysLEDblink    = mSec300;           // 10..1000 msec
  SysLEDBlink0   = PortD, 5, high;    // LEDon = low level

Implementation

{$IDATA}

{--------------------------------------------------------------}
{ Type Declarations }
type

{--------------------------------------------------------------}
{ Const Declarations }
const

{--------------------------------------------------------------}
{ Var Declarations }
{$IDATA}
var
  ww     : word;
  st     : string[32];

{--------------------------------------------------------------}
{ functions }

{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
  // Port A Input - Schieberegister
  DDRA := %00000000;
  // Port B Output - Schieberegister
  DDRB := %11111111;
  // Port C wird von Schnittstellen verwendet RS485 (serC0) , TFT (TWIC) und SD (SPIC)
  // Initialisierung sollte durch die entspr. Treiber erfolgen
  // Port D, SERD0 als RS232, D4, D5 Ausgänge, D6, D7 USB

  DDRD := %11110111;   // Port D Output  D3 Input , bit 4-7 Output
  // Port E Schnittstellen Midi (serE0)
  DDRF := %11111011;   // Port F Output  F2 = IR-RXD
  mdelay( 100 );

  EnableInts($87);
  BeepOut(2000, 5);
  SysLEDflashAllOn;
  WriteLn(SerOutD0);

  WriteLn(SerOutD0, 'XMega Baud Test');

  loop
    mDelay(500);
    inc(ww);
    st:= 'Loop     : $'+IntToHex(ww);
    WriteLn(SerOutD0, st);
    BeepClick;
    while SerStatD0 do
      SerOutD0(SerInpD0);        // echo
    endwhile;
  endloop;
end XMEGA_CP2104.

go down go up
berndk offline
Benutzer
Avatar
Gender: n/a
Location: GERMANY  Leipzig
Age:
Posts: 22
Registered: 02 / 2006
Private message
Subject: Re: DDRD und SerPortD0 stören sich  -  Posted: 04.06.2019 - 17:05   -  
I would do it like this

DDRD := DDRD or %11110000;

this way you inherit the settings of the lower 4 bits

Bernd
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5464
Registered: 03 / 2002
Homepage Private message
Subject: Re: DDRD und SerPortD0 stören sich  -  Posted: 04.06.2019 - 17:44   -  
Hi,
with XMegas sollte man
OUTCLRp
OUTSETp
OUTTGLp
DIRSETp
DIRCLRp
DIRTGLp
verwenden um einzelne Port Bits zu manipulieren. Genial das ganze.
rolf
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
go down go up
Merlin offline
Schreiberling
Avatar
Gender: male
Location: UNITED KINGDOM 
Age:
Posts: 877
Registered: 03 / 2005
Private message
Subject: Re: DDRD und SerPortD0 stören sich  -  Posted: 04.06.2019 - 17:48   -  
I cannot test at moment, but your first problem may be that you are setting the direction of port D after the serial is initialised. In particular you are setting the serial Rx pin as an output and the Tx pin as an input (if I read the manual correctly). Try this for setting DDRD without modifying the serial pins

Code

  DDRD := DDRD or %11110000;


Or you could try

Code

  DDRD :=  %11111011;


but the first is safer.
Merlin.

:magic:

Software is a black art.
go down go up
grech offline
Benutzer
Avatar
Gender: male
Location: GERMANY  Saarland
Age: 61
Posts: 15
Registered: 10 / 2015
Private message
Subject: Re: DDRD und SerPortD0 stören sich  -  Posted: 05.06.2019 - 07:50   -  
Danke für die Antworten,
ich habe dann festgestellt, dass ich einen bit-Dreher drin hatte. Sorry.
Hab aber noch nicht getestet ob's gegangen wäre.

Mir gefallen die Methoden die rh genannt hat gut.
Leider vermisse ich eine Doku in der die genauen Auswirkungen der Zuweisungen
etwas umfangreicher beschrieben sind.
d.h.
was macht dirset := %01010101
Setzt es die 1en als Ausgänge und lässt die 0en unberührt?
was macht dirclr := %10101010
Setzt es die 1en als Eingänge und lässt die 0en unberührt?

Ebenso bei OUTSet und OUTClr.
Ist es so gemeint, dass immer nur die bits bei denen eine 1 in der Maske steht
verändert werden?

Gruß Grech
This post has been edited 2-times. Last edit: 05.06.2019 - 08:28 by grech.
go down go up
Harry offline
PowerUser
Avatar
Gender: male
Location: GERMANY  zwischen Augsburg und Ulm
Age: 54
Posts: 1538
Registered: 03 / 2003
Private message
Subject: Re: DDRD und SerPortD0 stören sich  -  Posted: 09.06.2019 - 07:42   -  
Hallo Grech,

von den Namen abgeleitet würde ich vermuten, daß SET nur setzt (die mit 1), CLR nur löscht (auch die mit 1) und TGL (toggle) nur kippt.

Gruss
Harry
Elektronik arbeitet mit Rauch - wenn man den Rauch raus läßt, funktioniert es nicht mehr.
Electronics works with smoke - if you let the smoke out, it works no longer.
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5464
Registered: 03 / 2002
Homepage Private message
Subject: Re: DDRD und SerPortD0 stören sich  -  Posted: 10.06.2019 - 21:58   -  
Hallo,
beim XMega unterstüzt der AVRco die speziellen Port Register:
Code
  SetBit(PORTD, 5, true);
  SetBit(DDRD, 5, true);
  SetBit(DDRD, 5, false);

das ergibt:
Code
                        .LINE     61
                        LDI       _ACCA, 020h
                        STS       OUTSETD, _ACCA
                        .LINE     62
                        LDI       _ACCA, 020h
                        STS       DIRSETD, _ACCA
                        .LINE     63
                        LDI       _ACCA, 020h
                        STS       DIRCLRD, _ACCA
rolf
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
go down go up
miparo offline
Schreiberling
Avatar
Gender: male
Location: GERMANY  Germany
Age: 53
Posts: 682
Registered: 09 / 2007
Private message
Subject: Re: DDRD und SerPortD0 stören sich  -  Posted: 10.06.2019 - 22:42   -  
Hi Rolf,
aber das tut der AVRco auch klassisch :

Code

DDRB.5:= True;
DDRB.5:= false;


ergibt
Code

LDI       _ACCA, 020h
STS       DIRSETB, _ACCA

LDI       _ACCA, 020h
STS       DIRCLRB, _ACCA
Kein Support per PN! | No support via PM!
go down go up
rh offline
Administrator
Avatar
Gender: male
Location: GERMANY  Germany
Age:
Posts: 5464
Registered: 03 / 2002
Homepage Private message
Subject: Re: DDRD und SerPortD0 stören sich  -  Posted: 10.06.2019 - 23:38   -  
Ich bin auch nicht immer update :aerger:
rolf
Cars don't buy cars -- Autos kaufen keine Autos.
Henry Ford
go down go up
miparo offline
Schreiberling
Avatar
Gender: male
Location: GERMANY  Germany
Age: 53
Posts: 682
Registered: 09 / 2007
Private message
Subject: Re: DDRD und SerPortD0 stören sich  -  Posted: 10.06.2019 - 23:43   -  
Der Entwickler verrät dir auch nichht alles :freude:
Kein Support per PN! | No support via PM!
go down go up
 


Registered users in this topic
Currently no registered users in this section

Delete cookies of this forum  •  FAQ / Help  •  Team page  •  Imprint   |  Local time: 17.08.2019 - 15:17