From: Jim Brain (brain_at_jbrain.com)
Date: 2004-09-21 00:26:55
As Marko asked, I have created a graph of the IEC routines. On Marko's
suggestion, I utilized GraphViz, though I need help in both taming the
graph and adding information to each state (When I wrote state diagrams, I
usually put the changes made during that state in the state bubble...)
This only shows IEC routines from peripheral point of view (slave mode, as
it were), and I still need to work on it (I need to add timeouts and
such). But, it's short, sweet, and maybe someone else can help me in
this. And, I need help, since all I know about GraphViz is from this
afternoon...
Here it is:
iec_states.dot
// Jim Brain (brain@jbrain.com) 2004-09-20 version 0.1
// TALK var is set to 1 when IEC TALK command is sent.
// LISTEN var is set to 1 when ATN device matches our device number
digraph iec_states {
rankdir=LR;
//orientation=land;
center=1;
ratio=auto;
node [shape = doublecircle,width="2",height="2"]; IDLE CMD_IDLE;
node [height=1.5, shape = circle, width="1.5", fixedsize=1];
IDLE -> CHK_EOI [ label = "LISTEN=1,CLK=1->0" ];
CMD_IDLE -> CHK_EOI [ label = "CLK=1->0" ];
CMD_IDLE -> TALK_PREP [ label = "ATN=0->1,TALK=1" ];
subgraph idle {
IDLE -> CMD_IDLE [ label = "ATN=1->0" ];
CMD_IDLE -> IDLE [ label = "TALK=0,ATN=0->1" ];
}
subgraph cluster_0 {
rank=same;
CHK_EOI -> EOI_TO [ label = "255uS passed" ];
CHK_EOI -> WAIT_ACK [ label = "CLK=0->1" ];
EOI_TO -> WAIT_ACK [ label = "CLK=0->1" ];
WAIT_ACK -> WAIT_BIT [ label = "CLK=1->0" ];
WAIT_BIT -> WAIT_BIT [ label = "CLK=1->0,bits<8" ];
label = "receive";
}
WAIT_BIT -> IDLE [ label = "CLK=1->0,bits=8,ATN=1" ];
WAIT_BIT -> CMD_IDLE [ label = "CLK=1->0,bits=8,ATN=0" ];
subgraph cluster_1 {
rank=same;
TALK_PREP-> BUS_RELEASE [ label = "CLK=0->1" ];
BUS_RELEASE -> BUS_ACK [ label = "80uS passed" ];
BUS_ACK -> PREP_SEND [ label = "DATA=0->1,Not last byte" ];
BUS_ACK -> EOI [ label = "DATA=0->1,last byte" ];
EOI -> EOI2 [ label = "DATA=1->0" ];
EOI2 -> PREP_SEND [ label = "DATA=0->1" ];
PREP_SEND -> PREP_BIT [ label = "40uS passed" ];
PREP_BIT -> SEND_BIT [ label = "60uS passed" ];
SEND_BIT -> PREP_BIT [ label = "bits<8,60uS passed" ];
SEND_BIT -> ACK [ label = "bits=8" ];
ACK -> ACK_WAIT [ label = "60uS passed" ];
ACK_WAIT-> BUS_ACK [ label = "DATA=1->0,not last byte" ];
label = "send";
}
ACK_WAIT-> IDLE [ label = "DATA=1->0,last byte" ];
ACK_WAIT-> IDLE [ label = "1000uS passed" ];
}
--
Jim Brain
brain@jbrain.com
Message was sent through the cbm-hackers mailing list
Archive generated by hypermail pre-2.1.8.