Karta disponuje následujícícmi funkcemi (v popisu implementace ovladačů se omezím pouze na A/D, D/A převodníky a digitální vstupy/výstupy):
\begin{itemize}
-\item 8 digitálních vstupů
-\item 8 digitálních výstupů
-\item 8 14bitových A/D převodníků
-\item 8 14bitových D/A převodníků
+\item 8 digitálních vstupů (TTL kompatibilní logické úrovně)
+\item 8 digitálních výstupů (TTL kompatibilní logické úrovně)
+\item 8 14bitových A/D převodníků (rozsah $\pm$10 V)
+\item 8 14bitových D/A převodníků (rozsah $\pm$10 V)
\item 4 časovače/čítače
\item 4 vstupy inkrementálních snímačů
\end{itemize}
\hline BADR2 (memory mapped) & Counter/timer chip & 128 & 32 \\
\hline
\end{tabular}
- \caption{Paměťové regiony, které PCI karta využívá}
+ \caption{Paměťové regiony, které využívá karta MF624}
\label{tab_bar}
\end{center}
\end{table}
\begin{itemize}
\item Nejprve se v registru ADCTRL zvolí, které A/D převodníky mají být čteny.
-Každý z A/D převodníků je reprezentován jedním bitem. Zápisem 1 do daného bitu se nastaví, že bude daný A/D převodník aktivní -- 0 ho deaktivuje.
+Každý z A/D převodníků je reprezentován jedním bitem. Zápisem 1 do daného bitu se nastaví, že bude daný A/D převodník aktivní -- 0 ho deaktivuje. Je možné zvolit více než jeden A/D převodník.
\item Čtením registru ADSTART se spustí převod na zvolených A/D převod\-nících. Přečtená hodnota se dále nepoužívá.
\item V případě, že se provedl převod na všech zvolených A/D převodnících, je EOLC bit (17. bit) GPIOC registru nastaven na 0 (jinak je v 1).
-\item Výslednou hodnotu je možné přečíst z registru ADDATA, který je typu FIFO. To znamná, že opětovným čtením jednoho registru vyčteme jednotlivé naměřené hodnoty z aktivovaných A/D převodníků v pořádí od 0 k 7.
+\item Výslednou hodnotu je možné přečíst z registru ADDATA, který je typu FIFO. To znamná, že opětovným čtením jednoho registru jsou vyčítány jednotlivé naměřené hodnoty z měřených A/D převodníků v pořádí od 0 do 7.
Jinou možností je místo čtení registru ADDATA číst některý z jeho \textit{zrcadlených registrů} (celkem je jich 7, v manuálu jsou označeny jako \textit{BADR1 + 0x02} až \textit{BADR1 + 0x0E}). Tyto registry se chovají \textbf{zcela stejně} jako registr ADDATA, pouze leží na jiných adresách. Příklad: pokud byly aktivovány první čtyři A/D převodníky, po převodu je možné výslednou hodnotu vyčíst opakovaným čtením registru ADDATA nebo čtením registru ADDATA, ADDATA1, ADDATA2, ADDATA3 přesně v tomto pořadí. Čtení z registrů v jiném pořadí bude stále vracet hodnoty převodníků 0--4.
\end{itemize}
\hline 0x0000 & -10.0000 V \\
\hline
\end{tabular}
- \caption{Kódování vstupních hodnot A/D převodníku}
+ \caption{Kódování vstupních hodnot D/A převodníku}
\label{tab_daval}
\end{center}
\end{table}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newpage
+\section{Humusoft MF614}
+\begin{figure}[h!]
+ \begin{center}
+ \includegraphics[width=150mm]{img/mf614.jpg}
+ \caption{Měřící karta Humusoft MF614}
+ \label{mf614}
+ \end{center}
+\end{figure}
+
+Karta Humusoft MF614 má podobné funkce a využití jako karta MF624. Ve skutečnosti se jedná o jeji předchůdkyni.
+
+Karta disponuje následujícími funkcemi:
+
+\begin{itemize}
+\item 8 digitálních vstupů (TTL kompatibilní logické úrovně)
+\item 8 digitálních výstupů (TTL kompatibilní logické úrovně)
+\item 8 12bitových A/D převodníků (volitelné rozsahy $\pm$10 V, $\pm$5 V, 0--5 V, 0--10 V)
+\item 4 12bitových D/A převodníků (rozsah $\pm$10 V)
+\item 4 časovače/čítače
+\item 4 vstupy inkrementálních snímačů
+\end{itemize}
+
+\subsection{Komunikace s kartou}
+Způsob komunikace s kartou MF614 se mírně liší od MF624.
+
+Po nahlédnutí do manuálu (dostupný ze stránek výrobce: \url{http://www2.humusoft.cz/www/datacq/manuals/mf614um.pdf}) je z tabulky 9 (zde tab. \ref{tab_mf614_bars}) patrné, že karta využívá více regionů, přičemž některé jsou mapovány do paměti, jiné do vstupně-výstupního adresního prostoru. Po prohlédnutí tabulky popisující rozložení registrů (zde tab. \ref{tab_mf614_regs}) je zřejmé, že pro přístup k digitálním vstupům/výstupům a analogovým vstupům/výstupům jsou použity vstupně-výstupní regiony BAR0, BAR2.
+
+\begin{table}[h!]
+ \begin{center}
+ \begin{tabular}{|c|c|c|}
+ \hline \textbf{Region} & \textbf{Function} & \textbf{Size (bytes)} \\
+ \hline BADR0 (I/O mapped) & Board programming registers & 32 \\
+ \hline BADR1 (I/O mapped) & Reserved & 4 \\
+ \hline BADR2 (I/O mapped) & OX9162 local configuration registers & 32 \\
+ \hline BADR3 (memory mapped) & OX9162 local configuration registers & 4096 \\
+ \hline BADR4 (memory mapped) & Board programming registers & 4096 \\
+ \hline
+ \end{tabular}
+ \caption{Paměťové a vstupně-výstupní regiony, které využívá karta MF614}
+ \label{tab_mf614_bars}
+ \end{center}
+\end{table}
+
+
+\begin{table}[h!]
+ \begin{center}
+ \begin{tabular}{|c|c|c|}
+ \hline \textbf{Address} & \textbf{Read} & \textbf{Write} \\
+ \hline BADR0 + 0x0 & \textbf{ADLO} -- A/D data low & \textbf{ADCTRL} -- A/D control \\
+ \hline BADR0 + 0x1 & \textbf{ADHI} -- A/D data high & \\
+ \hline BADR0 + 0x2 & \textbf{9513A} -- Data read & \textbf{9513A} -- Data write \\
+ \hline BADR0 + 0x3 & \textbf{9513A} -- Command read & \textbf{9513A} -- Command write \\
+ \hline BADR0 + 0x4 & & \\
+ \hline BADR0 + 0x5 & & \\
+ \hline BADR0 + 0x6 & \textbf{DIN} -- Digital input & \textbf{DOUT} -- Digital output \\
+ \hline BADR0 + 0x7 & & \\
+ \hline BADR0 + 0x8 & \textbf{DALE} -- D/A latch enable & \textbf{DA0LO} -- D/A 0 data low byte \\
+ \hline BADR0 + 0x9 & & \textbf{DA0HI} -- D/A 0 data high byte \\
+ \hline BADR0 + 0xA & & \textbf{DA1LO} -- D/A 1 data low byte \\
+ \hline BADR0 + 0xB & & \textbf{DA1HI} -- D/A 1 data high byte \\
+ \hline BADR0 + 0xC & & \textbf{DA2LO} -- D/A 2 data low byte \\
+ \hline BADR0 + 0xD & & \textbf{DA2HI} -- D/A 2 data high byte \\
+ \hline BADR0 + 0xE & & \textbf{DA3LO} -- D/A 3 data low byte \\
+ \hline BADR0 + 0xF & & \textbf{DA3HI} -- D/A 3 data high byte \\
+ \hline \ldots & \ldots & \ldots \\
+ \hline BADR2 + 0x10 & \textbf{STATUS} -- Status register & \\
+ \hline
+ \end{tabular}
+ \caption{Paměťové a vstupně-výstupní regiony, které využívá karta MF614}
+ \label{tab_mf614_regs}
+ \end{center}
+\end{table}
+
+Jednotlivé registry v těchto regionech jsou 8bitové, proto je potřeba při čtení/zápisu používat pouze 8bitové funkce. Např. 16bitové hodnoty jsou rozděleny do dvou 8bitových registrů -- v takovém případě, obsahuje-li registr ve svém názvu písmena \textbf{LO}, jedná se o spodní bajt, zatímco \textbf{HI} značí horní bajt. Vásledná 16bitová hodnota se získá složením dvou 8bitových:
+\begin{verbatim}
+ u8 regAHI, regALO;
+ u16 regA;
+
+ regA = regALO | (regAHI << 8);
+\end{verbatim}
+
+\subsection{Digitální vstupy a výstupy}
+Pro nastavení hodnoty digitálních výstupů se zapíše požadovaná hodnota do registru DOUT, kde jeden bit odpovídá jednomu digitálnímu výstupu. Pro čtení ditigálních vstupů je potřeba přečíst registr DIN.
+
+\subsection{A/D převodníky}
+Čtení A/D převodníků je u karty MF614 oproti MF624 trochu složitější, hlavně díky tomu, že je u převodníků potřeba nastavit, v jakém rozsahu bude provedeno měření. Je možné vybírat mezi rozsahy -10--10 V, -5--5 V, 0--10 V, 0--5 V.
+
+K nastavení vlastností A/D převodníků slouží registr ADCTRL (přeložená tab. \ref{tab_mf614_adctrl}). Bity 2:0 slouží k volbě jednoho z osmi A/D převodníků, které budou při příštím měření použity. Dekadická hodnota určující pořadí A/D převodníku je uložena ve třech bitech jako binární číslo (t.j. $0_{10} = 000_{2}$, $1_{10} = 001_{2}$, $2_{10} = 010_{2}$, $3_{10} = 011_{2}$, $4_{10} = 100_{2}$, \ldots).
+
+Bity 3 a 4 slouží k nastavení použitého rozsahu (způsob nastavení viz tabulka \ref{tab_mf614_rng}).
+
+Bity 5, 6 a 7 nemají žádnou funkci a musí bát nastaveny na 0, 1, 0.
+
+\begin{table}[h!]
+ \begin{center}
+ \begin{tabular}{|c|c|c|}
+ \hline \textbf{Bit} & \textbf{Jméno} & \textbf{Popis} \\
+ \hline 7 & & Musí být nastaveno na 0 \\
+ \hline 6 & & Musí být nastaveno na 1 \\
+ \hline 5 & & Musí být nastaveno na 0 \\
+ \hline 4 & RNG & Nastavení měřeného rozsahu A/D převodníku (tab. \ref{tab_mf614_rng}) \\
+ \hline 3 & BIP & Nastavení, zda bude měřený rozsah \textit{bipolární} (tab. \ref{tab_mf614_rng}) \\
+ \hline 2, 1, 0 & A2, A1, A0 & Výběr A/D převodníku pro příští měření \\
+ \hline
+ \end{tabular}
+ \caption{Funkce jednotlivých bitů registru ADCTRL}
+ \label{tab_mf614_adctrl}
+ \end{center}
+\end{table}
+
+\begin{table}[h!]
+ \begin{center}
+ \begin{tabular}{|c|c|c|}
+ \hline \textbf{RNG} & \textbf{BIP} & \textbf{Vstupní rozsah [V]} \\
+ \hline 0 & 0 & 0--5 V \\
+ \hline 1 & 0 & 0--10 V \\
+ \hline 0 & 1 & -5--5 V \\
+ \hline 1 & 1 & -10--10 V \\
+ \hline
+ \end{tabular}
+ \caption{Volba rozsahu A/D převodníku}
+ \label{tab_mf614_rng}
+ \end{center}
+\end{table}
+
+Vyčtení hodnoty A/D převodníku může probíhat následujícím způsobem:
+
+\begin{itemize}
+\item Nejprve se v registru ADCRTL zvolí, který A/D převodník bude čten a který měřící rozsah bude použit.
+\item Zápis do registru ADCTRL automaticky spouští převod.
+\item Je-li CC bit (2. bit) registru STAT nastaven na 0, převod již byl ukončen.
+\item Data je poté možné přečíst z registru ADLO a ADHI -- jedná se o 8bitové registry, které je potřeba pro získání 12 bitové výsledné hodnoty \textit{složit} dohromady. Je-li nastaven unipolární rozsah měření (t.j. 0--5 V nebo 0--10 V) je měřená hodnota kódována jako binární číslo. V případě bipolárního rozsahu je hodnota kódována pomocí dvojkového doplňku.
+\end{itemize}
+
+\subsection{D/A převodníky}
+Karta MF614 obsahuje 4 D/A převodníky. Ty mají pevně nastavený výstupní rozsah -10--10 V a nevyžadují žádnou konfiguraci.
+
+Nastavení výstupu D/A převodníků může probíhat následujícím způsobem:
+\begin{itemize}
+\item Do registru DA$x$LO a DA$x$HI (kde $x$ může nabývat hodnot 0, 1, 2, 3 a určuje, ke kterému D/A převodníku registr patří) se zapíše hodnota k převodu. 12bitová hodnota je do 8bitových registrů rozdělena takovým způsobem, že 8 LSB je zapsáno do DA$x$LO a zbývající čtyři jsou zapsány do DA$x$HI na 4 nejnižší bity, nepoužité 4 MSB registru DA$x$HI jsou vyplněny nulami.
+
+Hodnota je zapsána v aditivním kódu (tab. \ref{tab_mf614_dac}).
+
+\item Čtením registru DALE se spustí převod všech D/A převodníků.
+\end{itemize}
+
+\begin{table}[h!]
+ \begin{center}
+ \begin{tabular}{|c|c|}
+ \hline \textbf{Digitální hodnota} & \textbf{Analogová hodnota} \\
+ \hline 0xFFF & 9.9951 V \\
+ \hline 0x800 & 0.0000 V \\
+ \hline 0x7FF & -0.0049 V \\
+ \hline 0x000 & -10.0000 V \\
+ \hline
+ \end{tabular}
+ \caption{Kódování vstupních hodnot D/A převodníku}
+ \label{tab_mf614_dac}
+ \end{center}
+\end{table}
+
+\ibox{
+\textbf{MSB} (Most Significant Bit) je označení pro bit s nejvyšší hodnotou v binárním vyjádření čísla. V obvyklém dvojkovém zápisu jde o bit nejvíce vlevo.
+\\~\\
+\textbf{LSB} (Least Significant Bit) je bit s nejnižší hodnotou. Jde o bit nejvíce vpravo.
+
+\begin{center}
+\texttt{1 0 1 0 1 0 1 0}\\
+\texttt{MSB\hspace{2.6cm}LSB}
+\end{center}}
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Implementace ovladačů}
\section{Operační systém GNU/Linux}
\begin{verbatim}
mf624_BAR2 += (BAR2_phys_addr & (sysconf(_SC_PAGESIZE) - 1));
| \-- Fyzická adresa
- \-- Ukazatel vrácený voláním mmap()
+ \-- Ukazatel vrácený voláním mmap()
\end{verbatim}
\subsection{Přístup k paměti zařízení}