Repeated-Start Funktion für ältere Megas

UPI
 
Avatar
 
Subject:

Repeated-Start Funktion für ältere Megas

 · 
Posted: 09.03.2023 - 16:53  ·  #1
Im Zuge eines Projektes, brauchte ich die Repeated-Start Funktion (lesen) des AVR TWI.
Da es so etwas im AVRco nicht gibt, habe ich kurzer Hand eine Erweiterung des TWI als Treiber geschrieben.
Wer also so eine Funktion für die älteren AVRs braucht (Mega128, Mega 2560 etc.) bedient sich bitte.

Grüße
UPI
Attachments
Unit AVRTWIRS;
||| Extension of the AVRco TWI Master with the Repeated Start function
|||
||| Udo Purwin
||| Version 1.00 initial Release
||| 07.03.2023
|||

interface
//Reads data from the client with a word as command and Repeated Start
function TWIInpRSWP(SlaveAdr : Byte; Command : Word; Data : Pointer; Size : Word) : Boolean;
//Reads data from the client with a Byte as command and Repeated Start
function TWIInpRSBP(SlaveAdr : Byte; Command : Byte; Data : Pointer; Size : Word) : Boolean;

implementation

const
TWINT : Byte = 7;
TWEA : Byte = 6;
TWSTA : Byte = 5;
TWSTO : Byte = 4;
TWWC : Byte = 3;
TWEN : Byte = 2;
TWIE : Byte = 0;
{--------------------------------------------------------------}
{$IDATA}
var
TWITimeout : SysTimer8;
Const
_TWITimeOutms : Word = 50;
{--------------------------------------------------------------}
{ functions }

Function TWI_start : Boolean;
begin
//Clear TWI INT, Start and Enable TWI
TWCR := (1 SHL TWINT) OR (1 SHL TWSTA) or (1 SHL TWEN);
//Start transmitted?
Repeat
if isSysTimerZero(TWITimeout) then //TimeOut? Abbort!
Return(False);
endif;
Until Bit(TWCR, TWINT);
//Check AKN
Repeat
if isSysTimerZero(TWITimeout) then //TimeOut? Abbort!
Return(False);
endif;
Until ((TWSR AND $F8) = $08) OR ((TWSR AND $F8) = $10);
Return(True);
end;

Function TWI_stop : Boolean;
begin
//Clear TWI INT, Stop and Enable TWI
TWCR : = (1 SHL TWINT) OR (1 SHL TWEN) OR (1 SHL TWSTO);
// Stop transmitted?
Repeat
if isSysTimerZero(TWITimeout) then //TimeOut? Abbort!
Return(False);
endif;
Until Bit(TWCR, TWSTO);
Return(True);
end;

Function TWI_write_address(SlaveAdr : Byte; AdrWrite : Boolean) : Boolean;
begin
if AdrWrite then
SlaveAdr := (SlaveAdr SHL 1);
else
SlaveAdr := (SlaveAdr SHL 1) OR $01;
endif;
TWDR := SlaveAdr;
Filename: AVRTWIRS.pas
Filesize: 5.16 KB
Title:
Download counter: 163
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2135
Registered: 03 / 2003
Subject:

Re: Repeated-Start Funktion für ältere Megas

 · 
Posted: 10.03.2023 - 13:40  ·  #2
Danke UPi, aber mal für Nichtwissende: Für was z.B. braucht man das? Spezielle Sensoren?
Software/Codeschnipsel bitte da hin: index.php?f=10

Gruss
Harry
UPI
 
Avatar
 
Subject:

Re: Repeated-Start Funktion für ältere Megas

 · 
Posted: 10.03.2023 - 15:44  ·  #3
Nun, lieber Harry,
diese Funktion nutzen sehr viele I2C Slaves und sie ist Bestandteil der I2C-Normung.
In diesem speziellen Fall benötigte ich diese Funktion für einen DSP und ein FPGA.

Tut mir leid, wenn ich den Post falsch platziert habe aber ich muss gestehen, dass ich die Übersichtlichkeit und Benutzerfreundlichkeit des neuen Forums noch nicht gänzlich verinnerlicht habe. Vielleicht gelingt mir das noch :-)

UPI
Harry
Moderator
Avatar
Gender:
Location: zwischen Augsburg und Ulm
Age: 59
Posts: 2135
Registered: 03 / 2003
Subject:

Re: Repeated-Start Funktion für ältere Megas

 · 
Posted: 11.03.2023 - 16:14  ·  #4
Quote by UPI

Tut mir leid, wenn ich den Post falsch platziert habe aber ich muss gestehen, dass ich die Übersichtlichkeit und Benutzerfreundlichkeit des neuen Forums noch nicht gänzlich verinnerlicht habe. Vielleicht gelingt mir das noch :-)

Dem kann ich nur zustimmen und einen Admin, der das verschieben könnte, gibts anscheinend auch keinen (Das war ein Wink mit dem ganzen Gartenzaun :D).
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: Repeated-Start Funktion für ältere Megas

 · 
Posted: 11.03.2023 - 16:49  ·  #5
Ja,

es gibt die Möglichkeit auf ein anderes Design des Forums umzuschalten, aber das muss der Admin machen.

Thorsten
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   93   108 · Page-Gen-Time: 0.05101s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI