Hallo,
ich habe hier einen code, in dem ich TWIInpPC in einer Loop Schleife aufrufe.
Vor und direkt nach dem Aufruf erzeuge ich einen Puls, den ich zusammen mit SDA und SCL mit einem Oszilloskop aufzeichne (siehe Fotos).
Es ist kein Slave angeschlossen.
Folgt auf das Adressbyte kein Acknowledge (NACK, SDA bleibt high), dann wartet die Routine >100ms. Zusätzlich wartet die Routinne bei erneutem Aufruf >100ms bevor sie das Adressbyte sendet.
Ist das so gewollt? Sollte die Routine nicht unmittelbar mit einem false zurückkehren?
Ich möchte den TWI-Master Treiber für die Kommunikation mit einem anderen Prozessor benutzen und das NACK für eine Flusskontrolle verwenden. Lange Wartezeiten wären störend.
Gruß
Thomas
program xTWIMasterTest;
{ $W+}
{$DEBDELAY} // for faster delay in simulator
Device = xmega128A1, VCC = 3.3;
Import SysTick,TWI_C;
From System Import Longword;
Define
OSCtype = int32MHz, PLLmul=4, prescA=1, prescB=1, prescC=1;
SysTick = 10;
StackSize = 128, iData;
FrameSize = 256, iData;
TWIprescC = TWI_BR100;
Implementation
{$IDATA}
const
TWI_SLAVE_ADDR : byte = $34;
type
var
masterRxData : array[0..7] of byte;
procedure testpuls;
begin
DDRF := $FF;
PORTF := $FF;
uDelay(200);
PORTF := $00;
end;
begin
mDelay(2000);
EnableInts($87);
loop
testpuls;
TWIInpPC(TWI_SLAVE_ADDR,@masterRxData,3); //read 3 bytes
testpuls;
endloop;
end xTWIMasterTest.
ich habe hier einen code, in dem ich TWIInpPC in einer Loop Schleife aufrufe.
Vor und direkt nach dem Aufruf erzeuge ich einen Puls, den ich zusammen mit SDA und SCL mit einem Oszilloskop aufzeichne (siehe Fotos).
Es ist kein Slave angeschlossen.
Folgt auf das Adressbyte kein Acknowledge (NACK, SDA bleibt high), dann wartet die Routine >100ms. Zusätzlich wartet die Routinne bei erneutem Aufruf >100ms bevor sie das Adressbyte sendet.
Ist das so gewollt? Sollte die Routine nicht unmittelbar mit einem false zurückkehren?
Ich möchte den TWI-Master Treiber für die Kommunikation mit einem anderen Prozessor benutzen und das NACK für eine Flusskontrolle verwenden. Lange Wartezeiten wären störend.
Gruß
Thomas
Code
program xTWIMasterTest;
{ $W+}
{$DEBDELAY} // for faster delay in simulator
Device = xmega128A1, VCC = 3.3;
Import SysTick,TWI_C;
From System Import Longword;
Define
OSCtype = int32MHz, PLLmul=4, prescA=1, prescB=1, prescC=1;
SysTick = 10;
StackSize = 128, iData;
FrameSize = 256, iData;
TWIprescC = TWI_BR100;
Implementation
{$IDATA}
const
TWI_SLAVE_ADDR : byte = $34;
type
var
masterRxData : array[0..7] of byte;
procedure testpuls;
begin
DDRF := $FF;
PORTF := $FF;
uDelay(200);
PORTF := $00;
end;
begin
mDelay(2000);
EnableInts($87);
loop
testpuls;
TWIInpPC(TWI_SLAVE_ADDR,@masterRxData,3); //read 3 bytes
testpuls;
endloop;
end xTWIMasterTest.
Attachments
Filename: | TWI_access.jpg |
Filesize: | 301.39 KB |
Title: | |
Download counter: | 184 |
Filename: | TWI_waiting.jpg |
Filesize: | 320.48 KB |
Title: | |
Download counter: | 183 |