Doc update
authorlekernel <sebastien.bourdeauducq@lekernel.net>
Sat, 14 Nov 2009 10:44:45 +0000 (11:44 +0100)
committerlekernel <sebastien.bourdeauducq@lekernel.net>
Sat, 14 Nov 2009 10:44:45 +0000 (11:44 +0100)
cores/ac97/doc/ac97.tex
cores/pfpu/doc/pfpu.tex
cores/sysctl/doc/sysctl.tex
cores/tmu/doc/tmu.tex
cores/uart/doc/uart.tex

index 1edf596..a9ec35f 100644 (file)
@@ -13,7 +13,7 @@
 
 \title{AC'97 controller}
 \author{S\'ebastien Bourdeauducq}
-\date{October 2009}
+\date{November 2009}
 \begin{document}
 \setlength{\parindent}{0pt}
 \setlength{\parskip}{5pt}
@@ -39,11 +39,7 @@ Register 0x00 controls the transfers to and from the AC'97 codec registers. Its
 \hline
 1 & Selects between a read (0) and write (1) request. \\
 \hline
-2 & Request has been sent. This asserts the IRQ line. Write 1 to clear this bit. \\
-\hline
-3 & For a read request, the reply has been received. This asserts the IRQ line. Write 1 to clear this bit. \\
-\hline
-4--31 & Reserved. \\
+2--31 & Reserved. \\
 \hline
 \end{tabularx}
 
@@ -65,9 +61,7 @@ The register 0x10 controls the stream of data:
 \hline
 0 & Downstream enabled. When this bit is set by the CPU, the AC'97 controller sends PCM data to the codec and reads the DMA buffer (if the counter register is not zero). \\
 \hline
-1 & DMA interrupt. This bit is set by the core when the counter register reaches 0. Writing any value to the control register clears this bit. \\
-\hline
-2--31 & Reserved. \\
+1--31 & Reserved. \\
 \hline
 \end{tabularx}
 
@@ -76,6 +70,23 @@ Those registers control the stream of PCM data from the AC'97 codec to the SoC (
 
 They work exactly like the downstream control registers.
 
+\section{Interrupts}
+The AC'97 core is equipped with 4 active-high edge-sensitive interrupt lines:
+
+\begin{tabularx}{\textwidth}{|l|X|}
+\hline
+\textbf{Line} & \textbf{Description} \\
+\hline
+crrequest\_irq & The codec configuration register read/write request has been sent. \\
+\hline
+crreply\_irq & The value of a codec configuration register has been received (after a read request). \\
+\hline
+dmar\_irq & The read (downstream/playback) DMA counter register has reached 0. \\
+\hline
+dmaw\_irq & The write (upstream/recording) DMA counter register has reached 0. \\
+\hline
+\end{tabularx}
+
 \section{Using the DMA engine}
 The downstream and upstream DMA engines work exactly the same, and can be enabled at the same time.
 
index c1e2995..ee34084 100644 (file)
@@ -15,7 +15,7 @@
 
 \title{Programmable Floating Point Unit}
 \author{S\'ebastien Bourdeauducq}
-\date{October 2009}
+\date{November 2009}
 \begin{document}
 \setlength{\parindent}{0pt}
 \setlength{\parskip}{5pt}
@@ -178,9 +178,7 @@ The CSR bus gives access to configuration and status registers, to the contents
 \hline
 0 & RW & 0 & Start/busy bit. Writing 1 to this position starts the execution of the microcode. When reading, this bit is set when the core is busy. \\
 \hline
-1 & RW & 0 & IRQ status. This bit is set to 1 when an interrupt is pending (because the microcode has finished execution). This bit is cleared when the register is written. \\
-\hline
-31--2 & --- & 0 & Reserved. \\
+31--1 & --- & 0 & Reserved. \\
 \hline
 \end{tabularx}
 
@@ -218,4 +216,9 @@ This address range gives direct access to a page of 512 words of the microcode.
 
 It should not be accessed while the microcode is in execution.
 
+\section{Interrupts}
+The PFPU is equipped with one active-high edge-sensitive interrupt line.
+
+An interrupt is triggered when a microcode has finished execution and all resulting data has been sent through the bus master.
+
 \end{document}
index 1860de4..e6ce799 100644 (file)
@@ -13,7 +13,7 @@
 
 \title{System controller}
 \author{S\'ebastien Bourdeauducq}
-\date{October 2009}
+\date{November 2009}
 \begin{document}
 \setlength{\parindent}{0pt}
 \setlength{\parskip}{5pt}
@@ -41,9 +41,7 @@ It is possible to generate an interrupt when an input changes. The interrupt wil
 \hline
 0x04 & RW & 0 & Outputs. \\
 \hline
-0x08 & RW & 0 & Level changes. Lists the input pins whose level has changed. When this register is written, the bits set in the written value clear the corresponding bits in the register. For example, writing 0x5 clears bits 0 and 2. \\
-\hline
-0x0C & RW & 0 & Interrupt enable. Lists the input pins whose level changes (bit set in the 0x08 register) generate an interrupt. \\
+0x08 & RW & 0 & Interrupt enable. Lists the input pins whose level changes (bit set in the 0x08 register) generate an interrupt. \\
 \hline
 \end{tabularx}\\
 
@@ -55,18 +53,16 @@ The system controller provides two independent timers. Timer 0 uses registers 0x
 \hline
 \bf Bits & \bf Access & \bf Default & \bf Description \\
 \hline
-0 & R & 0 & Indicates if the timer has reached its compare value. Writing any value to the register clears this bit. \\
+0 & RW & 0 & (Enable bit). If this bit is set, the counter register counts upwards until it reaches the value stored in the compare register. \\
 \hline
 1 & RW & 0 & If this bit is set, the counter will automatically restart from 1 when the compare value is reached, otherwise the counter will be disabled. \\
 \hline
-2 & RW & 0 & If this bit is set, the counter register counts upwards until it reaches the value stored in the compare register. \\
-\hline
-31 -- 3 & --- & 0 & Reserved. \\
+31 -- 2 & --- & 0 & Reserved. \\
 \hline
 \end{tabularx}
 
 \subsection{Compare register, offset 0x14/0x24}
-This register holds the value to which the counter is compared to, in order to stop/restart the timer and possibly generate an interrupt.
+This register holds the value to which the counter is compared to, in order to stop/restart the timer and generate an interrupt.
 
 \subsection{Counter register, offset 0x18/0x28}
 This register holds the current value of the timer counter. It can be read or written at any time.
index 372f55a..60a29fb 100644 (file)
@@ -15,7 +15,7 @@
 
 \title{Texture Mapping Unit}
 \author{S\'ebastien Bourdeauducq}
-\date{October 2009}
+\date{November 2009}
 \begin{document}
 \setlength{\parindent}{0pt}
 \setlength{\parskip}{5pt}
@@ -44,9 +44,7 @@ Addresses are in bytes to match the addresses seen by the CPU when the CSR bus i
 \hline
 0x00 & RW & 0 & Control register. \\
 & & & Bit 0: Start/Busy.\\
-& & & Bit 1: IRQ status. Cleared whenever the register is written. \\
-& & & Bit 2: Enable chroma key. \\
-& & & Bit 3: Enable texture coordinates wrap (vs. clamp). \\
+& & & Bit 1: Enable chroma key. \\
 \hline
 0x04 & RW & 32 & Number of mesh squares in the X direction (which is the number of mesh points minus one, and also the index of the last mesh point). \\
 \hline
@@ -101,6 +99,11 @@ These registers are read-only. Attempting to write them results in undefined beh
 \hline
 \end{tabularx}
 
+\section{Interrupts}
+The TMU is equipped with one active-high edge-sensitive interrupt line.
+
+An interrupt is triggered when a texture mapping is done and all resulting data has been sent through the bus master.
+
 \section{Encoding the vertex data}
 The core supports a maximum mesh of 128x128 points. The address of the point at indices $ (x, y) $ in the mesh is, regardless of the actual the number of mesh points:
 
index 0aed11e..cda0f5a 100644 (file)
@@ -14,7 +14,7 @@
 
 \title{Simple UART}
 \author{S\'ebastien Bourdeauducq}
-\date{October 2009}
+\date{November 2009}
 \begin{document}
 \setlength{\parindent}{0pt}
 \setlength{\parskip}{5pt}
@@ -26,36 +26,26 @@ The UART operates with 8 bits per character, no parity, and 1 stop bit. The defa
 
 The divisor is computed as follows :
 \begin{equation*}
-divisor = \frac{Clock frequency (Hz)}{16 \cdot Bitrate (bps)}
+\text{divisor} = \frac{\text{Clock frequency (Hz)}}{16 \cdot \text{Bitrate (bps)}}
 \end{equation*}
 
 \section{Registers}
-
 \begin{tabularx}{\textwidth}{|l|l|l|X|}
 \hline
 \bf{Offset} & \bf{Read/Write} & \bf{Default} & \bf{Description} \\
 \hline
-0x0 & RW & 0x00 & Control/status register.\\
-& & & Bit 0 (read-only): RX data available.\\
-& & & Bit 1 (read-only): RX error.\\
-& & & Bit 2 (write-only): RX ack.\\
-& & & Bit 3 (read-only): TX busy.\\
-& & & Bit 4 (read-only): TX done.\\
-& & & Bit 5 (write-only): TX ack. \\
-\hline
-0x4 & RW & 0x00 & Data register. Received bytes and bytes to transmit are read/written from/to this register. \\
+0x0 & RW & 0x00 & Data register. Received bytes and bytes to transmit are read/written from/to this register. \\
 \hline
-0x8 & RW & for default bitrate & Divisor register (for bitrate selection). \\
+0x4 & RW & for default bitrate & Divisor register (for bitrate selection). \\
 \hline
 \end{tabularx}\\
 
-Upon reception of a byte, the register 0 should be written with the ``RX ack'' bit set to acknowledge the transmission (and clear the ``data available'' and ``error'' bits).
-
-Upon transmission of a byte, the register 0 can be written with the ``TX ack'' bit set to clear the ``TX done'' bit. This is not mandatory if the transmission is not operating in an interrupt-driven mode (it is possible to busy-wait on the ``TX busy'' bit instead).
-
 \section{Interrupts}
-The core has two interrupts outputs. The ``RX'' interrupt is asserted whenever the ``RX data available'' or ``RX error'' bits are set. The ``TX'' interrupt is asserted whenever the ``TX done'' bit is set.
+The core has two active-high edge-sensitive interrupts outputs.
+
+The ``RX'' interrupt is sent whenever a new character is received. The CPU should then read the data register immediately. If a new character is sent before the CPU has had time to read it, the first character will be lost.
 
+The ``TX'' interrupt is sent as soon as the UART finished transmitting a character. When the CPU has written to the data register, it must wait for the interrupt before writing again.
 
 \section{Using the core}
 Connect the CSR signals and the interrupts to the system bus and the interrupt controller. The \verb!uart_txd! and \verb!uart_rxd! signals should go to the FPGA pads. You must also provide the desired default baudrate and the system clock frequency in Hz using the parameters.