XMega und EEPROM

  • 1
  • 2
  • Page 2 of 2
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMega und EEPROM

 · 
Posted: 25.02.2019 - 19:40  ·  #9
Quote by rh

Hallo Thorsten,

zu Banking Port:
In der vorliegenden Implementation können bis zu 16 banks mit jeweils 32kB definiert und verwaltet werden. Dies ergibt eine zusätzliche Speichergrösse von bis zu 512kBytes.
Dem Treiber ist es also fast egal wie gross dieser Bereich ist.
Aber wozu das Banking??
Hierfür bietet sich doch das UserPort an. Dazu gibt es zwei
Beispiele: AVR UserData und AVR UserDataI2C.

rolf

Hallo rolf,

Ja, aber ich muß zwischen SRAM und EEPROM unterscheiden können, deswegen das Banking.

Thorsten
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMega und EEPROM

 · 
Posted: 28.02.2019 - 10:35  ·  #10
Hallo rolf,

werden die BankDevOut und BankDevInp (bzw. UsrDevOut und UsrDevInp) in LOCK / UNLOCK ausgeführt?
Und wenn nicht wie kann man dann selbst in seinen Routinen
"BankDevOut/BankDevInp" ausführen?

Ich muss ja dann einen Process angeben!

Thorsten
Thomas.AC
Benutzer
Avatar
Gender: n/a
Age: 43
Posts: 308
Registered: 07 / 2013
Subject:

Re: XMega und EEPROM

 · 
Posted: 01.03.2019 - 16:53  ·  #11
Code
lock(self);


oder

Code

    if GetSchedulerState = true then
      // scheduler is running
      SchedulerOff;
      // do sth.
      SchedulerOn;
    else
     // do sth;
    endif;


eventuell auch
NOINTS, RESTOREINTS
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: XMega und EEPROM

 · 
Posted: 04.03.2019 - 09:45  ·  #12
Hallo Thomas,

danke für die Info. Die Frage die aber noch immer im Raum steht, brauche ich sowas oder regelt das der Treiber beim Zugriff?

@rolf;
Ich habe mir das Demo "AVR_UsrDataI2C" angeschaut, aber ich verstehe hier etwas nicht ganz.

Code
UserDevice UsrDevInp(adr : word) : byte;
var ok  : boolean;
    inp : byte;
begin
//  DisableInts;

  (* because of a possible previous write access *)
  (* the I2Cout function can fail upto 10msec    *)
  (* and a timeout loop must be implemented      *)
  (* don't forget your watchdog                  *)
  SetSysTimer(Timer1, 2);
  repeat
    ok:= I2Cout(I2Cadr +hi(adr), lo(adr));              // set the read address
  until isSysTimerZero(Timer1) or ok;
  if ok then
    I2Cinp(I2Cadr, inp);                                // read the byte
    return(inp);
  else
//  error ...
  endif;

//  EnableInts;
  return($ff);
end;


Warum wird bei "I2Cout()", die I2C-Adresse mit dem hi-Byte vom "adr" addiert? Ist das eine besondere Funktionsweise? An dieser stelle sollte doch nur die Slave-Adresse liegen oder?

Oder ist das irgendeine Besonderheit wegen der WordAdresse?

Thorsten
Attachments
I2COut
Filename: 04-03-_2019_09-40-36.jpg
Filesize: 130.81 KB
Title: I2COut
Information: I2COut
Download counter: 74
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: XMega und EEPROM

 · 
Posted: 04.03.2019 - 20:57  ·  #13
Hallo Thorsten,

nein, bei allen User und Bank Treibern wird kein Lock/unlock ausgeführt.
Ist evtl. zu gefährlich da es ja intern bzw. extern zu deadlocks kommen
kann und das Multitasking System zum stehen kommt.
Liegt in der Verantwortung des Users.

Zum UsrDevInp I2C kann ich momentan garnix sagen. Es tut einfach.
Ist schon viele viele Jahre her. Vermutlich ist das hi normalerweise zero.

rolf
  • 1
  • 2
  • Page 2 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 16 · Cache Hits: 15   97   112 · Page-Gen-Time: 0.03807s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI