\begin{center} \begin{longtable}{|l|p{0.78\textwidth}|} \multicolumn{2}{r}{Fortsetzung nächste Seite \ldots} \endfoot \caption{\labtab{comfsmstate}I2C-FSM States} \endlastfoot \hline \lab{SDA\_low} & Setzt SDA=0 (low).\\ \hline \lab{SDA\_high} & Setzt SDA=1 (high).\\ \hline \lab{SCL\_low} & Setzt SCL=0 (low).\\ \hline \lab{SCL\_high} & Setzt SCL=1 (high).\\ \hline \lab{Tx\_S\_ll} & Setzt SDA=0 und SCL=0.\\ \hline \lab{Tx\_S\_lh} & Setzt SDA=1 und SCL=0.\\ \hline \lab{Tx\_S\_hh} & Setzt SDA=1 und SCL=1.\\ \hline \lab{set\_SDAi} & Setzt SDA als Input mit SCL=0.\\ \hline \lab{set\_SDAo} & Setzt SDA als Output mit SDDA=0 und SCL=0.\\ \hline \lab{Tx\_Ack} & Setzt SDA als Output mit SDA=0 und SCL=0.\\ \hline \lab{Tx\_Nack} & Setzt SDA als Output mit SDA=1 und SCL=0.\\ \hline \lab{Rx\_ok} & Lädt das eingelesene Datenbit in den Accumulator und wertet es nach Ack oder Nack aus. Ein Nack erzeugt einen Fehlercode in der Variable \var{cur\_task}. Ein Ack lässt die I2C-FSM weiterlaufen. Das Datenbit wird in der Variable \var{temp\_ack} zwischengespeichert.\\ \hline \lab{Rs\_SDA} & Die Variable \var{i2c\_data} wird Bitweise von rechts nach links aufgefüllt, indem im Byte 4 immer das aktuell eingelesene Datenbit ins LSB geschrieben wird und danach der Inhalt um eine Stelle nach links geschoben wird. Maximal können 16 Bit (2 Byte) nacheinander eingelesen werden. Damit im nächsten State immer nur ein Clockhigh generiert werden muss, wird hier SCL=0 am Schluss gleich noch gesetzt.\\ \hline \lab{Tx\_adr} & Schreibt immer ein Bit der Variable \var{i2c\_adr} auf die Datenleitung SDA, indem jeweils das MSB mit dem Wert 8000h multipliziert wird und anschliessend um eine Stelle nach links geschoben wird. Damit ist auch klar, dass die generierten Daten während dem Senden verlohren gehen.\\ \hline \lab{Tx\_data} & Schreibt immer ein Bit der Variable \var{i2c\_data} auf die Datenleitung SDA, indem jeweils das MSB mit dem Wert 8000h multipliziert wird und anschliessend um eine Stelle nach links geschoben wird. Damit ist auch klar, dass die generierten Daten während dem Senden verlohren gehen.\\ \hline \lab{ill\_task} & Schreibt in der Variablen \var{cur\_task} den Fehlercode FFFFh hinein, was einem unzulässigen Task entspricht.\\ \hline \lab{reINIT} & Reinitialisiert wird immer im letzten State eines jeden Tasks ausser dem Idle Task. Hier werden alle Variablen null gesetzt, damit sichergestellt werden kann, dass kein Task mehr läuft und die beim nächsten Task generierten Daten gültig sein werden.\\ \hline \hline \lab{rx\_ill} & Wird ausgeführt, wenn ein Nack in \lab{Rx\_ok} gelesen wurde. Der Fehlercode F0FFh in der Variable \var{cur\_task} bedeutet also ein Kommunikationsfehler, bei dem der Slave nicht richig verstanden hat, was gesendet wurde oder ein Zugriffsfehler wegen Timingproblemen passierte.\\ \hline \lab{Inc\_stat} & Wird nach jedem State ausser dem Letzten aufgerufen. Inc\_stat erhöht den Wert der Variable \var{tsk\_stat} um eins und verlässt anschliessend die I2C-FSM mit einem ret (return).\\ \hline \multicolumn{2}{c}{} \end{longtable} \end{center} \begin{table}[htp] \tiny % kleine schrift \begin{tabular}{l|c|c|c|c|c|c|c|c|l} \cline{2-9} ADDR & BIT15 & BIT14 & BIT13 & BIT12 & BIT11 & BIT10 & BIT9 & BIT8 & REG \\ \cline{2-9} & BIT7 & BIT6 & BIT5 & BIT4 & BIT3 & BIT2 & BIT1 & BIT0 & \\ \cline{2-9} \cline{2-9} & \multicolumn{8}{c}{ DIGITAL I/O CONTROL REGISTER}\vline & \\ \cline{2-9} 07090h & CRA.15 & CRA.14 & CRA.13 & CRA.12 & CRA.11 & CRA.10 & CRA.9 & CRA.8 & OCRA \\ \cline{2-9} & CRA.7 & CRA.6 & CRA.5 & CRA.4 & CRA.3 & CRA.2 & CRA.1 & CRA.0 & \\ \cline{2-9} 07092h & - & - & - & - & - & - & - & - & OCRB \\ \cline{2-9} & CRB.7 & CRB.6 & CRB.5 & CRB.4 & CRB.3 & CRB.2 & CRB.1 & CRB.0 & \\ \cline{2-9} 0709Ah & B7DIR & B6DIR & B5DIR & B4DIR & B3DIR & B2DIR & B1DIR & B0DIR & PBDATDIR \\ \cline{2-9} & IOPB7 & IOPB6 & IOPB5 & IOPB4 & IOPB3 & IOPB2 & IOPB1 & IOPB0 & \\ \cline{2-9} \end{tabular} \caption{Digitale I/O Kontrollregister} \labtab{ioregkonf} \end{table} \begin{table}[htp] \tiny \begin{tabular}{|c|c|cc|ccc|} \hline & MUX CONTROL & & & & & \\ PIN\# & REGISTER & \multicolumn{2}{c}{ PIN FUNCTION SELECTED}\vline & \multicolumn{3}{c}{ I/O PORT DATA AND DIRECTION}\vline \\ \cline{3-7} & (name.bit \#) & (CRx.n=1) & (CRx.n=0) & REGISTER & DATA BIT\# & DIR BIT\# \\ \hline 108 & OCRA.14 & TMLDIR & IOPB6 & PBDATDIR & 6 & 14 \\ \hline 109 & OCRA.15 & TMRCLK & IOPB7 & PBDATDIR & 7 & 15 \\ \hline \hline \end{tabular} \caption{Shared Pin Konfiguration} \labtab{g1spconf} \end{table} \begin{table}[!htp] \centering \begin{tabular}{|l|cccccccc|} \hline Byte 1 & \multicolumn{4}{c}{dev type ident}\vline & \multicolumn{3}{c}{chip enable}\vline & \multicolumn{1}{c}{r\=w}\vline \\ \cline{2-9} & 1 & 0 & 0 & \multicolumn{1}{c}{1}\vline & 0 & 0 & \multicolumn{1}{c}{0}\vline & \multicolumn{1}{c}{0}\vline \\ \hline Byte 2 & \multicolumn{8}{c}{command byte}\vline \\ \cline{2-9} & 1 & 0 & 1 & 1 & 1 & 0 & 1 & \multicolumn{1}{c}{1}\vline \\ \hline \hline Byte 3 & \multicolumn{4}{c}{dev type ident}\vline & \multicolumn{3}{c}{chip enable}\vline & \multicolumn{1}{c}{r\=w}\vline \\ \cline{2-9} & 1 & 0 & 0 & \multicolumn{1}{c}{1}\vline & 0 & 0 & \multicolumn{1}{c}{0}\vline & \multicolumn{1}{c}{1}\vline \\ \hline \hline Byte 4 & \multicolumn{8}{c}{don't care}\vline \\ \cline{2-9} & x & x & x & x & x & x & x & \multicolumn{1}{c}{x}\vline \\ \hline \multicolumn{9}{l}{nach dem Lesen:}\\ \hline Byte 3 & \multicolumn{8}{c}{data byte 1}\vline \\ \cline{2-9} & d11 & d10 & d9 & d8 & d7 & d6 & d5 & \multicolumn{1}{c}{d4}\vline \\ \hline \hline Byte 4 & \multicolumn{8}{c}{data byte 2}\vline \\ \cline{2-9} & d3 & d2 & d1 & d0 & x & x & x & \multicolumn{1}{c}{x}\vline \\ \hline \end{tabular} \caption{\labtab{dftempr}\mac{r\_temp} Datenformat} \end{table}