Difference between revisions of "Unit BCM2708"

From Ultibo.org
Jump to: navigation, search
 
(92 intermediate revisions by the same user not shown)
Line 4: Line 4:
 
=== Description ===
 
=== Description ===
 
----
 
----
 +
 +
'''Ultibo BCM2708 Interface unit'''
  
 
This unit provides the BCM2708 specific implementations of the following devices:
 
This unit provides the BCM2708 specific implementations of the following devices:
Line 10: Line 12:
 
*I2C0
 
*I2C0
 
*I2C1
 
*I2C1
 +
*I2C2
 
*SPI1
 
*SPI1
 
*SPI2
 
*SPI2
Line 41: Line 44:
 
By default SPI0 can appear on GPIO pins 7 to 11 (CS1, CS0, MISO, MOSI, SCLK) using alternate function 0 or on GPIO pins 35 to 39 (CS1, CS0, MISO, MOSI, SCLK) using alternate function 0, only pins 7 to 11 are available on the header.
 
By default SPI0 can appear on GPIO pins 7 to 11 (CS1, CS0, MISO, MOSI, SCLK) using alternate function 0 or on GPIO pins 35 to 39 (CS1, CS0, MISO, MOSI, SCLK) using alternate function 0, only pins 7 to 11 are available on the header.
  
'''BCM2708 I2C0/1 Device'''
+
'''BCM2708 I2C0/1/2 Device'''
  
 
The BCM2708 has 3 Broadcom Serial Controller (BSC) devices which are fast mode (400Kz) masters numbered BSC0, BSC1 and BSC2.
 
The BCM2708 has 3 Broadcom Serial Controller (BSC) devices which are fast mode (400Kz) masters numbered BSC0, BSC1 and BSC2.
 
   
 
   
Device BSC2 is dedicated to the HDMI interface and is not availale for use by the ARM processor. All BSC devices contain a 16 byte FIFO, support 7 bit and 10 bit addressing and have software configurable clock timing.
+
Device BSC2 is dedicated to the HDMI interface but can be accessed by the ARM processor for controlling some HDMI functionality. All BSC devices contain a 16 byte FIFO, support 7 bit and 10 bit addressing and have software configurable clock timing.
 
   
 
   
 
By default BSC0 can appear on GPIO pins 0 and 1 (Alternate function 0), 28 and 29 (Alternate function 0) or 44 and 45 (Alternate function 1). Unfortunately on all except the Revision 1 models none of these pins are available on the 26 or 40 pin header.
 
By default BSC0 can appear on GPIO pins 0 and 1 (Alternate function 0), 28 and 29 (Alternate function 0) or 44 and 45 (Alternate function 1). Unfortunately on all except the Revision 1 models none of these pins are available on the 26 or 40 pin header.
Line 58: Line 61:
 
   
 
   
 
Both devices support 3 chip selects, by default SPI1 is available on GPIO pins 16 to 21 (CS2, CS1, CS0, MISO, MOSI, SCLK) using alternate function 4 and SPI2 is available on GPIO pins 40 to 45 (MISO, MOSI, SCLK, CS0, CS1, CS2) using alternate function 4. Only pins 16 to 21 are available on the header and only on the 40 pin header of the Raspberry Pi A+/B+/Zero/2B/3B.
 
Both devices support 3 chip selects, by default SPI1 is available on GPIO pins 16 to 21 (CS2, CS1, CS0, MISO, MOSI, SCLK) using alternate function 4 and SPI2 is available on GPIO pins 40 to 45 (MISO, MOSI, SCLK, CS0, CS1, CS2) using alternate function 4. Only pins 16 to 21 are available on the header and only on the 40 pin header of the Raspberry Pi A+/B+/Zero/2B/3B.
 +
 +
'''BCM2708 SPI/I2C Slave Device'''
 +
 +
The slave device can be used as either an I2C or an SPI interface, the I2C slave supports 400KHz fast mode operation. Only 7 bit addressing is supported, DMA is not supported and neither is clock stretching.
 +
 +
Note: On the Raspberry Pi A+/B+/Zero/2B/3B the SPI slave device is apparently faulty and cannot be used.
 +
 +
The I2C Slave device can only appear on GPIO pins 18 (SDA) and 19 (SCL) (Alternate function 3).
  
 
'''BCM2708 DMA Device'''
 
'''BCM2708 DMA Device'''
Line 68: Line 79:
 
   
 
   
 
Channels 7 to 14 are Lite channels which do not support stride and only allow transfers up to 64KB per control block
 
Channels 7 to 14 are Lite channels which do not support stride and only allow transfers up to 64KB per control block
 +
 
Channel 15 is not mentioned in most documentation and is shown as not available in the mask passed in dma.dmachans
 
Channel 15 is not mentioned in most documentation and is shown as not available in the mask passed in dma.dmachans
 
   
 
   
Line 79: Line 91:
  
 
PWM0 is available on GPIO pins 12 (function 0), 18 (function 5), 40 (function 0) and 52 (function 1).
 
PWM0 is available on GPIO pins 12 (function 0), 18 (function 5), 40 (function 0) and 52 (function 1).
 +
 
PWM1 is available on GPIO pins 13 (function 0), 19 (function 5), 41, 45 (function 0) and 53 (function 1).
 
PWM1 is available on GPIO pins 13 (function 0), 19 (function 5), 41, 45 (function 0) and 53 (function 1).
 
   
 
   
 
On the Raspberry Pi A and B only pin 18 is exposed on the 26 pin header.
 
On the Raspberry Pi A and B only pin 18 is exposed on the 26 pin header.
On the Raspberry Pi A+/B+/Zero/2B/3B pins 12, 18 and 19 are exposed on the 40 pin header.
+
 
 +
On the Raspberry Pi A+/B+/Zero/2B/3B pins 12, 13, 18 and 19 are exposed on the 40 pin header.
  
 
'''BCM2708 GPIO Device'''
 
'''BCM2708 GPIO Device'''
Line 94: Line 108:
 
Raspberry Pi A+/B+/2B/3B/Zero - https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/README.md
 
Raspberry Pi A+/B+/2B/3B/Zero - https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/README.md
 
   
 
   
Some of the 54 pins are used for peripheral communication (such as the SD card) and are not available for general use,take care when changing function selects on pins to avoid disabling certain system peripherals.
+
Some of the 54 pins are used for peripheral communication (such as the SD card) and are not available for general use, take care when changing function selects on pins to avoid disabling certain system peripherals.
 
   
 
   
 
Event detection can be enabled for both high and low levels as well as rising and falling edges, there is also an asynchronous rising or falling edge detection which can detect edges of very short duration.
 
Event detection can be enabled for both high and low levels as well as rising and falling edges, there is also an asynchronous rising or falling edge detection which can detect edges of very short duration.
Line 100: Line 114:
 
'''BCM2708 UART0 Device'''
 
'''BCM2708 UART0 Device'''
  
The UART0 device is an ARM PL011 UART which supports programmable baud rates, start, stop and parity bits and hardware flow control and many others. The UART0 is similar to the industry standard 16C650 but with a number of differences, the PL011 has a some optional features such as IrDA, Serial InfraRed and DMA which are not supported by the Broadcom implementation. In the standard configuration the UART0 TX and RX lines are connected to GPIO pins 14 and 15 respectively (Alternate function 0) but they can be remapped via GPIO function selects to a number of other locations. On the Raspberry Pi (all models) none of these alternate pin mappings are exposed via the 26 or 40 pin header and therefore cannot be used easily. This means that UART0 and UART1 cannot be used at the same time.
+
The UART0 device is an ARM PL011 UART which supports programmable baud rates, start, stop and parity bits and hardware flow control and many others. The UART0 is similar to the industry standard 16C650 but with a number of differences, the PL011 has some optional features such as IrDA, Serial InfraRed and DMA which are not supported by the Broadcom implementation. In the standard configuration the UART0 TX and RX lines are connected to GPIO pins 14 and 15 respectively (Alternate function 0) but they can be remapped via GPIO function selects to a number of other locations. On the Raspberry Pi (all models) none of these alternate pin mappings are exposed via the 26 or 40 pin header and therefore cannot be used easily. This means that UART0 and UART1 cannot be used at the same time.
 
   
 
   
 
On the Raspberry Pi 3B the UART0 can be mapped to GPIO pins 32 and 33 (Alternate function 3) to communicate with the built in Bluetooth module.
 
On the Raspberry Pi 3B the UART0 can be mapped to GPIO pins 32 and 33 (Alternate function 3) to communicate with the built in Bluetooth module.
Line 111: Line 125:
 
   
 
   
 
On the Raspberry Pi 3B the UART1 can be mapped to GPIO pins 32 and 33 (Alternate function 5) to communicate with the built in Bluetooth module.
 
On the Raspberry Pi 3B the UART1 can be mapped to GPIO pins 32 and 33 (Alternate function 5) to communicate with the built in Bluetooth module.
 +
 +
'''BCM2708 SDHCI Device'''
 +
 +
The SDHCI controller on the BCM2708 is an Arasan SD Host controller.
 +
 +
The Card Detect pin is connected to GPIO pin 47 (on the RPi Model A/B)(Not connected on the RPi Model A+/B+)
 +
 +
The Write Protect pin is not connected.
 +
 +
The device can be routed to GPIO pins 22 to 27 (ALT3) or 48 to 53 (ALT3), it can also be routed to GPIO pins 34 to 39 (ALT3) to provide an SDIO controller for the on board WiFi.
 +
 +
'''BCM2708 SDHOST Device'''
 +
 +
The SDHOST controller on the BCM2708 is a non SDHCI-compliant device which requires a specific driver.
 +
 +
It can be routed to GPIO pins 22 to 27 (ALT0) or 48 to 53 (ALT0) in order to control the SD card slot when the SDHCI device is being used for the on board WiFi.
 +
 +
Note: The actual driver is implemented in the BCMSDHOST unit.
 +
 +
'''BCM2708 Clock (System Timer) Device'''
 +
 +
The clock device in the BCM2708 is based on the System Timer which is a 64 bit free running counter that runs at 1MHz regardless of core or CPU clock speeds. The System Timer cannot be stopped and the counter cannot be set or reset.
 +
 +
The System Timer includes 4 compare registers which can each generate an interrupt when the compare value is matched, however 2 of the 4 are consumed by the GPU and on the Raspberry Pi A/B/A+/B+/Zero the other 2 are used for the scheduler and clock interrupts in Ultibo.
 +
 +
This device simply exposes the free running counter as a clock value and does not provide access to the timer compare functionality or to interrupt based events, for those see the timer devices below.
 +
 +
'''BCM2708 Clock (ARM Timer) Device'''
 +
 +
This device represents that free running counter from the ARM Timer device (below) as a clock device. The free running counter does not appear in the original SP804 timer. The counter is 32 bits wide and has its own divider that is 8 bits wide meaning that it can be set to clock rates of between 975KHz and 250MHz (or 1.5MHz to 400MHz on the Raspberry Pi 3B).
 +
 +
The counter does not generate an interrupt and cannot be set or reset but it can be stopped and started.
 +
 +
'''BCM2708 ARM Timer Device'''
 +
 +
The ARM Timer device in the BCM2708 is based on the ARM SP804 timer with some modifications and additions. In the Raspberry Pi it is connected to the core clock which by default is 250MHz but was increased to 400MHz on the Raspberry Pi 3B.
 +
 +
The divider is 10 bits wide which means that the ARM Timer can be set to clock rates of between 250KHz and 250MHz (or 400KHz to 400MHz on the Raspberry Pi 3B). Both the counter and the load/reload value are 32 bits wide by default giving a wide range of tick intervals.
 +
 
 +
The ARM Timer features a free running counter which is not enabled or used by this driver and a down counter which operates in wrapping mode so that each time it reaches 0 it triggers an interrupt and reloads the value from a load or reload register to begin counting again.
  
 
=== Constants ===
 
=== Constants ===
 
----
 
----
  
''To be documented''
+
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 SPI0''' <code> BCM2708_SPI0_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_SPI0_DESCRIPTION = 'BCM2835 SPI0 Master';</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_SPI0_MAX_SIZE = $FFFF;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_SPI0_MIN_CLOCK = 3814;</code>
 +
| Default minimum based on the default settings from the firmware (Recalculated during open)
 +
|-
 +
| <code>BCM2708_SPI0_MAX_CLOCK = 125000000;</code>
 +
| Default maximum based on the default settings from the firmware (Recalculated during open)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_SPI0_MIN_DIVIDER = 2;</code>
 +
| Divider is always rounded down to an even number and a value of 0 sets the divider to 65536
 +
|-
 +
| <code>BCM2708_SPI0_MAX_DIVIDER = $FFFE;</code>
 +
| Divider is always rounded down to an even number
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_SPI0_CORE_CLOCK = 250000000;</code>
 +
| Default core clock based on the default settings from the firmware (Requested from firmware during start)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_SPI0_MODE_IRQ = 0;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2708_SPI0_MODE_DMA = 1;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2708_SPI0_MODE_PIO = 2;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 BSCI2C (BSC0/1/2)''' <code> BCM2708_BSCI2C_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_BSCI2C_MAX_SIZE = $FFFF;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_BSCI2C_MIN_CLOCK = 3814;</code>
 +
| Default minimum based on the default settings from the firmware (Recalculated during open)
 +
|-
 +
| <code>BCM2708_BSCI2C_MAX_CLOCK = 125000000;</code>
 +
| Default maximum based on the default settings from the firmware (Recalculated during open)
 +
|-
 +
| <code>BCM2708_BSCI2C_DEFAULT_CLOCK = 100000;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_BSCI2C_MIN_DIVIDER = 2;</code>
 +
| Divider is always rounded down to an even number and a value of 0 sets the divider to 32768
 +
|-
 +
| <code>BCM2708_BSCI2C_MAX_DIVIDER = $FFFE;</code>
 +
| Divider is always rounded down to an even number
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_BSCI2C_CORE_CLOCK = 250000000;</code>
 +
| Default core clock based on the default settings from the firmware (Requested from firmware during start)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_BSCI2C_MODE_WRITE = 0;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2708_BSCI2C_MODE_READ = 1;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 I2C0 (BSC0)''' <code> BCM2708_I2C0_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_I2C0_DESCRIPTION = 'BCM2835 BSC0 Master I2C';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 I2C1 (BSC1)''' <code> BCM2708_I2C1_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_I2C1_DESCRIPTION = 'BCM2835 BSC1 Master I2C';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 I2C2 (BSC2)''' <code> BCM2708_I2C2_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_I2C2_DESCRIPTION = 'BCM2835 BSC2 Master I2C';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 SPI1''' <code> BCM2708_SPI1_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_SPI1_DESCRIPTION = 'BCM2835 AUX SPI1 Master';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 SPI2''' <code> BCM2708_SPI2_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_SPI2_DESCRIPTION = 'BCM2835 AUX SPI2 Master';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 I2C slave''' <code> BCM2708_I2CSLAVE_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_I2CSLAVE_DESCRIPTION = 'BCM2835 I2C Slave';</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_I2CSLAVE_TIMEOUT = 10;</code>
 +
| Timeout (Milliseconds) for RX/TX wait data
 +
|-
 +
| <code>BCM2708_I2CSLAVE_BUFFER_SIZE = 1024;</code>
 +
| Size in bytes of the RX/TX data buffer
 +
|-
 +
| <code>BCM2708_I2CSLAVE_RX_POLL_LIMIT = 256;</code>
 +
| Number of times interrupt handler may poll the read FIFO
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 SPI slave''' <code> BCM2708_SPISLAVE_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_SPISLAVE_DESCRIPTION = 'BCM2835 SPI Slave';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 DMA''' <code> BCM2708_DMA_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_DMA_DESCRIPTION = 'BCM2835 DMA';</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_DMA_CHANNEL_COUNT = 16;</code>
 +
| Total number of DMA channels (Not all are usable)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_DMA_LITE_CHANNELS  = $7F80;</code>
 +
| Mask of DMA Lite channels (7 to 14)
 +
|-
 +
| <code>BCM2708_DMA_NORMAL_CHANNELS = $007E; {807F}</code>
 +
| Mask of normal channels (1 to 6)
 +
|-
 +
| <code>BCM2708_DMA_BULK_CHANNELS  = $8001;</code>
 +
| Mask of DMA Bulk channels (0 and 15)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_DMA_SHARED_CHANNELS = $7800;</code>
 +
| Mask of channels with shared interrupt (11 to 14)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_DMA_MAX_LITE_TRANSFER = 65536;</code>
 +
| Maximum transfer length for a DMA Lite channel
 +
|-
 +
| <code>BCM2708_DMA_MAX_NORMAL_TRANSFER = 1073741824;</code>
 +
| Maximum transfer length for a normal channel
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_DMA_MAX_STRIDE = $FFFF;</code>
 +
| Maximum stride value (Increment between rows) (Note this is a signed value (Min -32768/Max 32767)
 +
|-
 +
| <code>BCM2708_DMA_MAX_Y_COUNT = $3FFF;</code>
 +
| Maximum number of X length transfers in 2D stride
 +
|-
 +
| <code>BCM2708_DMA_MAX_X_LENGTH = $FFFF;</code>
 +
| Maximum X transfer length in 2D stride
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_DMA_CB_ALIGNMENT = 32;</code>
 +
| Alignment required for DMA control blocks
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_DMA_LITE_BURST_LENGTH = 2;</code>
 +
| Burst length for DMA Lite channels
 +
|-
 +
| <code>BCM2708_DMA_NORMAL_BURST_LENGTH = 4;</code>
 +
| Burst length for normal channels
 +
|-
 +
| <code>BCM2708_DMA_BULK_BURST_LENGTH = 16;</code>
 +
| Burst length for DMA Bulk channels
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 PWM''' <code> BCM2708_PWM_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_PWM_MIN_PERIOD = 108;</code>
 +
| Default based on 19.2MHz PWM clock (Oscillator source)
 +
|-
 +
| <code>BCM2708_PWM_DEFAULT_CLOCK = 19200000;</code>
 +
| Default to the 19.2MHz oscillator clock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 PWM0''' <code> BCM2708_PWM0_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_PWM0_DESCRIPTION = 'BCM2835 PWM0';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 PWM1''' <code> BCM2708_PWM1_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_PWM1_DESCRIPTION = 'BCM2835 PWM1';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 GPIO''' <code> BCM2708_GPIO_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_GPIO_DESCRIPTION = 'BCM2835 GPIO';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_GPIO_MIN_PIN = GPIO_PIN_0;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2708_GPIO_MAX_PIN = GPIO_PIN_53;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_GPIO_MAX_LEVEL = GPIO_LEVEL_HIGH;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_GPIO_MAX_PULL = GPIO_PULL_DOWN;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_GPIO_MIN_FUNCTION = GPIO_FUNCTION_IN;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2708_GPIO_MAX_FUNCTION = GPIO_FUNCTION_ALT5;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_GPIO_MIN_TRIGGER = GPIO_TRIGGER_LOW;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2708_GPIO_MAX_TRIGGER = GPIO_TRIGGER_ASYNC_FALLING;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''GPIO pull up/down to BCM2835 pull up/down''
 +
|-
 +
|colspan="2"|<code>BCM2708_GPIO_PULL_MAP:array[GPIO_PULL_NONE..GPIO_PULL_DOWN] of LongWord = (</code>
 +
|-
 +
| <code>BCM2835_GPPUD_NONE,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPPUD_UP,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPPUD_DOWN);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''GPIO functions to BCM2835 functions''
 +
|-
 +
|colspan="2"|<code>BCM2708_GPIO_FUNCTION_MAP:array[BCM2708_GPIO_MIN_FUNCTION..BCM2708_GPIO_MAX_FUNCTION] of LongWord = (</code>
 +
|-
 +
| <code>BCM2835_GPFSEL_IN,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPFSEL_OUT,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPFSEL_ALT0,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPFSEL_ALT1,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPFSEL_ALT2,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPFSEL_ALT3,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPFSEL_ALT4,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPFSEL_ALT5);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''BCM2835 functions to GPIO functions''
 +
|-
 +
|colspan="2"|<code>BCM2708_GPIO_FUNCTION_UNMAP:array[BCM2708_GPIO_MIN_FUNCTION..BCM2708_GPIO_MAX_FUNCTION] of LongWord = (</code>
 +
|-
 +
| <code>GPIO_FUNCTION_IN,</code>
 +
| &nbsp;
 +
|-
 +
| <code>GPIO_FUNCTION_OUT,</code>
 +
| &nbsp;
 +
|-
 +
| <code>GPIO_FUNCTION_ALT5,</code>
 +
| &nbsp;
 +
|-
 +
| <code>GPIO_FUNCTION_ALT4,</code>
 +
| &nbsp;
 +
|-
 +
| <code>GPIO_FUNCTION_ALT0,</code>
 +
| &nbsp;
 +
|-
 +
| <code>GPIO_FUNCTION_ALT1,</code>
 +
| &nbsp;
 +
|-
 +
| <code>GPIO_FUNCTION_ALT2,</code>
 +
| &nbsp;
 +
|-
 +
| <code>GPIO_FUNCTION_ALT3);</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
|colspan="2"|''GPIO triggers to BCM2835 event registers''
 +
|-
 +
|colspan="2"|<code>BCM2708_GPIO_TRIGGER_MAP:array[BCM2708_GPIO_MIN_TRIGGER..BCM2708_GPIO_MAX_TRIGGER] of LongWord = (</code>
 +
|-
 +
| <code>GPIO_FUNCTION_IN,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPLEN0,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPHEN0,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPREN0,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPFEN0,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPAREN0,</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2835_GPAFEN0);</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 UART0 (PL011)''' <code> BCM2708_UART0_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_UART0_DESCRIPTION = 'BCM2835 PL011 UART';</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_UART0_MIN_BAUD = 300;</code>
 +
| Default minimum of 300 baud
 +
|-
 +
| <code>BCM2708_UART0_MAX_BAUD = 187500;</code>
 +
| Default maximum based on the default settings from the firmware (Recalculated during open)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_UART0_MIN_DATABITS = SERIAL_DATA_5BIT;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2708_UART0_MAX_DATABITS = SERIAL_DATA_8BIT;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_UART0_MIN_STOPBITS = SERIAL_STOP_1BIT;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2708_UART0_MAX_STOPBITS = SERIAL_STOP_2BIT;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_UART0_MAX_PARITY = SERIAL_PARITY_EVEN;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_UART0_MAX_FLOW = SERIAL_FLOW_RTS_CTS;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code> BCM2708_UART0_CLOCK_RATE = 3000000;</code>
 +
| Default clock rate based on the default settings from the firmware (Requested from firmware during open)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_UART0_RX_POLL_LIMIT = 256;</code>
 +
| Number of times interrupt handler may poll the read FIFO
 +
|-
 +
| <code>BCM2708_UART0_RX_BUFFER_SIZE = 1024;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 UART1 (AUX)''' <code> BCM2708_UART1_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_UART1_DESCRIPTION = 'BCM2835 AUX (Mini) UART';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 SDHCI''' <code> BCM2708_EMMC_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_EMMC_DESCRIPTION = 'BCM2835 Arasan SD Host';</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_EMMC_MIN_FREQ = 400000;</code>
 +
| Default minimum of 400KHz
 +
|-
 +
| <code>BCM2708_EMMC_MAX_FREQ = 200000000;</code>
 +
| Default clock rate based on the default settings from the firmware (Requested from firmware during start)
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 SDHOST''' <code> BCM2708_SDHOST_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_SDHOST_DESCRIPTION = 'BCM2835 SDHOST';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_SDHOST_MIN_FREQ = 400000;</code>
 +
| Default minimum of 400KHz
 +
|-
 +
| <code>BCM2708_SDHOST_MAX_FREQ = 250000000;</code>
 +
| Default clock rate based on the default settings from the firmware (Requested from firmware during start)
 +
|-
 +
|colspan="2"|See: BCMSDHOST for the driver implementation
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 clock (system timer)''' <code> BCM2708_SYS_CLOCK_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_SYS_CLOCK_DESCRIPTION = 'BCM2835 System Timer Clock';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 clock (ARM timer)''' <code> BCM2708_ARM_CLOCK_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_ARM_CLOCK_DESCRIPTION = 'BCM2835 ARM Timer Clock';</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_ARM_CLOCK_MIN_RATE = 976562;</code>
 +
| Default minimum (Divider 255) based on the default settings from the firmware (Recalculated during start)
 +
|-
 +
| <code>BCM2708_ARM_CLOCK_MAX_RATE = 250000000;</code>
 +
| Default maximum (Divider 0) based on the default settings from the firmware (Recalculated during start)
 +
|-
 +
| <code>BCM2708_ARM_CLOCK_DEFAULT_RATE = 3968253;</code>
 +
| Default rate (Divider 62) based on the default settings from the firmware (Recalculated during start)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_ARM_CLOCK_MIN_DIVIDER = 0;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2708_ARM_CLOCK_MAX_DIVIDER = 255;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2708_ARM_CLOCK_DEFAULT_DIVIDER = 62;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_ARM_CLOCK_CORE_CLOCK = 250000000;</code>
 +
| Default core clock based on the default settings from the firmware (Requested from firmware during start)
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 ARM timer''' <code> BCM2708_ARM_TIMER_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_ARM_TIMER_DESCRIPTION = 'BCM2835 ARM Timer';</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_ARM_TIMER_MIN_RATE = 244140;</code>
 +
| Default minimum (Divider 1023) based on the default settings from the firmware (Recalculated during start)
 +
|-
 +
| <code>BCM2708_ARM_TIMER_MAX_RATE = 250000000;</code>
 +
| Default maximum (Divider 0) based on the default settings from the firmware (Recalculated during start)
 +
|-
 +
| <code>BCM2708_ARM_TIMER_DEFAULT_RATE = 1000000;</code>
 +
| Default rate (Divider 249) based on the default settings from the firmware (Recalculated during start)
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_ARM_TIMER_MIN_INTERVAL = 1;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2708_ARM_TIMER_MAX_INTERVAL = $FFFFFFFF;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_ARM_TIMER_MIN_DIVIDER = 0;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2708_ARM_TIMER_MAX_DIVIDER = 1023;</code>
 +
| &nbsp;
 +
|-
 +
| <code>BCM2708_ARM_TIMER_DEFAULT_DIVIDER = 249;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_ARM_TIMER_CORE_CLOCK = 250000000;</code>
 +
| Default core clock based on the default settings from the firmware (Requested from firmware during start)
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 random''' <code> BCM2708_RANDOM_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_RANDOM_DESCRIPTION = 'BCM2835 Random Number Generator';</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>BCM2708_RANDOM_WARMUP_COUNT = $00040000;</code>
 +
| The initial numbers generated are "less random" so will be discarded
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 mailbox''' <code> BCM2708_MAILBOX_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_MAILBOX_DESCRIPTION = 'BCM2835 Mailbox';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 watchdog''' <code> BCM2708_WATCHDOG_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_WATCHDOG_DESCRIPTION = 'BCM2835 Watchdog Timer';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''BCM2708 framebuffer''' <code> BCM2708_FRAMEBUFFER_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>BCM2708_FRAMEBUFFER_DESCRIPTION = 'BCM2835 Framebuffer';</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
  
 
=== Type definitions ===
 
=== Type definitions ===
 
----
 
----
  
''To be documented''
+
 
 +
'''BCM2708 SPI0'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708SPI0Device = ^TBCM2708SPI0Device;</code>
 +
 
 +
<code>TBCM2708SPI0Device = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''SPI Properties''
 +
|-
 +
| <code>SPI:TSPIDevice;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''BCM2708 Properties''
 +
|-
 +
| <code>Address:Pointer;</code>
 +
| Device register base address
 +
|-
 +
| <code>CoreClock:LongWord;</code>
 +
| Core clock rate
 +
|-
 +
|colspan="2"|''Transfer Properties''
 +
|-
 +
| <code>Mode:LongWord;</code>
 +
| Mode of current transfer (BCM2708_SPI0_MODE_IRQ/BCM2708_SPI0_MODE_DMA / BCM2708_SPI0_MODE_PIO)
 +
|-
 +
| <code>Source:Pointer;</code>
 +
| Pointer to the source for current transfer (nil if reading only)
 +
|-
 +
| <code>Dest:Pointer;</code>
 +
| Pointer to the destination for current transfer (nil if writing only)
 +
|-
 +
| <code>Count:LongWord;</code>
 +
| Count of bytes for current transfer
 +
|-
 +
| <code>SourceRemain:LongWord;</code>
 +
| Source bytes remaining for current transfer
 +
|-
 +
| <code>DestRemain:LongWord;</code>
 +
| Destination bytes remaining for current transfer
 +
|-
 +
|colspan="2"|''Statistics Properties''
 +
|-
 +
| <code>InterruptCount:LongWord;</code>
 +
| Number of interrupt requests received by the device
 +
|-
 +
|}
 +
</div></div> 
 +
 
 +
'''BCM2708 BSCI2C (I2C0/1/2) device'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708BSCI2CDevice = ^TBCM2708BSCI2CDevice;</code>
 +
 
 +
<code>TBCM2708BSCI2CDevice = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''I2C Properties''
 +
|-
 +
| <code>I2C:TI2CDevice;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''BCM2708 Properties''
 +
|-
 +
| <code>Address:Pointer;</code>
 +
| Device register base address
 +
|-
 +
| <code>CoreClock:LongWord;</code>
 +
| Core clock rate
 +
|-
 +
| <code>SDAPin:LongWord;</code>
 +
| GPIO pin for the SDA line
 +
|-
 +
| <code>SCLPin:LongWord;</code>
 +
| GPIO pin for the SCL line
 +
|-
 +
| <code>SDAFunction:LongWord;</code>
 +
| GPIO function for the SDA line
 +
|-
 +
| <code>SCLFunction:LongWord;</code>
 +
| GPIO function for the SCL line
 +
|-
 +
|colspan="2"|''Transfer Properties''
 +
|-
 +
| <code>Index:LongWord;</code>
 +
| Index of this device in the IRQData array (Set during device initialization)
 +
|-
 +
| <code>Mode:LongWord;</code>
 +
| Mode of current transfer (BCM2708_BSCI2C_MODE_WRITE/BCM2708_BSCI2C_MODE_READ)
 +
|-
 +
| <code>Data:Pointer;</code>
 +
| Pointer to the data for current transfer
 +
|-
 +
| <code>Count:LongWord;</code>
 +
| Count of bytes for current transfer
 +
|-
 +
| <code>Remain:LongWord;</code>
 +
| Bytes remaining for current transfer
 +
|-
 +
| <code>Error:LongBool;</code>
 +
| True if an error occurred during the transfer
 +
|-
 +
|colspan="2"|''Statistics Properties''
 +
|-
 +
| <code>InterruptCount:LongWord;</code>
 +
| Number of interrupt requests received by the device
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''BCM2708 BSCI2C (I2C0/1) IRQ data'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708BSCI2CIRQData = ^TBCM2708BSCI2CIRQData;</code>
 +
 
 +
<code>TBCM2708BSCI2CIRQData = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|Note: BSC I2C devices share a single interrupt
 +
|-
 +
| <code>Count:LongWord;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>Lock:TSpinHandle;</code>
 +
| &nbsp;
 +
|-
 +
| <code>Devices:array[0..2] of PBCM2708BSCI2CDevice;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div> 
 +
 +
'''BCM2708 SPI AUX (SPI1/2)'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708SPIAUXDevice = ^TBCM2708SPIAUXDevice;</code>
 +
 
 +
<code>TBCM2708SPIAUXDevice = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''SPI Properties''
 +
|-
 +
| <code>SPI:TSPIDevice;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''BCM2708 Properties''
 +
|-
 +
| <code>Address:Pointer;</code>
 +
| Device register base address
 +
|-
 +
| <code>CoreClock:LongWord;</code>
 +
| Core clock rate
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''BCM2708 I2C slave buffer'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708I2CSlaveBuffer = ^TBCM2708I2CSlaveBuffer;</code>
 +
 
 +
<code>TBCM2708I2CSlaveBuffer = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>Wait:TSemaphoreHandle;</code>
 +
| Data ready semaphore
 +
|-
 +
| <code>Start:LongWord;</code>
 +
| Index of first available buffer entry
 +
|-
 +
| <code>Count:LongWord;</code>
 +
| Number of available entries in the buffer
 +
|-
 +
| <code>Buffer:array[0..(BCM2708_I2CSLAVE_BUFFER_SIZE - 1)] of Byte;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''BCM2708 I2C slave'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708I2CSlave = ^TBCM2708I2CSlave;</code>
 +
 
 +
<code>TBCM2708I2CSlave = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''I2C Properties''
 +
|-
 +
| <code>I2C:TI2CDevice;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''BCM2708 Properties''
 +
|-
 +
| <code>IRQ:LongWord;</code>
 +
| IRQ of this device
 +
|-
 +
| <code>Address:Pointer;</code>
 +
| Device register base address
 +
|-
 +
| <code>Lock:TSpinHandle;</code>
 +
| Device lock (Differs from lock in I2C device) (Spin lock due to use by interrupt handler)
 +
|-
 +
| <code>SDAPin:LongWord;</code>
 +
| GPIO pin for the SDA line
 +
|-
 +
| <code>SCLPin:LongWord;</code>
 +
| GPIO pin for the SCL line
 +
|-
 +
| <code>SDAFunction:LongWord;</code>
 +
| GPIO function for the SDA line
 +
|-
 +
| <code>SCLFunction:LongWord;</code>
 +
| GPIO function for the SCL line
 +
|-
 +
|colspan="2"|''Transfer Properties''
 +
|-
 +
| <code>Receive:TBCM2708I2CSlaveBuffer;</code>
 +
| Receive Data Buffer
 +
|-
 +
| <code>Transmit:TBCM2708I2CSlaveBuffer;</code>
 +
| Transmit Data Buffer
 +
|-
 +
|colspan="2"|''Statistics Properties''
 +
|-
 +
| <code>InterruptCount:LongWord;</code>
 +
| Number of interrupt requests received by the device
 +
|-
 +
|}
 +
</div></div> 
 +
 
 +
'''BCM2708 DMA channel'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708DMAChannel = ^TBCM2708DMAChannel;</code>
 +
 
 +
<code>TBCM2708DMAChannel = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>Host:PBCM2708DMAHost;</code>
 +
| DMA host this channel belongs to
 +
|-
 +
| <code>Request:PDMARequest;</code>
 +
| Current DMA request pending on this channel (or nil of no request is pending)
 +
|-
 +
| <code>Number:LongWord;</code>
 +
| The channel number of this channel
 +
|-
 +
| <code>Interrupt:LongWord;</code>
 +
| The interrupt number of this channel
 +
|-
 +
| <code>Registers:PBCM2835DMARegisters;</code>
 +
| The channel registers for configuration
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''BCM2708 DMA'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708DMAHost = ^TBCM2708DMAHost;</code>
 +
 
 +
<code>TBCM2708DMAHost = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''DMA Properties''
 +
|-
 +
| <code>DMA:TDMAHost;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''BCM2708 Properties''
 +
|-
 +
| <code>ChannelMask:LongWord;</code>
 +
| Mask of available channels (Passed from GPU firmware)
 +
|-
 +
| <code>ChannelFree:LongWord;</code>
 +
| Bitmap of current free channels
 +
|-
 +
| <code>ChannelLock:TMutexHandle;</code>
 +
| Lock for access to ChannelFree
 +
|-
 +
| <code>ChannelWait:TSemaphoreHandle;</code>
 +
| Number of free normal channels in ChannelFree
 +
|-
 +
| <code>ChannelLite:TSemaphoreHandle;</code>
 +
| Number of free DMA Lite channels in ChannelFree
 +
|-
 +
| <code>ChannelBulk:TSemaphoreHandle;</code>
 +
| Number of free DMA Bulk channels in ChannelFree
 +
|-
 +
| <code>Channels:array[0..BCM2708_DMA_CHANNEL_COUNT - 1] of TBCM2708DMAChannel;</code>
 +
| Channel information for each DMA channel on the host
 +
|-
 +
| <code>EnableRegister:PLongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>InterruptRegister:PLongWord;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''Statistics Properties''
 +
|-
 +
| <code>InterruptCount:LongWord;</code>
 +
| Number of interrupt requests received by the host controller
 +
|-
 +
|}
 +
</div></div> 
 +
 +
'''BCM2708 PWM device'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708PWMDevice = ^TBCM2708PWMDevice;</code>
 +
 
 +
<code>TBCM2708PWMDevice = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''PWM Properties''
 +
|-
 +
| <code>PWM:TPWMDevice;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''BCM2708 Properties''
 +
|-
 +
| <code>Address:Pointer;</code>
 +
| Device register base address
 +
|-
 +
| <code>Channel:LongWord;</code>
 +
| Channel for this device
 +
|-
 +
| <code>Scaler:LongWord;</code>
 +
| Scaler for Duty cycle and Period
 +
|-
 +
| <code>Pair:PBCM2708PWMDevice;</code>
 +
| The paired PWM device for the other channel
 +
|-
 +
|colspan="2"|''Audio Properties''
 +
|-
 +
| <code>Audio:PBCM2708PWMAudio;</code>
 +
| The associated PWM Audio device
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''BCM2708 PWM audio'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708PWMAudio = ^TBCM2708PWMAudio;</code>
 +
 
 +
<code>TBCM2708PWMAudio = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''Audio Properties''
 +
|-
 +
| <code>Audio:TAudioDevice;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''PWM Properties''
 +
|-
 +
| <code>PWM0:PBCM2708PWMDevice;</code>
 +
| The PWM device for channel 0
 +
|-
 +
| <code>PWM1:PBCM2708PWMDevice;</code>
 +
| The PWM device for channel 1
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''BCM2708 GPIO'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708GPIOBank = ^TBCM2708GPIOBank;</code>
 +
 
 +
<code>TBCM2708GPIOBank = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>GPIO:PGPIODevice;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>Bank:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>Address:PtrUInt;</code>
 +
| &nbsp;
 +
|-
 +
| <code>PinStart:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''BCM2708 GPIO device'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708GPIODevice = ^TBCM2708GPIODevice;</code>
 +
 
 +
<code>TBCM2708GPIODevice = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''GPIO Properties''
 +
|-
 +
| <code>GPIO:TGPIODevice;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''BCM2708 Properties''
 +
|-
 +
| <code>Lock:TSpinHandle;</code>
 +
| Device lock (Differs from lock in Device portion) (Spin lock due to use by interrupt handler)
 +
|-
 +
| <code>Banks:array[0..BCM2835_GPIO_BANK_COUNT - 1] of TBCM2708GPIOBank;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''Statistics Properties''
 +
|-
 +
| <code>InterruptCount:LongWord;</code>
 +
| Number of interrupt requests received by the device
 +
|-
 +
|}
 +
</div></div>
 +
 +
'''BCM2708 UART0'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708UART0Device = ^TBCM2708UART0Device;</code>
 +
 
 +
<code>TBCM2708UART0Device = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''UART Properties''
 +
|-
 +
| <code>UART:TUARTDevice;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''BCM2708 Properties''
 +
|-
 +
| <code>Address:Pointer;</code>
 +
| Device register base address
 +
|-
 +
| <code>ClockRate:LongWord;</code>
 +
| Device clock rate
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>Start:LongWord;</code>
 +
| Index of first available buffer entry
 +
|-
 +
| <code>Count:LongWord;</code>
 +
| Number of available entries in the buffer
 +
|-
 +
| <code>Buffer:array[0..(BCM2708_UART0_RX_BUFFER_SIZE - 1)] of Word;</code>
 +
| Buffer for received data (Includes data and status)
 +
|-
 +
|colspan="2"|''Statistics Properties''
 +
|-
 +
| <code>InterruptCount:LongWord;</code>
 +
| Number of interrupt requests received by the device
 +
|-
 +
|}
 +
</div></div>
 +
 +
'''BCM2708 SDHCI'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708SDHCIHost = ^TBCM2708SDHCIHost;</code>
 +
 
 +
<code>TBCM2708SDHCIHost = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''SDHCI Properties''
 +
|-
 +
| <code>SDHCI:TSDHCIHost;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|colspan="2"|''BCM2708 Properties''
 +
|-
 +
| <code>FIQ:LongBool;</code>
 +
| &nbsp;
 +
|-
 +
| <code>SDIO:LongBool;</code>
 +
| &nbsp;
 +
|-
 +
| <code>WriteDelay:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>DelayClock:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>ShadowRegister:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div> 
 +
 +
'''BCM2708 system clock'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708SystemClock = ^TBCM2708SystemClock;</code>
 +
 
 +
<code>TBCM2708SystemClock = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''Clock Properties''
 +
|-
 +
| <code>Clock:TClockDevice;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div> 
 +
 
 +
'''BCM2708 ARM clock'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708ARMClock = ^TBCM2708ARMClock;</code>
 +
 
 +
<code>TBCM2708ARMClock = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''Clock Properties''
 +
|-
 +
| <code>Clock:TClockDevice;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''BCM2708 Properties''
 +
|-
 +
| <code>CoreClock:LongWord;</code>
 +
| Core clock rate
 +
|-
 +
|}
 +
</div></div> 
 +
 
 +
'''BCM2708 ARM timer'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708ARMTimer = ^TBCM2708ARMTimer;</code>
 +
 
 +
<code>TBCM2708ARMTimer = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''Timer Properties''
 +
|-
 +
| <code>Timer:TTimerDevice;</code>
 +
| &nbsp;
 +
|-
 +
|colspan="2"|''BCM2708 Properties''
 +
|-
 +
| <code>CoreClock:LongWord;</code>
 +
| Core clock rate
 +
|-
 +
|colspan="2"|''Statistics Properties''
 +
|-
 +
| <code>InterruptCount:LongWord;</code>
 +
| Number of interrupt requests received by the device
 +
|-
 +
|}
 +
</div></div>
 +
 +
'''BCM2708 random'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708Random = ^TBCM2708Random;</code>
 +
 
 +
<code>TBCM2708Random = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''Random Properties''
 +
|-
 +
| <code>Random:TRandomDevice;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div> 
 +
 
 +
'''BCM2708 mailbox'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708Mailbox = ^TBCM2708Mailbox;</code>
 +
 
 +
<code>TBCM2708Mailbox = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''Mailbox Properties''
 +
|-
 +
| <code>Mailbox:TMailboxDevice;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
 
 +
'''BCM2708 watchdog'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708Watchdog = ^TBCM2708Watchdog;</code>
 +
 
 +
<code>TBCM2708Watchdog = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''Watchdog Properties''
 +
|-
 +
| <code>Watchdog:TWatchdogDevice;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div> 
 +
 
 +
'''BCM2708 framebuffer'''
 +
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 +
<code>PBCM2708Framebuffer = ^TBCM2708Framebuffer;</code>
 +
 
 +
<code>TBCM2708Framebuffer = record</code>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
|colspan="2"|''Framebuffer Properties''
 +
|-
 +
| <code>Framebuffer:TFramebufferDevice;</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|colspan="2"|''BCM2708 Properties''
 +
|-
 +
| <code>MultiDisplay:LongBool;</code>
 +
| &nbsp;
 +
|-
 +
| <code>DisplayNum:LongWord;</code>
 +
| &nbsp;
 +
|-
 +
| <code>DisplaySettings:TDisplaySettings;</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div> 
 +
<br />
  
 
=== Public variables ===
 
=== Public variables ===
 
----
 
----
  
''To be documented''
+
''None defined''
  
 
=== Function declarations ===
 
=== Function declarations ===
 
----
 
----
  
''To be documented''
 
  
 +
'''Initialization functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708Init;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 SPI0 functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SPI0Start(SPI:PSPIDevice; Mode,ClockRate,ClockPhase,ClockPolarity:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SPI0Stop(SPI:PSPIDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SPI0WriteRead(SPI:PSPIDevice; ChipSelect:Word; Source,Dest:Pointer; Size,Flags: LongWord; var Count:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SPI0SetMode(SPI:PSPIDevice; Mode:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SPI0SetClockRate(SPI:PSPIDevice; ChipSelect:Word; ClockRate:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SPI0SetClockPhase(SPI:PSPIDevice; ClockPhase:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SPI0SetClockPolarity(SPI:PSPIDevice; ClockPolarity:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SPI0SetSelectPolarity(SPI:PSPIDevice; ChipSelect:Word; SelectPolarity:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708SPI0ReadFIFO(SPI:PBCM2708SPI0Device);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Caller will hold the SPI device lock</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Called from within the interrupt handler
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708SPI0WriteFIFO(SPI:PBCM2708SPI0Device);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Caller will hold the SPI device lock</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Called from within the interrupt handler
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708SPI0InterruptHandler(SPI:PBCM2708SPI0Device);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708SPI0DMARequestCompleted(Request:PDMARequest);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' DMA Request completion callback for SPI0</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 BSCI2C (I2C0/1/2) functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708BSCI2CStart(I2C:PI2CDevice; Rate:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708BSCI2CStop(I2C:PI2CDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708BSCI2CRead(I2C:PI2CDevice; Address:Word; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708BSCI2CWrite(I2C:PI2CDevice; Address:Word; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708BSCI2CWriteRead(I2C:PI2CDevice; Address:Word; Initial:Pointer; Len:LongWord; Data:Pointer; Size:LongWord; var Count:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708BSCI2CWriteWrite(I2C:PI2CDevice; Address:Word; Initial:Pointer; Len:LongWord; Data:Pointer; Size:LongWord; var Count:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708BSCI2CSetRate(I2C:PI2CDevice; Rate:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708BSCI2CSetAddress(I2C:PI2CDevice; Address:Word):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708BSCI2CFillFIFO(I2C:PBCM2708BSCI2CDevice);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Caller will hold the I2C device lock</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Called from within the interrupt handler
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708BSCI2CDrainFIFO(I2C:PBCM2708BSCI2CDevice);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Caller will hold the I2C device lock</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Called from within the interrupt handler
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708BSCI2CInterruptHandler(IRQData:PBCM2708BSCI2CIRQData);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Thread submitting the current request will hold the I2C device lock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 SPI/I2C slave functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708I2CSlaveStart(I2C:PI2CDevice; Rate:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of I2CSlaveStart API for BCM2708 I2C slave</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use I2CSlaveStart instead.
 +
Rate is not applicable for I2C slave devices
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708I2CSlaveStop(I2C:PI2CDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of I2CSlaveStop API for BCM2708 I2C slave</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use I2CSlaveStop instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708I2CSlaveRead(I2C:PI2CDevice; Address:Word; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of I2CSlaveRead API for BCM2708 I2C slave</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use I2CSlaveRead instead.
 +
Address is not applicable for I2C slave devices
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708I2CSlaveWrite(I2C:PI2CDevice; Address:Word; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of I2CSlaveWrite API for BCM2708 I2C slave</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use I2CSlaveWrite instead.
 +
Address is not applicable for I2C slave devices
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708I2CSlaveSetAddress(I2C:PI2CDevice; Address:Word):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of I2CSlaveSetAddress API for BCM2708 I2C slave</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use I2CSlaveSetAddress instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 DMA functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708DMAHostStart(DMA:PDMAHost):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708DMAHostStop(DMA:PDMAHost):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708DMAHostSubmit(DMA:PDMAHost; Request:PDMARequest):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708DMAHostCancel(DMA:PDMAHost; Request:PDMARequest):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708DMAInterruptHandler(Channel:PBCM2708DMAChannel);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' DMA Channels 0 to 10 each have a dedicated interrupt, this handler simply clears the interrupt and sends a completion on the associated channel</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708DMASharedInterruptHandler(DMA:PBCM2708DMAHost);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' DMA Channels 11 to 14 share a common interrupt, this alternate handler determines which ones triggered the current interrupt and sends a completion on that channel</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708DMARequestComplete(Channel:PBCM2708DMAChannel);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708DMAPeripheralToDREQ(Peripheral:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708DMADataToControlBlock(Request:PDMARequest; Data:PDMAData; Block:PBCM2835DMAControlBlock; Bulk,Lite:Boolean);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 PWM0/1 functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708PWMStart(PWM:PPWMDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708PWMStop(PWM:PPWMDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708PWMWrite(PWM:PPWMDevice; Value:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708PWMSetGPIO(PWM:PPWMDevice; GPIO:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708PWMResetGPIO(PWM:PPWMDevice; GPIO:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708PWMSetMode(PWM:PPWMDevice; Mode:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708PWMSetRange(PWM:PPWMDevice; Range:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708PWMSetFrequency(PWM:PPWMDevice; Frequency:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708PWMSetPolarity(PWM:PPWMDevice; Polarity:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708PWMConfigure(PWM:PPWMDevice; DutyNS,PeriodNS:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708PWMClockStart(PWM:PPWMDevice; Frequency:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708PWMClockStop(PWM:PPWMDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708PWMClockEnabled(PWM:PPWMDevice):Boolean;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 GPIO functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708GPIOStart(GPIO:PGPIODevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708GPIOStop(GPIO:PGPIODevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708GPIORead(GPIO:PGPIODevice;Reg:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708GPIOWrite(GPIO:PGPIODevice; Reg,Value:LongWord);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708GPIOInputGet(GPIO:PGPIODevice; Pin:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708GPIOInputWait(GPIO:PGPIODevice; Pin,Trigger,Timeout:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708GPIOInputEvent(GPIO:PGPIODevice; Pin,Trigger,Flags,Timeout:LongWord; Callback:TGPIOCallback; Data:Pointer):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708GPIOInputCancel(GPIO:PGPIODevice; Pin:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708GPIOOutputSet(GPIO:PGPIODevice; Pin,Level:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708GPIOPullSelect(GPIO:PGPIODevice; Pin,Mode:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708GPIOFunctionGet(GPIO:PGPIODevice; Pin:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708GPIOFunctionSelect(GPIO:PGPIODevice; Pin,Mode:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708GPIOInterruptHandler(Bank:PBCM2708GPIOBank);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708GPIOEventTrigger(Pin:PGPIOPin);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708GPIOEventTimeout(Event:PGPIOEvent);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 UART0 functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708UART0Open(UART:PUARTDevice; BaudRate,DataBits,StopBits,Parity,FlowControl:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of UARTDeviceOpen API for BCM2708 UART0</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use UARTDeviceOpen instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708UART0Close(UART:PUARTDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of UARTDeviceClose API for BCM2708 UART0</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use UARTDeviceClose instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708UART0Read(UART:PUARTDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of UARTDeviceRead API for BCM2708 UART0</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use UARTDeviceRead instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708UART0PushRX(UART:PUARTDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708UART0Write(UART:PUARTDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of UARTDeviceWrite API for BCM2708 UART0</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use UARTDeviceWrite instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708UART0GetStatus(UART:PUARTDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of UARTDeviceGetStatus API for BCM2708 UART0</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use UARTDeviceGetStatus instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708UART0SetStatus(UART:PUARTDevice; Status:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of UARTDeviceSetStatus API for BCM2708 UART0</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use UARTDeviceSetStatus instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708UART0InterruptHandler(UART:PUARTDevice);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Interrupt handler for the BCM2708 UART0 device</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708UART0Receive(UART:PUARTDevice);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Receive handler for the BCM2708 UART0 device</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708UART0Transmit(UART:PUARTDevice);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Transmit handler for the BCM2708 UART0 device</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708UART0EnableInterrupt(UART:PBCM2708UART0Device; Interrupt:LongWord);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Enable the specified interrupt in the interrupt mask register of a BCM2708 UART0 device</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! UART
 +
| The BCM2708 UART0 device to enable the interrupt for
 +
|-
 +
! Interrupt
 +
| The interrupt to enable
 +
|-
 +
! Note
 +
| Caller must hold the UART lock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708UART0DisableInterrupt(UART:PBCM2708UART0Device; Interrupt:LongWord);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Disable the specified interrupt in the interrupt mask register of a BCM2708 UART0 device</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! UART
 +
| The BCM2708 UART0 device to disable the interrupt for
 +
|-
 +
! Interrupt
 +
| The interrupt to disable
 +
|-
 +
! Note
 +
| Caller must hold the UART lock
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 SDHCI functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SDHCIHostStart(SDHCI:PSDHCIHost):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostStart API for BCM2708 SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostStart instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SDHCIHostStop(SDHCI:PSDHCIHost):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostStop API for BCM2708 SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostStop instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SDHCIHostLock(SDHCI:PSDHCIHost):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostLock API for BCM2708 SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostLock instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SDHCIHostUnlock(SDHCI:PSDHCIHost):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostUnlock API for BCM2708 SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostUnlock instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SDHCIHostSignal(SDHCI:PSDHCIHost; Semaphore:TSemaphoreHandle):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostSignal API for BCM2708 SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostSignal instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SDHCIHostReadByte(SDHCI:PSDHCIHost; Reg:LongWord):Byte;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostReadByte API for BCM2708 SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostReadByte instead.
 +
|-
 +
! Note
 +
| The Broadcom document BCM2835-ARM-Peripherals page 66 states the following: Contrary to Arasans documentation the EMMC module registers can only be accessed as 32 bit registers, i.e. the two LSBs of the address are always zero. For this reason this code must simulate Byte and Word reads using LongWord reads.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SDHCIHostReadWord(SDHCI:PSDHCIHost; Reg:LongWord):Word;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostReadWord API for BCM2708 SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostReadWord instead.
 +
|-
 +
! Note
 +
| The Broadcom document BCM2835-ARM-Peripherals page 66 states the following: Contrary to Arasans documentation the EMMC module registers can only be accessed as 32 bit registers, i.e. the two LSBs of the address are always zero. For this reason this code must simulate Byte and Word reads using LongWord reads.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SDHCIHostReadLong(SDHCI:PSDHCIHost; Reg:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostReadLong API for BCM2708 SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostReadLong instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708SDHCIHostWriteByte(SDHCI:PSDHCIHost; Reg:LongWord; Value:Byte);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostWriteByte API for BCM2708 SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostWriteByte instead.
 +
|-
 +
! Note
 +
| The Broadcom document BCM2835-ARM-Peripherals page 66 states the following: Contrary to Arasans documentation the EMMC module registers can only be accessed as 32 bit registers, i.e. the two LSBs of the address are always zero. For this reason this code must simulate Byte and Word writes using LongWord writes.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708SDHCIHostWriteWord(SDHCI:PSDHCIHost; Reg:LongWord; Value:Word);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostWriteWord API for BCM2708 SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostWriteWord instead.
 +
|-
 +
! Note
 +
| The Broadcom document BCM2835-ARM-Peripherals page 66 states the following: Contrary to Arasans documentation the EMMC module registers can only be accessed as 32 bit registers, i.e. the two LSBs of the address are always zero. For this reason this code must simulate Byte and Word writes using LongWord writes.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708SDHCIHostWriteLong(SDHCI:PSDHCIHost; Reg:LongWord; Value:LongWord);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of SDHCIHostWriteLong API for BCM2708 SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use SDHCIHostWriteLong instead.
 +
|-
 +
! Note
 +
| The source code of U-Boot and Linux kernel drivers have this comment The Arasan has a bugette whereby it may lose the content of successive writes to registers that are within two SD-card clock cycles of each other (a clock domain crossing problem). It seems, however, that the data register does not have this problem. (Which is just as well - otherwise we'd have to nobble the DMA engine too) For this reason this code must delay after each write to the registers.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708SDHCIInterruptHandler(SDHCI:PSDHCIHost);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Interrupt handler for the BCM2708 SDHCI host controller</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SDHCISetupInterrupts(SDHCI:PSDHCIHost):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Configure and enable interrupt handling for the BCM2708 SDHCI</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708MMCDeviceGetCardDetect(MMC:PMMCDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of MMC GetCardDetect for the BCM2708 which does not update the bits in the SDHCI_PRESENT_STATE register to reflect card insertion or removal</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use MMCDeviceGetCardDetect instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 system clock functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SystemClockRead(Clock:PClockDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of ClockDeviceRead API for System Clock</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use ClockDeviceRead instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SystemClockRead64(Clock:PClockDevice):Int64;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of ClockDeviceRead64 API for System Clock</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use ClockDeviceRead64 instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 ARM clock functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708ARMClockStart(Clock:PClockDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of ClockDeviceStart API for ARM Clock</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use ClockDeviceStart instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708ARMClockStop(Clock:PClockDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of ClockDeviceStop API for ARM Clock</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use ClockDeviceStop instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708ARMClockRead(Clock:PClockDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of ClockDeviceRead API for ARM Clock</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use ClockDeviceRead instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708ARMClockRead64(Clock:PClockDevice):Int64;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of ClockDeviceRead64 API for ARM Clock</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use ClockDeviceRead64 instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708ARMClockSetRate(Clock:PClockDevice; Rate:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of ClockDeviceSetRate API for ARM Clock</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use ClockDeviceSetRate instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 ARM timer functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708ARMTimerStart(Timer:PTimerDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of TimerDeviceStart API for ARM Timer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use TimerDeviceStart instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708ARMTimerStop(Timer:PTimerDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of TimerDeviceStop API for ARM Timer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use TimerDeviceStop instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708ARMTimerRead64(Timer:PTimerDevice):Int64;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of TimerDeviceRead64 API for ARM Timer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use TimerDeviceRead64 instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708ARMTimerWait(Timer:PTimerDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of TimerDeviceWait API for ARM Timer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use TimerDeviceWait instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708ARMTimerEvent(Timer:PTimerDevice; Flags:LongWord; Callback:TTimerCallback; Data:Pointer):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of TimerDeviceEvent API for ARM Timer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use TimerDeviceEvent instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708ARMTimerCancel(Timer:PTimerDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of TimerDeviceCancel API for ARM Timer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use TimerDeviceCancel instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708ARMTimerSetRate(Timer:PTimerDevice; Rate:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of TimerDeviceSetRate API for ARM Timer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use TimerDeviceSetRate instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708ARMTimerSetInterval(Timer:PTimerDevice; Interval:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of TimerDeviceSetInterval API for ARM Timer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use TimerDeviceSetInterval instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708ARMTimerInterruptHandler(Timer:PTimerDevice);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Interrupt handler for ARM Timer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">procedure BCM2708ARMTimerEventTrigger(Timer:PTimerDevice);</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Event handler for ARM Timer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 random functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708RandomStart(Random:PRandomDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708RandomStop(Random:PRandomDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708RandomReadLongWord(Random:PRandomDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 watchdog functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708WatchdogStart(Watchdog:PWatchdogDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708WatchdogStop(Watchdog:PWatchdogDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708WatchdogRefresh(Watchdog:PWatchdogDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708WatchdogGetRemain(Watchdog:PWatchdogDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| None documented
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 framebuffer functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708FramebufferAllocate(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of FramebufferDeviceAllocate API for BCM2708 Framebuffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use FramebufferDeviceAllocate instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708FramebufferRelease(Framebuffer:PFramebufferDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of FramebufferDeviceRelease API for BCM2708 Framebuffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use FramebufferDeviceRelease instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708FramebufferBlank(Framebuffer:PFramebufferDevice; Blank:Boolean):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of FramebufferDeviceBlank API for BCM2708 Framebuffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use FramebufferDeviceBlank instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708FramebufferCommit(Framebuffer:PFramebufferDevice;Address:PtrUInt;Size,Flags:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of FramebufferDeviceCommit API for BCM2708 Framebuffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use FramebufferDeviceCommit instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708FramebufferWaitSync(Framebuffer:PFramebufferDevice):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of FramebufferDeviceWaitSync API for BCM2708 Framebuffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use FramebufferDeviceWaitSync instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708FramebufferSetOffsetEx(Framebuffer:PFramebufferDevice; X,Y:LongWord; Pan,Switch:Boolean):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of FramebufferDeviceSetOffsetEx API for BCM2708 Framebuffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use FramebufferDeviceSetOffsetEx instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708FramebufferGetPalette(Framebuffer:PFramebufferDevice; Palette:PFramebufferPalette):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of FramebufferDeviceGetPalette API for BCM2708 Framebuffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use FramebufferDeviceGetPalette instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708FramebufferSetPalette(Framebuffer:PFramebufferDevice; Palette:PFramebufferPalette):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of FramebufferDeviceSetPalette API for BCM2708 Framebuffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use FramebufferDeviceSetPalette instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708FramebufferSetBacklight(Framebuffer:PFramebufferDevice; Brightness:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of FramebufferDeviceSetBacklight API for BCM2708 Framebuffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use FramebufferDeviceSetBacklight instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708FramebufferSetCursor(Framebuffer:PFramebufferDevice; Width,Height,HotspotX,HotspotY:LongWord; Image:Pointer; Len:LongWord):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of FramebufferDeviceSetCursor API for BCM2708 Framebuffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use FramebufferDeviceSetCursor instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708FramebufferUpdateCursor(Framebuffer:PFramebufferDevice; Enabled:Boolean; X,Y:LongInt; Relative:Boolean):LongWord;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Implementation of FramebufferDeviceUpdateCursor API for BCM2708 Framebuffer</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Note
 +
| Not intended to be called directly by applications, use FramebufferDeviceUpdateCursor instead.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
 +
'''BCM2708 helper functions'''
 +
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708SPIGetDescription(Id:LongWord):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the device description of an SPI device</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Id
 +
| The Id number of the SPI device (0 to 2)
 +
|-
 +
! Return
 +
| The correct device description suitable for passing to SPIDeviceFindByDescription
 +
|-
 +
! Note
 +
| The Id number supplied to this function may differ from the Ultibo device id value.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708I2CGetDescription(Id:LongWord):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the device description of an I2C device</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Id
 +
| The Id number of the I2C device (0 to 2)
 +
|-
 +
! Return
 +
| The correct device description suitable for passing to I2CDeviceFindByDescription
 +
|-
 +
! Note
 +
| The Id number supplied to this function may differ from the Ultibo device id value.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708I2CSlaveGetDescription(Id:LongWord):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the device description of an I2C slave device</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Id
 +
| The Id number of the I2C slave device (Always 0)
 +
|-
 +
! Return
 +
| The correct device description suitable for passing to I2CSlaveFindByDescription
 +
|-
 +
! Note
 +
| The Id number supplied to this function may differ from the Ultibo device id value
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708PWMGetDescription(Id,Channel:LongWord):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the device description of a PWM device</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Id
 +
| The Id number of the PWM device (0 or 1)
 +
|-
 +
! Channel
 +
| The channel number of the PWM device (0 or 1)
 +
|-
 +
! Return
 +
| The correct device description suitable for passing to PWMDeviceFindByDescription
 +
|-
 +
! Note
 +
| The Id number supplied to this function may differ from the Ultibo device id value.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;">
 +
<pre style="border: 0; padding-bottom:0px;">function BCM2708UARTGetDescription(Id:LongWord):String;</pre>
 +
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Get the device description of a UART device</div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
! Id
 +
| The Id number of the UART device (0 or 1)
 +
|-
 +
! Return
 +
| The correct device description suitable for passing to UARTDeviceFindByDescription
 +
|-
 +
! Note
 +
| The Id number supplied to this function may differ from the Ultibo device id value.
 +
|-
 +
|}
 +
</div></div>
 +
<br />
  
 
Return to [[Unit_Reference|Unit Reference]]
 
Return to [[Unit_Reference|Unit Reference]]

Latest revision as of 03:49, 5 September 2023

Return to Unit Reference


Description


Ultibo BCM2708 Interface unit

This unit provides the BCM2708 specific implementations of the following devices:

  • SPI0
  • I2C0
  • I2C1
  • I2C2
  • SPI1
  • SPI2
  • I2C Slave
  • SPI Slave
  • DMA
  • PWM0
  • PWM1
  • PCM
  • GPIO
  • UART0
  • UART1
  • SDHCI (eMMC)
  • Clock
  • ARM Timer
  • Random
  • Mailbox
  • Watchdog
  • Framebuffer
  • MIPI CSI-2 (Camera Serial Interface)
  • DSI (Display Serial Interface)

BCM2708 SPI0 Device

The BCM2708 has a single master mode SPI controller that supports 3 wire, 2 wire and LoSSI modes of operation. It also has 2 auxiliary SPI masters which do not support DMA mode (see SPI1/2 below).

The main SPI0 controller supports polled, interrupt and DMA modes and includes 3 chip selects although only CS0 and 1 are available on the 26 or 40 pin header.

By default SPI0 can appear on GPIO pins 7 to 11 (CS1, CS0, MISO, MOSI, SCLK) using alternate function 0 or on GPIO pins 35 to 39 (CS1, CS0, MISO, MOSI, SCLK) using alternate function 0, only pins 7 to 11 are available on the header.

BCM2708 I2C0/1/2 Device

The BCM2708 has 3 Broadcom Serial Controller (BSC) devices which are fast mode (400Kz) masters numbered BSC0, BSC1 and BSC2.

Device BSC2 is dedicated to the HDMI interface but can be accessed by the ARM processor for controlling some HDMI functionality. All BSC devices contain a 16 byte FIFO, support 7 bit and 10 bit addressing and have software configurable clock timing.

By default BSC0 can appear on GPIO pins 0 and 1 (Alternate function 0), 28 and 29 (Alternate function 0) or 44 and 45 (Alternate function 1). Unfortunately on all except the Revision 1 models none of these pins are available on the 26 or 40 pin header.

Note: On the Raspberry Pi A+/B+/Zero/2B/3B the ID EEPROM pins on the 40 pin header are actually connected to GPIO 0 and 1 (BSC0)

Device BSC1 can appear on GPIO pins 2 and 3 (Alternate function 0) or 44 and 45 (Alternate function 2) but only pins 2 and 3 are exposed on the 26 or 40 pin header.

BCM2708 SPI1/2 Device

The BCM2708 has 2 additional SPI universal masters available as part of the AUX device which support interrupt mode but not DMA and therefore only allow limited bandwidth transfers due to the CPU overhead required to sustain high data rates.

Both devices support 3 chip selects, by default SPI1 is available on GPIO pins 16 to 21 (CS2, CS1, CS0, MISO, MOSI, SCLK) using alternate function 4 and SPI2 is available on GPIO pins 40 to 45 (MISO, MOSI, SCLK, CS0, CS1, CS2) using alternate function 4. Only pins 16 to 21 are available on the header and only on the 40 pin header of the Raspberry Pi A+/B+/Zero/2B/3B.

BCM2708 SPI/I2C Slave Device

The slave device can be used as either an I2C or an SPI interface, the I2C slave supports 400KHz fast mode operation. Only 7 bit addressing is supported, DMA is not supported and neither is clock stretching.

Note: On the Raspberry Pi A+/B+/Zero/2B/3B the SPI slave device is apparently faulty and cannot be used.

The I2C Slave device can only appear on GPIO pins 18 (SDA) and 19 (SCL) (Alternate function 3).

BCM2708 DMA Device

The DMA controller has 16 channels in total although not all are available for software to use as some are already used by the GPU.

The firmware will pass the value dma.dmachans on the command line which will indicate which channels are available for our use.

Channels 0 to 6 are normal channels which support 2D stride and transfers up to 1GB per control block

Channels 7 to 14 are Lite channels which do not support stride and only allow transfers up to 64KB per control block

Channel 15 is not mentioned in most documentation and is shown as not available in the mask passed in dma.dmachans

Channel 0 and 15 are Bulk channels which have an additional FIFO for faster transfers (8 beat burst per read)

BCM2708 PWM0/1 Device

The BCM2708 has a single PWM controller with 2 independent output bit streams with multiple algorithms for generating the output pulse. The PWM controller supports either a single data register (independent per channel) or a 16 x 32 FIFO which also supports DMA mode transmission.

On the Raspberry Pi PWM0 and PWM1 are also connected via GPIO pins 40 and 45 (40 and 41 on the Raspberry Pi 3B) to the audio circuit and allow playback of digital audio signals via the 3 or 4 pole line jack (depending on model).

PWM0 is available on GPIO pins 12 (function 0), 18 (function 5), 40 (function 0) and 52 (function 1).

PWM1 is available on GPIO pins 13 (function 0), 19 (function 5), 41, 45 (function 0) and 53 (function 1).

On the Raspberry Pi A and B only pin 18 is exposed on the 26 pin header.

On the Raspberry Pi A+/B+/Zero/2B/3B pins 12, 13, 18 and 19 are exposed on the 40 pin header.

BCM2708 GPIO Device

The GPIO has 54 pins available each with multiple alternate functions. All pins can be configured as input or output and all can have pull up or down applied.

Not all pins are exposed on the 26 or 40 pin header of the Raspberry Pi, for details of which pins are available see:

Raspberry Pi A and B - https://www.raspberrypi.org/documentation/usage/gpio/README.md

Raspberry Pi A+/B+/2B/3B/Zero - https://www.raspberrypi.org/documentation/usage/gpio-plus-and-raspi2/README.md

Some of the 54 pins are used for peripheral communication (such as the SD card) and are not available for general use, take care when changing function selects on pins to avoid disabling certain system peripherals.

Event detection can be enabled for both high and low levels as well as rising and falling edges, there is also an asynchronous rising or falling edge detection which can detect edges of very short duration.

BCM2708 UART0 Device

The UART0 device is an ARM PL011 UART which supports programmable baud rates, start, stop and parity bits and hardware flow control and many others. The UART0 is similar to the industry standard 16C650 but with a number of differences, the PL011 has some optional features such as IrDA, Serial InfraRed and DMA which are not supported by the Broadcom implementation. In the standard configuration the UART0 TX and RX lines are connected to GPIO pins 14 and 15 respectively (Alternate function 0) but they can be remapped via GPIO function selects to a number of other locations. On the Raspberry Pi (all models) none of these alternate pin mappings are exposed via the 26 or 40 pin header and therefore cannot be used easily. This means that UART0 and UART1 cannot be used at the same time.

On the Raspberry Pi 3B the UART0 can be mapped to GPIO pins 32 and 33 (Alternate function 3) to communicate with the built in Bluetooth module.

BCM2708 UART1 Device

The UART1 device is a Broadcom implementation that is part of the AUX device which also includes the SPI1 and SPI2 devices. This device is termed a Mini UART and has a smaller feature set than the PL011 UART but still supports a fairly standard communication protocol with programmable baud rate and hardware flow control.

The Mini UART is similar to the standard 16550 device but is missing some of the features, the device also has no DMA support so high speed transfers will produce a higher CPU load. In the standard configuration the UART1 TX and RX lines are connected to GPIO pins 14 and 15 respectively (Alternate function 5) but they can be remapped via GPIO function selects to a number of other locations. On the Raspberry Pi (all models) none of these alternate pin mappings are exposed via the 26 or 40 pin header and therefore cannot be used easily. This means that UART0 and UART1 cannot be used at the same time.

On the Raspberry Pi 3B the UART1 can be mapped to GPIO pins 32 and 33 (Alternate function 5) to communicate with the built in Bluetooth module.

BCM2708 SDHCI Device

The SDHCI controller on the BCM2708 is an Arasan SD Host controller.

The Card Detect pin is connected to GPIO pin 47 (on the RPi Model A/B)(Not connected on the RPi Model A+/B+)

The Write Protect pin is not connected.

The device can be routed to GPIO pins 22 to 27 (ALT3) or 48 to 53 (ALT3), it can also be routed to GPIO pins 34 to 39 (ALT3) to provide an SDIO controller for the on board WiFi.

BCM2708 SDHOST Device

The SDHOST controller on the BCM2708 is a non SDHCI-compliant device which requires a specific driver.

It can be routed to GPIO pins 22 to 27 (ALT0) or 48 to 53 (ALT0) in order to control the SD card slot when the SDHCI device is being used for the on board WiFi.

Note: The actual driver is implemented in the BCMSDHOST unit.

BCM2708 Clock (System Timer) Device

The clock device in the BCM2708 is based on the System Timer which is a 64 bit free running counter that runs at 1MHz regardless of core or CPU clock speeds. The System Timer cannot be stopped and the counter cannot be set or reset.

The System Timer includes 4 compare registers which can each generate an interrupt when the compare value is matched, however 2 of the 4 are consumed by the GPU and on the Raspberry Pi A/B/A+/B+/Zero the other 2 are used for the scheduler and clock interrupts in Ultibo.

This device simply exposes the free running counter as a clock value and does not provide access to the timer compare functionality or to interrupt based events, for those see the timer devices below.

BCM2708 Clock (ARM Timer) Device

This device represents that free running counter from the ARM Timer device (below) as a clock device. The free running counter does not appear in the original SP804 timer. The counter is 32 bits wide and has its own divider that is 8 bits wide meaning that it can be set to clock rates of between 975KHz and 250MHz (or 1.5MHz to 400MHz on the Raspberry Pi 3B).

The counter does not generate an interrupt and cannot be set or reset but it can be stopped and started.

BCM2708 ARM Timer Device

The ARM Timer device in the BCM2708 is based on the ARM SP804 timer with some modifications and additions. In the Raspberry Pi it is connected to the core clock which by default is 250MHz but was increased to 400MHz on the Raspberry Pi 3B.

The divider is 10 bits wide which means that the ARM Timer can be set to clock rates of between 250KHz and 250MHz (or 400KHz to 400MHz on the Raspberry Pi 3B). Both the counter and the load/reload value are 32 bits wide by default giving a wide range of tick intervals.

The ARM Timer features a free running counter which is not enabled or used by this driver and a down counter which operates in wrapping mode so that each time it reaches 0 it triggers an interrupt and reloads the value from a load or reload register to begin counting again.

Constants



BCM2708 SPI0 BCM2708_SPI0_*
BCM2708_SPI0_DESCRIPTION = 'BCM2835 SPI0 Master';  
 
BCM2708_SPI0_MAX_SIZE = $FFFF;  
 
BCM2708_SPI0_MIN_CLOCK = 3814; Default minimum based on the default settings from the firmware (Recalculated during open)
BCM2708_SPI0_MAX_CLOCK = 125000000; Default maximum based on the default settings from the firmware (Recalculated during open)
 
BCM2708_SPI0_MIN_DIVIDER = 2; Divider is always rounded down to an even number and a value of 0 sets the divider to 65536
BCM2708_SPI0_MAX_DIVIDER = $FFFE; Divider is always rounded down to an even number
 
BCM2708_SPI0_CORE_CLOCK = 250000000; Default core clock based on the default settings from the firmware (Requested from firmware during start)
 
BCM2708_SPI0_MODE_IRQ = 0;  
BCM2708_SPI0_MODE_DMA = 1;  
BCM2708_SPI0_MODE_PIO = 2;  


BCM2708 BSCI2C (BSC0/1/2) BCM2708_BSCI2C_*
BCM2708_BSCI2C_MAX_SIZE = $FFFF;  
 
BCM2708_BSCI2C_MIN_CLOCK = 3814; Default minimum based on the default settings from the firmware (Recalculated during open)
BCM2708_BSCI2C_MAX_CLOCK = 125000000; Default maximum based on the default settings from the firmware (Recalculated during open)
BCM2708_BSCI2C_DEFAULT_CLOCK = 100000;  
 
BCM2708_BSCI2C_MIN_DIVIDER = 2; Divider is always rounded down to an even number and a value of 0 sets the divider to 32768
BCM2708_BSCI2C_MAX_DIVIDER = $FFFE; Divider is always rounded down to an even number
 
BCM2708_BSCI2C_CORE_CLOCK = 250000000; Default core clock based on the default settings from the firmware (Requested from firmware during start)
 
BCM2708_BSCI2C_MODE_WRITE = 0;  
BCM2708_BSCI2C_MODE_READ = 1;  


BCM2708 I2C0 (BSC0) BCM2708_I2C0_*
BCM2708_I2C0_DESCRIPTION = 'BCM2835 BSC0 Master I2C';  


BCM2708 I2C1 (BSC1) BCM2708_I2C1_*
BCM2708_I2C1_DESCRIPTION = 'BCM2835 BSC1 Master I2C';  


BCM2708 I2C2 (BSC2) BCM2708_I2C2_*
BCM2708_I2C2_DESCRIPTION = 'BCM2835 BSC2 Master I2C';  


BCM2708 SPI1 BCM2708_SPI1_*
BCM2708_SPI1_DESCRIPTION = 'BCM2835 AUX SPI1 Master';  


BCM2708 SPI2 BCM2708_SPI2_*
BCM2708_SPI2_DESCRIPTION = 'BCM2835 AUX SPI2 Master';  


BCM2708 I2C slave BCM2708_I2CSLAVE_*
BCM2708_I2CSLAVE_DESCRIPTION = 'BCM2835 I2C Slave';  
 
BCM2708_I2CSLAVE_TIMEOUT = 10; Timeout (Milliseconds) for RX/TX wait data
BCM2708_I2CSLAVE_BUFFER_SIZE = 1024; Size in bytes of the RX/TX data buffer
BCM2708_I2CSLAVE_RX_POLL_LIMIT = 256; Number of times interrupt handler may poll the read FIFO


BCM2708 SPI slave BCM2708_SPISLAVE_*
BCM2708_SPISLAVE_DESCRIPTION = 'BCM2835 SPI Slave';  


BCM2708 DMA BCM2708_DMA_*
BCM2708_DMA_DESCRIPTION = 'BCM2835 DMA';  
 
BCM2708_DMA_CHANNEL_COUNT = 16; Total number of DMA channels (Not all are usable)
 
BCM2708_DMA_LITE_CHANNELS = $7F80; Mask of DMA Lite channels (7 to 14)
BCM2708_DMA_NORMAL_CHANNELS = $007E; {807F} Mask of normal channels (1 to 6)
BCM2708_DMA_BULK_CHANNELS = $8001; Mask of DMA Bulk channels (0 and 15)
 
BCM2708_DMA_SHARED_CHANNELS = $7800; Mask of channels with shared interrupt (11 to 14)
 
BCM2708_DMA_MAX_LITE_TRANSFER = 65536; Maximum transfer length for a DMA Lite channel
BCM2708_DMA_MAX_NORMAL_TRANSFER = 1073741824; Maximum transfer length for a normal channel
 
BCM2708_DMA_MAX_STRIDE = $FFFF; Maximum stride value (Increment between rows) (Note this is a signed value (Min -32768/Max 32767)
BCM2708_DMA_MAX_Y_COUNT = $3FFF; Maximum number of X length transfers in 2D stride
BCM2708_DMA_MAX_X_LENGTH = $FFFF; Maximum X transfer length in 2D stride
 
BCM2708_DMA_CB_ALIGNMENT = 32; Alignment required for DMA control blocks
 
BCM2708_DMA_LITE_BURST_LENGTH = 2; Burst length for DMA Lite channels
BCM2708_DMA_NORMAL_BURST_LENGTH = 4; Burst length for normal channels
BCM2708_DMA_BULK_BURST_LENGTH = 16; Burst length for DMA Bulk channels


BCM2708 PWM BCM2708_PWM_*
BCM2708_PWM_MIN_PERIOD = 108; Default based on 19.2MHz PWM clock (Oscillator source)
BCM2708_PWM_DEFAULT_CLOCK = 19200000; Default to the 19.2MHz oscillator clock


BCM2708 PWM0 BCM2708_PWM0_*
BCM2708_PWM0_DESCRIPTION = 'BCM2835 PWM0';  


BCM2708 PWM1 BCM2708_PWM1_*
BCM2708_PWM1_DESCRIPTION = 'BCM2835 PWM1';  


BCM2708 GPIO BCM2708_GPIO_*
BCM2708_GPIO_DESCRIPTION = 'BCM2835 GPIO';  
 
BCM2708_GPIO_MIN_PIN = GPIO_PIN_0;  
BCM2708_GPIO_MAX_PIN = GPIO_PIN_53;  
 
BCM2708_GPIO_MAX_LEVEL = GPIO_LEVEL_HIGH;  
 
BCM2708_GPIO_MAX_PULL = GPIO_PULL_DOWN;  
 
BCM2708_GPIO_MIN_FUNCTION = GPIO_FUNCTION_IN;  
BCM2708_GPIO_MAX_FUNCTION = GPIO_FUNCTION_ALT5;  
 
BCM2708_GPIO_MIN_TRIGGER = GPIO_TRIGGER_LOW;  
BCM2708_GPIO_MAX_TRIGGER = GPIO_TRIGGER_ASYNC_FALLING;  
 
GPIO pull up/down to BCM2835 pull up/down
BCM2708_GPIO_PULL_MAP:array[GPIO_PULL_NONE..GPIO_PULL_DOWN] of LongWord = (
BCM2835_GPPUD_NONE,  
BCM2835_GPPUD_UP,  
BCM2835_GPPUD_DOWN);  
 
GPIO functions to BCM2835 functions
BCM2708_GPIO_FUNCTION_MAP:array[BCM2708_GPIO_MIN_FUNCTION..BCM2708_GPIO_MAX_FUNCTION] of LongWord = (
BCM2835_GPFSEL_IN,  
BCM2835_GPFSEL_OUT,  
BCM2835_GPFSEL_ALT0,  
BCM2835_GPFSEL_ALT1,  
BCM2835_GPFSEL_ALT2,  
BCM2835_GPFSEL_ALT3,  
BCM2835_GPFSEL_ALT4,  
BCM2835_GPFSEL_ALT5);  
 
BCM2835 functions to GPIO functions
BCM2708_GPIO_FUNCTION_UNMAP:array[BCM2708_GPIO_MIN_FUNCTION..BCM2708_GPIO_MAX_FUNCTION] of LongWord = (
GPIO_FUNCTION_IN,  
GPIO_FUNCTION_OUT,  
GPIO_FUNCTION_ALT5,  
GPIO_FUNCTION_ALT4,  
GPIO_FUNCTION_ALT0,  
GPIO_FUNCTION_ALT1,  
GPIO_FUNCTION_ALT2,  
GPIO_FUNCTION_ALT3);  
 
GPIO triggers to BCM2835 event registers
BCM2708_GPIO_TRIGGER_MAP:array[BCM2708_GPIO_MIN_TRIGGER..BCM2708_GPIO_MAX_TRIGGER] of LongWord = (
GPIO_FUNCTION_IN,  
BCM2835_GPLEN0,  
BCM2835_GPHEN0,  
BCM2835_GPREN0,  
BCM2835_GPFEN0,  
BCM2835_GPAREN0,  
BCM2835_GPAFEN0);  


BCM2708 UART0 (PL011) BCM2708_UART0_*
BCM2708_UART0_DESCRIPTION = 'BCM2835 PL011 UART';  
 
BCM2708_UART0_MIN_BAUD = 300; Default minimum of 300 baud
BCM2708_UART0_MAX_BAUD = 187500; Default maximum based on the default settings from the firmware (Recalculated during open)
 
BCM2708_UART0_MIN_DATABITS = SERIAL_DATA_5BIT;  
BCM2708_UART0_MAX_DATABITS = SERIAL_DATA_8BIT;  
 
BCM2708_UART0_MIN_STOPBITS = SERIAL_STOP_1BIT;  
BCM2708_UART0_MAX_STOPBITS = SERIAL_STOP_2BIT;  
 
BCM2708_UART0_MAX_PARITY = SERIAL_PARITY_EVEN;  
 
BCM2708_UART0_MAX_FLOW = SERIAL_FLOW_RTS_CTS;  
 
BCM2708_UART0_CLOCK_RATE = 3000000; Default clock rate based on the default settings from the firmware (Requested from firmware during open)
 
BCM2708_UART0_RX_POLL_LIMIT = 256; Number of times interrupt handler may poll the read FIFO
BCM2708_UART0_RX_BUFFER_SIZE = 1024;  


BCM2708 UART1 (AUX) BCM2708_UART1_*
BCM2708_UART1_DESCRIPTION = 'BCM2835 AUX (Mini) UART';  


BCM2708 SDHCI BCM2708_EMMC_*
BCM2708_EMMC_DESCRIPTION = 'BCM2835 Arasan SD Host';  
 
BCM2708_EMMC_MIN_FREQ = 400000; Default minimum of 400KHz
BCM2708_EMMC_MAX_FREQ = 200000000; Default clock rate based on the default settings from the firmware (Requested from firmware during start)


BCM2708 SDHOST BCM2708_SDHOST_*
BCM2708_SDHOST_DESCRIPTION = 'BCM2835 SDHOST';  
 
BCM2708_SDHOST_MIN_FREQ = 400000; Default minimum of 400KHz
BCM2708_SDHOST_MAX_FREQ = 250000000; Default clock rate based on the default settings from the firmware (Requested from firmware during start)
See: BCMSDHOST for the driver implementation


BCM2708 clock (system timer) BCM2708_SYS_CLOCK_*
BCM2708_SYS_CLOCK_DESCRIPTION = 'BCM2835 System Timer Clock';  


BCM2708 clock (ARM timer) BCM2708_ARM_CLOCK_*
BCM2708_ARM_CLOCK_DESCRIPTION = 'BCM2835 ARM Timer Clock';  
 
BCM2708_ARM_CLOCK_MIN_RATE = 976562; Default minimum (Divider 255) based on the default settings from the firmware (Recalculated during start)
BCM2708_ARM_CLOCK_MAX_RATE = 250000000; Default maximum (Divider 0) based on the default settings from the firmware (Recalculated during start)
BCM2708_ARM_CLOCK_DEFAULT_RATE = 3968253; Default rate (Divider 62) based on the default settings from the firmware (Recalculated during start)
 
BCM2708_ARM_CLOCK_MIN_DIVIDER = 0;  
BCM2708_ARM_CLOCK_MAX_DIVIDER = 255;  
BCM2708_ARM_CLOCK_DEFAULT_DIVIDER = 62;  
 
BCM2708_ARM_CLOCK_CORE_CLOCK = 250000000; Default core clock based on the default settings from the firmware (Requested from firmware during start)


BCM2708 ARM timer BCM2708_ARM_TIMER_*
BCM2708_ARM_TIMER_DESCRIPTION = 'BCM2835 ARM Timer';  
 
BCM2708_ARM_TIMER_MIN_RATE = 244140; Default minimum (Divider 1023) based on the default settings from the firmware (Recalculated during start)
BCM2708_ARM_TIMER_MAX_RATE = 250000000; Default maximum (Divider 0) based on the default settings from the firmware (Recalculated during start)
BCM2708_ARM_TIMER_DEFAULT_RATE = 1000000; Default rate (Divider 249) based on the default settings from the firmware (Recalculated during start)
 
BCM2708_ARM_TIMER_MIN_INTERVAL = 1;  
BCM2708_ARM_TIMER_MAX_INTERVAL = $FFFFFFFF;  
 
BCM2708_ARM_TIMER_MIN_DIVIDER = 0;  
BCM2708_ARM_TIMER_MAX_DIVIDER = 1023;  
BCM2708_ARM_TIMER_DEFAULT_DIVIDER = 249;  
 
BCM2708_ARM_TIMER_CORE_CLOCK = 250000000; Default core clock based on the default settings from the firmware (Requested from firmware during start)


BCM2708 random BCM2708_RANDOM_*
BCM2708_RANDOM_DESCRIPTION = 'BCM2835 Random Number Generator';  
 
BCM2708_RANDOM_WARMUP_COUNT = $00040000; The initial numbers generated are "less random" so will be discarded


BCM2708 mailbox BCM2708_MAILBOX_*
BCM2708_MAILBOX_DESCRIPTION = 'BCM2835 Mailbox';  


BCM2708 watchdog BCM2708_WATCHDOG_*
BCM2708_WATCHDOG_DESCRIPTION = 'BCM2835 Watchdog Timer';  


BCM2708 framebuffer BCM2708_FRAMEBUFFER_*
BCM2708_FRAMEBUFFER_DESCRIPTION = 'BCM2835 Framebuffer';  


Type definitions



BCM2708 SPI0

PBCM2708SPI0Device = ^TBCM2708SPI0Device;

TBCM2708SPI0Device = record

SPI Properties
SPI:TSPIDevice;  
BCM2708 Properties
Address:Pointer; Device register base address
CoreClock:LongWord; Core clock rate
Transfer Properties
Mode:LongWord; Mode of current transfer (BCM2708_SPI0_MODE_IRQ/BCM2708_SPI0_MODE_DMA / BCM2708_SPI0_MODE_PIO)
Source:Pointer; Pointer to the source for current transfer (nil if reading only)
Dest:Pointer; Pointer to the destination for current transfer (nil if writing only)
Count:LongWord; Count of bytes for current transfer
SourceRemain:LongWord; Source bytes remaining for current transfer
DestRemain:LongWord; Destination bytes remaining for current transfer
Statistics Properties
InterruptCount:LongWord; Number of interrupt requests received by the device

BCM2708 BSCI2C (I2C0/1/2) device

PBCM2708BSCI2CDevice = ^TBCM2708BSCI2CDevice;

TBCM2708BSCI2CDevice = record

I2C Properties
I2C:TI2CDevice;  
BCM2708 Properties
Address:Pointer; Device register base address
CoreClock:LongWord; Core clock rate
SDAPin:LongWord; GPIO pin for the SDA line
SCLPin:LongWord; GPIO pin for the SCL line
SDAFunction:LongWord; GPIO function for the SDA line
SCLFunction:LongWord; GPIO function for the SCL line
Transfer Properties
Index:LongWord; Index of this device in the IRQData array (Set during device initialization)
Mode:LongWord; Mode of current transfer (BCM2708_BSCI2C_MODE_WRITE/BCM2708_BSCI2C_MODE_READ)
Data:Pointer; Pointer to the data for current transfer
Count:LongWord; Count of bytes for current transfer
Remain:LongWord; Bytes remaining for current transfer
Error:LongBool; True if an error occurred during the transfer
Statistics Properties
InterruptCount:LongWord; Number of interrupt requests received by the device

BCM2708 BSCI2C (I2C0/1) IRQ data

PBCM2708BSCI2CIRQData = ^TBCM2708BSCI2CIRQData;

TBCM2708BSCI2CIRQData = record

Note: BSC I2C devices share a single interrupt
Count:LongWord;  
Lock:TSpinHandle;  
Devices:array[0..2] of PBCM2708BSCI2CDevice;  

BCM2708 SPI AUX (SPI1/2)

PBCM2708SPIAUXDevice = ^TBCM2708SPIAUXDevice;

TBCM2708SPIAUXDevice = record

SPI Properties
SPI:TSPIDevice;  
BCM2708 Properties
Address:Pointer; Device register base address
CoreClock:LongWord; Core clock rate

BCM2708 I2C slave buffer

PBCM2708I2CSlaveBuffer = ^TBCM2708I2CSlaveBuffer;

TBCM2708I2CSlaveBuffer = record

Wait:TSemaphoreHandle; Data ready semaphore
Start:LongWord; Index of first available buffer entry
Count:LongWord; Number of available entries in the buffer
Buffer:array[0..(BCM2708_I2CSLAVE_BUFFER_SIZE - 1)] of Byte;  

BCM2708 I2C slave

PBCM2708I2CSlave = ^TBCM2708I2CSlave;

TBCM2708I2CSlave = record

I2C Properties
I2C:TI2CDevice;  
BCM2708 Properties
IRQ:LongWord; IRQ of this device
Address:Pointer; Device register base address
Lock:TSpinHandle; Device lock (Differs from lock in I2C device) (Spin lock due to use by interrupt handler)
SDAPin:LongWord; GPIO pin for the SDA line
SCLPin:LongWord; GPIO pin for the SCL line
SDAFunction:LongWord; GPIO function for the SDA line
SCLFunction:LongWord; GPIO function for the SCL line
Transfer Properties
Receive:TBCM2708I2CSlaveBuffer; Receive Data Buffer
Transmit:TBCM2708I2CSlaveBuffer; Transmit Data Buffer
Statistics Properties
InterruptCount:LongWord; Number of interrupt requests received by the device

BCM2708 DMA channel

PBCM2708DMAChannel = ^TBCM2708DMAChannel;

TBCM2708DMAChannel = record

Host:PBCM2708DMAHost; DMA host this channel belongs to
Request:PDMARequest; Current DMA request pending on this channel (or nil of no request is pending)
Number:LongWord; The channel number of this channel
Interrupt:LongWord; The interrupt number of this channel
Registers:PBCM2835DMARegisters; The channel registers for configuration

BCM2708 DMA

PBCM2708DMAHost = ^TBCM2708DMAHost;

TBCM2708DMAHost = record

DMA Properties
DMA:TDMAHost;  
BCM2708 Properties
ChannelMask:LongWord; Mask of available channels (Passed from GPU firmware)
ChannelFree:LongWord; Bitmap of current free channels
ChannelLock:TMutexHandle; Lock for access to ChannelFree
ChannelWait:TSemaphoreHandle; Number of free normal channels in ChannelFree
ChannelLite:TSemaphoreHandle; Number of free DMA Lite channels in ChannelFree
ChannelBulk:TSemaphoreHandle; Number of free DMA Bulk channels in ChannelFree
Channels:array[0..BCM2708_DMA_CHANNEL_COUNT - 1] of TBCM2708DMAChannel; Channel information for each DMA channel on the host
EnableRegister:PLongWord;  
InterruptRegister:PLongWord;  
Statistics Properties
InterruptCount:LongWord; Number of interrupt requests received by the host controller

BCM2708 PWM device

PBCM2708PWMDevice = ^TBCM2708PWMDevice;

TBCM2708PWMDevice = record

PWM Properties
PWM:TPWMDevice;  
BCM2708 Properties
Address:Pointer; Device register base address
Channel:LongWord; Channel for this device
Scaler:LongWord; Scaler for Duty cycle and Period
Pair:PBCM2708PWMDevice; The paired PWM device for the other channel
Audio Properties
Audio:PBCM2708PWMAudio; The associated PWM Audio device

BCM2708 PWM audio

PBCM2708PWMAudio = ^TBCM2708PWMAudio;

TBCM2708PWMAudio = record

Audio Properties
Audio:TAudioDevice;  
PWM Properties
PWM0:PBCM2708PWMDevice; The PWM device for channel 0
PWM1:PBCM2708PWMDevice; The PWM device for channel 1

BCM2708 GPIO

PBCM2708GPIOBank = ^TBCM2708GPIOBank;

TBCM2708GPIOBank = record

GPIO:PGPIODevice;  
Bank:LongWord;  
Address:PtrUInt;  
PinStart:LongWord;  

BCM2708 GPIO device

PBCM2708GPIODevice = ^TBCM2708GPIODevice;

TBCM2708GPIODevice = record

GPIO Properties
GPIO:TGPIODevice;  
BCM2708 Properties
Lock:TSpinHandle; Device lock (Differs from lock in Device portion) (Spin lock due to use by interrupt handler)
Banks:array[0..BCM2835_GPIO_BANK_COUNT - 1] of TBCM2708GPIOBank;  
Statistics Properties
InterruptCount:LongWord; Number of interrupt requests received by the device

BCM2708 UART0

PBCM2708UART0Device = ^TBCM2708UART0Device;

TBCM2708UART0Device = record

UART Properties
UART:TUARTDevice;  
BCM2708 Properties
Address:Pointer; Device register base address
ClockRate:LongWord; Device clock rate
 
Start:LongWord; Index of first available buffer entry
Count:LongWord; Number of available entries in the buffer
Buffer:array[0..(BCM2708_UART0_RX_BUFFER_SIZE - 1)] of Word; Buffer for received data (Includes data and status)
Statistics Properties
InterruptCount:LongWord; Number of interrupt requests received by the device

BCM2708 SDHCI

PBCM2708SDHCIHost = ^TBCM2708SDHCIHost;

TBCM2708SDHCIHost = record

SDHCI Properties
SDHCI:TSDHCIHost;  
BCM2708 Properties
FIQ:LongBool;  
SDIO:LongBool;  
WriteDelay:LongWord;  
DelayClock:LongWord;  
ShadowRegister:LongWord;  

BCM2708 system clock

PBCM2708SystemClock = ^TBCM2708SystemClock;

TBCM2708SystemClock = record

Clock Properties
Clock:TClockDevice;  

BCM2708 ARM clock

PBCM2708ARMClock = ^TBCM2708ARMClock;

TBCM2708ARMClock = record

Clock Properties
Clock:TClockDevice;  
BCM2708 Properties
CoreClock:LongWord; Core clock rate

BCM2708 ARM timer

PBCM2708ARMTimer = ^TBCM2708ARMTimer;

TBCM2708ARMTimer = record

Timer Properties
Timer:TTimerDevice;  
BCM2708 Properties
CoreClock:LongWord; Core clock rate
Statistics Properties
InterruptCount:LongWord; Number of interrupt requests received by the device

BCM2708 random

PBCM2708Random = ^TBCM2708Random;

TBCM2708Random = record

Random Properties
Random:TRandomDevice;  

BCM2708 mailbox

PBCM2708Mailbox = ^TBCM2708Mailbox;

TBCM2708Mailbox = record

Mailbox Properties
Mailbox:TMailboxDevice;  

BCM2708 watchdog

PBCM2708Watchdog = ^TBCM2708Watchdog;

TBCM2708Watchdog = record

Watchdog Properties
Watchdog:TWatchdogDevice;  

BCM2708 framebuffer

PBCM2708Framebuffer = ^TBCM2708Framebuffer;

TBCM2708Framebuffer = record

Framebuffer Properties
Framebuffer:TFramebufferDevice;  
BCM2708 Properties
MultiDisplay:LongBool;  
DisplayNum:LongWord;  
DisplaySettings:TDisplaySettings;  


Public variables


None defined

Function declarations



Initialization functions

procedure BCM2708Init;
Description: To be documented
Note None documented


BCM2708 SPI0 functions

function BCM2708SPI0Start(SPI:PSPIDevice; Mode,ClockRate,ClockPhase,ClockPolarity:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708SPI0Stop(SPI:PSPIDevice):LongWord;
Description: To be documented
Note None documented


function BCM2708SPI0WriteRead(SPI:PSPIDevice; ChipSelect:Word; Source,Dest:Pointer; Size,Flags: LongWord; var Count:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708SPI0SetMode(SPI:PSPIDevice; Mode:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708SPI0SetClockRate(SPI:PSPIDevice; ChipSelect:Word; ClockRate:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708SPI0SetClockPhase(SPI:PSPIDevice; ClockPhase:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708SPI0SetClockPolarity(SPI:PSPIDevice; ClockPolarity:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708SPI0SetSelectPolarity(SPI:PSPIDevice; ChipSelect:Word; SelectPolarity:LongWord):LongWord;
Description: To be documented
Note None documented


procedure BCM2708SPI0ReadFIFO(SPI:PBCM2708SPI0Device);
Description: Caller will hold the SPI device lock
Note Called from within the interrupt handler


procedure BCM2708SPI0WriteFIFO(SPI:PBCM2708SPI0Device);
Description: Caller will hold the SPI device lock
Note Called from within the interrupt handler


procedure BCM2708SPI0InterruptHandler(SPI:PBCM2708SPI0Device);
Description: To be documented
Note None documented


procedure BCM2708SPI0DMARequestCompleted(Request:PDMARequest);
Description: DMA Request completion callback for SPI0
Note None documented


BCM2708 BSCI2C (I2C0/1/2) functions

function BCM2708BSCI2CStart(I2C:PI2CDevice; Rate:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708BSCI2CStop(I2C:PI2CDevice):LongWord;
Description: To be documented
Note None documented


function BCM2708BSCI2CRead(I2C:PI2CDevice; Address:Word; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708BSCI2CWrite(I2C:PI2CDevice; Address:Word; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708BSCI2CWriteRead(I2C:PI2CDevice; Address:Word; Initial:Pointer; Len:LongWord; Data:Pointer; Size:LongWord; var Count:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708BSCI2CWriteWrite(I2C:PI2CDevice; Address:Word; Initial:Pointer; Len:LongWord; Data:Pointer; Size:LongWord; var Count:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708BSCI2CSetRate(I2C:PI2CDevice; Rate:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708BSCI2CSetAddress(I2C:PI2CDevice; Address:Word):LongWord;
Description: To be documented
Note None documented


procedure BCM2708BSCI2CFillFIFO(I2C:PBCM2708BSCI2CDevice);
Description: Caller will hold the I2C device lock
Note Called from within the interrupt handler


procedure BCM2708BSCI2CDrainFIFO(I2C:PBCM2708BSCI2CDevice);
Description: Caller will hold the I2C device lock
Note Called from within the interrupt handler


procedure BCM2708BSCI2CInterruptHandler(IRQData:PBCM2708BSCI2CIRQData);
Description: To be documented
Note Thread submitting the current request will hold the I2C device lock


BCM2708 SPI/I2C slave functions

function BCM2708I2CSlaveStart(I2C:PI2CDevice; Rate:LongWord):LongWord;
Description: Implementation of I2CSlaveStart API for BCM2708 I2C slave
Note Not intended to be called directly by applications, use I2CSlaveStart instead.

Rate is not applicable for I2C slave devices


function BCM2708I2CSlaveStop(I2C:PI2CDevice):LongWord;
Description: Implementation of I2CSlaveStop API for BCM2708 I2C slave
Note Not intended to be called directly by applications, use I2CSlaveStop instead.


function BCM2708I2CSlaveRead(I2C:PI2CDevice; Address:Word; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;
Description: Implementation of I2CSlaveRead API for BCM2708 I2C slave
Note Not intended to be called directly by applications, use I2CSlaveRead instead.

Address is not applicable for I2C slave devices


function BCM2708I2CSlaveWrite(I2C:PI2CDevice; Address:Word; Buffer:Pointer; Size:LongWord; var Count:LongWord):LongWord;
Description: Implementation of I2CSlaveWrite API for BCM2708 I2C slave
Note Not intended to be called directly by applications, use I2CSlaveWrite instead.

Address is not applicable for I2C slave devices


function BCM2708I2CSlaveSetAddress(I2C:PI2CDevice; Address:Word):LongWord;
Description: Implementation of I2CSlaveSetAddress API for BCM2708 I2C slave
Note Not intended to be called directly by applications, use I2CSlaveSetAddress instead.


BCM2708 DMA functions

function BCM2708DMAHostStart(DMA:PDMAHost):LongWord;
Description: To be documented
Note None documented


function BCM2708DMAHostStop(DMA:PDMAHost):LongWord;
Description: To be documented
Note None documented


function BCM2708DMAHostSubmit(DMA:PDMAHost; Request:PDMARequest):LongWord;
Description: To be documented
Note None documented


function BCM2708DMAHostCancel(DMA:PDMAHost; Request:PDMARequest):LongWord;
Description: To be documented
Note None documented


procedure BCM2708DMAInterruptHandler(Channel:PBCM2708DMAChannel);
Description: DMA Channels 0 to 10 each have a dedicated interrupt, this handler simply clears the interrupt and sends a completion on the associated channel
Note None documented


procedure BCM2708DMASharedInterruptHandler(DMA:PBCM2708DMAHost);
Description: DMA Channels 11 to 14 share a common interrupt, this alternate handler determines which ones triggered the current interrupt and sends a completion on that channel
Note None documented


procedure BCM2708DMARequestComplete(Channel:PBCM2708DMAChannel);
Description: To be documented
Note None documented


function BCM2708DMAPeripheralToDREQ(Peripheral:LongWord):LongWord;
Description: To be documented
Note None documented


procedure BCM2708DMADataToControlBlock(Request:PDMARequest; Data:PDMAData; Block:PBCM2835DMAControlBlock; Bulk,Lite:Boolean);
Description: To be documented
Note None documented


BCM2708 PWM0/1 functions

function BCM2708PWMStart(PWM:PPWMDevice):LongWord;
Description: To be documented
Note None documented


function BCM2708PWMStop(PWM:PPWMDevice):LongWord;
Description: To be documented
Note None documented


function BCM2708PWMWrite(PWM:PPWMDevice; Value:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708PWMSetGPIO(PWM:PPWMDevice; GPIO:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708PWMResetGPIO(PWM:PPWMDevice; GPIO:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708PWMSetMode(PWM:PPWMDevice; Mode:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708PWMSetRange(PWM:PPWMDevice; Range:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708PWMSetFrequency(PWM:PPWMDevice; Frequency:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708PWMSetPolarity(PWM:PPWMDevice; Polarity:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708PWMConfigure(PWM:PPWMDevice; DutyNS,PeriodNS:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708PWMClockStart(PWM:PPWMDevice; Frequency:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708PWMClockStop(PWM:PPWMDevice):LongWord;
Description: To be documented
Note None documented


function BCM2708PWMClockEnabled(PWM:PPWMDevice):Boolean;
Description: To be documented
Note None documented


BCM2708 GPIO functions

function BCM2708GPIOStart(GPIO:PGPIODevice):LongWord;
Description: To be documented
Note None documented


function BCM2708GPIOStop(GPIO:PGPIODevice):LongWord;
Description: To be documented
Note None documented


function BCM2708GPIORead(GPIO:PGPIODevice;Reg:LongWord):LongWord;
Description: To be documented
Note None documented


procedure BCM2708GPIOWrite(GPIO:PGPIODevice; Reg,Value:LongWord);
Description: To be documented
Note None documented


function BCM2708GPIOInputGet(GPIO:PGPIODevice; Pin:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708GPIOInputWait(GPIO:PGPIODevice; Pin,Trigger,Timeout:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708GPIOInputEvent(GPIO:PGPIODevice; Pin,Trigger,Flags,Timeout:LongWord; Callback:TGPIOCallback; Data:Pointer):LongWord;
Description: To be documented
Note None documented


function BCM2708GPIOInputCancel(GPIO:PGPIODevice; Pin:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708GPIOOutputSet(GPIO:PGPIODevice; Pin,Level:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708GPIOPullSelect(GPIO:PGPIODevice; Pin,Mode:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708GPIOFunctionGet(GPIO:PGPIODevice; Pin:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2708GPIOFunctionSelect(GPIO:PGPIODevice; Pin,Mode:LongWord):LongWord;
Description: To be documented
Note None documented


procedure BCM2708GPIOInterruptHandler(Bank:PBCM2708GPIOBank);
Description: To be documented
Note None documented


procedure BCM2708GPIOEventTrigger(Pin:PGPIOPin);
Description: To be documented
Note None documented


procedure BCM2708GPIOEventTimeout(Event:PGPIOEvent);
Description: To be documented
Note None documented


BCM2708 UART0 functions

function BCM2708UART0Open(UART:PUARTDevice; BaudRate,DataBits,StopBits,Parity,FlowControl:LongWord):LongWord;
Description: Implementation of UARTDeviceOpen API for BCM2708 UART0
Note Not intended to be called directly by applications, use UARTDeviceOpen instead.


function BCM2708UART0Close(UART:PUARTDevice):LongWord;
Description: Implementation of UARTDeviceClose API for BCM2708 UART0
Note Not intended to be called directly by applications, use UARTDeviceClose instead.


function BCM2708UART0Read(UART:PUARTDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;
Description: Implementation of UARTDeviceRead API for BCM2708 UART0
Note Not intended to be called directly by applications, use UARTDeviceRead instead.


function BCM2708UART0PushRX(UART:PUARTDevice):LongWord;
Description: To be documented
Note None documented


function BCM2708UART0Write(UART:PUARTDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;
Description: Implementation of UARTDeviceWrite API for BCM2708 UART0
Note Not intended to be called directly by applications, use UARTDeviceWrite instead.


function BCM2708UART0GetStatus(UART:PUARTDevice):LongWord;
Description: Implementation of UARTDeviceGetStatus API for BCM2708 UART0
Note Not intended to be called directly by applications, use UARTDeviceGetStatus instead.


function BCM2708UART0SetStatus(UART:PUARTDevice; Status:LongWord):LongWord;
Description: Implementation of UARTDeviceSetStatus API for BCM2708 UART0
Note Not intended to be called directly by applications, use UARTDeviceSetStatus instead.


procedure BCM2708UART0InterruptHandler(UART:PUARTDevice);
Description: Interrupt handler for the BCM2708 UART0 device
Note Not intended to be called directly by applications


procedure BCM2708UART0Receive(UART:PUARTDevice);
Description: Receive handler for the BCM2708 UART0 device
Note Not intended to be called directly by applications


procedure BCM2708UART0Transmit(UART:PUARTDevice);
Description: Transmit handler for the BCM2708 UART0 device
Note Not intended to be called directly by applications


procedure BCM2708UART0EnableInterrupt(UART:PBCM2708UART0Device; Interrupt:LongWord);
Description: Enable the specified interrupt in the interrupt mask register of a BCM2708 UART0 device
UART The BCM2708 UART0 device to enable the interrupt for
Interrupt The interrupt to enable
Note Caller must hold the UART lock


procedure BCM2708UART0DisableInterrupt(UART:PBCM2708UART0Device; Interrupt:LongWord);
Description: Disable the specified interrupt in the interrupt mask register of a BCM2708 UART0 device
UART The BCM2708 UART0 device to disable the interrupt for
Interrupt The interrupt to disable
Note Caller must hold the UART lock


BCM2708 SDHCI functions

function BCM2708SDHCIHostStart(SDHCI:PSDHCIHost):LongWord;
Description: Implementation of SDHCIHostStart API for BCM2708 SDHCI
Note Not intended to be called directly by applications, use SDHCIHostStart instead.


function BCM2708SDHCIHostStop(SDHCI:PSDHCIHost):LongWord;
Description: Implementation of SDHCIHostStop API for BCM2708 SDHCI
Note Not intended to be called directly by applications, use SDHCIHostStop instead.


function BCM2708SDHCIHostLock(SDHCI:PSDHCIHost):LongWord;
Description: Implementation of SDHCIHostLock API for BCM2708 SDHCI
Note Not intended to be called directly by applications, use SDHCIHostLock instead.


function BCM2708SDHCIHostUnlock(SDHCI:PSDHCIHost):LongWord;
Description: Implementation of SDHCIHostUnlock API for BCM2708 SDHCI
Note Not intended to be called directly by applications, use SDHCIHostUnlock instead.


function BCM2708SDHCIHostSignal(SDHCI:PSDHCIHost; Semaphore:TSemaphoreHandle):LongWord;
Description: Implementation of SDHCIHostSignal API for BCM2708 SDHCI
Note Not intended to be called directly by applications, use SDHCIHostSignal instead.


function BCM2708SDHCIHostReadByte(SDHCI:PSDHCIHost; Reg:LongWord):Byte;
Description: Implementation of SDHCIHostReadByte API for BCM2708 SDHCI
Note Not intended to be called directly by applications, use SDHCIHostReadByte instead.
Note The Broadcom document BCM2835-ARM-Peripherals page 66 states the following: Contrary to Arasans documentation the EMMC module registers can only be accessed as 32 bit registers, i.e. the two LSBs of the address are always zero. For this reason this code must simulate Byte and Word reads using LongWord reads.


function BCM2708SDHCIHostReadWord(SDHCI:PSDHCIHost; Reg:LongWord):Word;
Description: Implementation of SDHCIHostReadWord API for BCM2708 SDHCI
Note Not intended to be called directly by applications, use SDHCIHostReadWord instead.
Note The Broadcom document BCM2835-ARM-Peripherals page 66 states the following: Contrary to Arasans documentation the EMMC module registers can only be accessed as 32 bit registers, i.e. the two LSBs of the address are always zero. For this reason this code must simulate Byte and Word reads using LongWord reads.


function BCM2708SDHCIHostReadLong(SDHCI:PSDHCIHost; Reg:LongWord):LongWord;
Description: Implementation of SDHCIHostReadLong API for BCM2708 SDHCI
Note Not intended to be called directly by applications, use SDHCIHostReadLong instead.


procedure BCM2708SDHCIHostWriteByte(SDHCI:PSDHCIHost; Reg:LongWord; Value:Byte);
Description: Implementation of SDHCIHostWriteByte API for BCM2708 SDHCI
Note Not intended to be called directly by applications, use SDHCIHostWriteByte instead.
Note The Broadcom document BCM2835-ARM-Peripherals page 66 states the following: Contrary to Arasans documentation the EMMC module registers can only be accessed as 32 bit registers, i.e. the two LSBs of the address are always zero. For this reason this code must simulate Byte and Word writes using LongWord writes.


procedure BCM2708SDHCIHostWriteWord(SDHCI:PSDHCIHost; Reg:LongWord; Value:Word);
Description: Implementation of SDHCIHostWriteWord API for BCM2708 SDHCI
Note Not intended to be called directly by applications, use SDHCIHostWriteWord instead.
Note The Broadcom document BCM2835-ARM-Peripherals page 66 states the following: Contrary to Arasans documentation the EMMC module registers can only be accessed as 32 bit registers, i.e. the two LSBs of the address are always zero. For this reason this code must simulate Byte and Word writes using LongWord writes.


procedure BCM2708SDHCIHostWriteLong(SDHCI:PSDHCIHost; Reg:LongWord; Value:LongWord);
Description: Implementation of SDHCIHostWriteLong API for BCM2708 SDHCI
Note Not intended to be called directly by applications, use SDHCIHostWriteLong instead.
Note The source code of U-Boot and Linux kernel drivers have this comment The Arasan has a bugette whereby it may lose the content of successive writes to registers that are within two SD-card clock cycles of each other (a clock domain crossing problem). It seems, however, that the data register does not have this problem. (Which is just as well - otherwise we'd have to nobble the DMA engine too) For this reason this code must delay after each write to the registers.


procedure BCM2708SDHCIInterruptHandler(SDHCI:PSDHCIHost);
Description: Interrupt handler for the BCM2708 SDHCI host controller
Note Not intended to be called directly by applications


function BCM2708SDHCISetupInterrupts(SDHCI:PSDHCIHost):LongWord;
Description: Configure and enable interrupt handling for the BCM2708 SDHCI
Note Not intended to be called directly by applications


function BCM2708MMCDeviceGetCardDetect(MMC:PMMCDevice):LongWord;
Description: Implementation of MMC GetCardDetect for the BCM2708 which does not update the bits in the SDHCI_PRESENT_STATE register to reflect card insertion or removal
Note Not intended to be called directly by applications, use MMCDeviceGetCardDetect instead.


BCM2708 system clock functions

function BCM2708SystemClockRead(Clock:PClockDevice):LongWord;
Description: Implementation of ClockDeviceRead API for System Clock
Note Not intended to be called directly by applications, use ClockDeviceRead instead.


function BCM2708SystemClockRead64(Clock:PClockDevice):Int64;
Description: Implementation of ClockDeviceRead64 API for System Clock
Note Not intended to be called directly by applications, use ClockDeviceRead64 instead.


BCM2708 ARM clock functions

function BCM2708ARMClockStart(Clock:PClockDevice):LongWord;
Description: Implementation of ClockDeviceStart API for ARM Clock
Note Not intended to be called directly by applications, use ClockDeviceStart instead.


function BCM2708ARMClockStop(Clock:PClockDevice):LongWord;
Description: Implementation of ClockDeviceStop API for ARM Clock
Note Not intended to be called directly by applications, use ClockDeviceStop instead.


function BCM2708ARMClockRead(Clock:PClockDevice):LongWord;
Description: Implementation of ClockDeviceRead API for ARM Clock
Note Not intended to be called directly by applications, use ClockDeviceRead instead.


function BCM2708ARMClockRead64(Clock:PClockDevice):Int64;
Description: Implementation of ClockDeviceRead64 API for ARM Clock
Note Not intended to be called directly by applications, use ClockDeviceRead64 instead.


function BCM2708ARMClockSetRate(Clock:PClockDevice; Rate:LongWord):LongWord;
Description: Implementation of ClockDeviceSetRate API for ARM Clock
Note Not intended to be called directly by applications, use ClockDeviceSetRate instead.


BCM2708 ARM timer functions

function BCM2708ARMTimerStart(Timer:PTimerDevice):LongWord;
Description: Implementation of TimerDeviceStart API for ARM Timer
Note Not intended to be called directly by applications, use TimerDeviceStart instead.


function BCM2708ARMTimerStop(Timer:PTimerDevice):LongWord;
Description: Implementation of TimerDeviceStop API for ARM Timer
Note Not intended to be called directly by applications, use TimerDeviceStop instead.


function BCM2708ARMTimerRead64(Timer:PTimerDevice):Int64;
Description: Implementation of TimerDeviceRead64 API for ARM Timer
Note Not intended to be called directly by applications, use TimerDeviceRead64 instead.


function BCM2708ARMTimerWait(Timer:PTimerDevice):LongWord;
Description: Implementation of TimerDeviceWait API for ARM Timer
Note Not intended to be called directly by applications, use TimerDeviceWait instead.


function BCM2708ARMTimerEvent(Timer:PTimerDevice; Flags:LongWord; Callback:TTimerCallback; Data:Pointer):LongWord;
Description: Implementation of TimerDeviceEvent API for ARM Timer
Note Not intended to be called directly by applications, use TimerDeviceEvent instead.


function BCM2708ARMTimerCancel(Timer:PTimerDevice):LongWord;
Description: Implementation of TimerDeviceCancel API for ARM Timer
Note Not intended to be called directly by applications, use TimerDeviceCancel instead.


function BCM2708ARMTimerSetRate(Timer:PTimerDevice; Rate:LongWord):LongWord;
Description: Implementation of TimerDeviceSetRate API for ARM Timer
Note Not intended to be called directly by applications, use TimerDeviceSetRate instead.


function BCM2708ARMTimerSetInterval(Timer:PTimerDevice; Interval:LongWord):LongWord;
Description: Implementation of TimerDeviceSetInterval API for ARM Timer
Note Not intended to be called directly by applications, use TimerDeviceSetInterval instead.


procedure BCM2708ARMTimerInterruptHandler(Timer:PTimerDevice);
Description: Interrupt handler for ARM Timer
Note Not intended to be called directly by applications


procedure BCM2708ARMTimerEventTrigger(Timer:PTimerDevice);
Description: Event handler for ARM Timer
Note Not intended to be called directly by applications


BCM2708 random functions

function BCM2708RandomStart(Random:PRandomDevice):LongWord;
Description: To be documented
Note None documented


function BCM2708RandomStop(Random:PRandomDevice):LongWord;
Description: To be documented
Note None documented


function BCM2708RandomReadLongWord(Random:PRandomDevice):LongWord;
Description: To be documented
Note None documented


BCM2708 watchdog functions

function BCM2708WatchdogStart(Watchdog:PWatchdogDevice):LongWord;
Description: To be documented
Note None documented


function BCM2708WatchdogStop(Watchdog:PWatchdogDevice):LongWord;
Description: To be documented
Note None documented


function BCM2708WatchdogRefresh(Watchdog:PWatchdogDevice):LongWord;
Description: To be documented
Note None documented


function BCM2708WatchdogGetRemain(Watchdog:PWatchdogDevice):LongWord;
Description: To be documented
Note None documented


BCM2708 framebuffer functions

function BCM2708FramebufferAllocate(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;
Description: Implementation of FramebufferDeviceAllocate API for BCM2708 Framebuffer
Note Not intended to be called directly by applications, use FramebufferDeviceAllocate instead.


function BCM2708FramebufferRelease(Framebuffer:PFramebufferDevice):LongWord;
Description: Implementation of FramebufferDeviceRelease API for BCM2708 Framebuffer
Note Not intended to be called directly by applications, use FramebufferDeviceRelease instead.


function BCM2708FramebufferBlank(Framebuffer:PFramebufferDevice; Blank:Boolean):LongWord;
Description: Implementation of FramebufferDeviceBlank API for BCM2708 Framebuffer
Note Not intended to be called directly by applications, use FramebufferDeviceBlank instead.


function BCM2708FramebufferCommit(Framebuffer:PFramebufferDevice;Address:PtrUInt;Size,Flags:LongWord):LongWord;
Description: Implementation of FramebufferDeviceCommit API for BCM2708 Framebuffer
Note Not intended to be called directly by applications, use FramebufferDeviceCommit instead.


function BCM2708FramebufferWaitSync(Framebuffer:PFramebufferDevice):LongWord;
Description: Implementation of FramebufferDeviceWaitSync API for BCM2708 Framebuffer
Note Not intended to be called directly by applications, use FramebufferDeviceWaitSync instead.


function BCM2708FramebufferSetOffsetEx(Framebuffer:PFramebufferDevice; X,Y:LongWord; Pan,Switch:Boolean):LongWord;
Description: Implementation of FramebufferDeviceSetOffsetEx API for BCM2708 Framebuffer
Note Not intended to be called directly by applications, use FramebufferDeviceSetOffsetEx instead.


function BCM2708FramebufferGetPalette(Framebuffer:PFramebufferDevice; Palette:PFramebufferPalette):LongWord;
Description: Implementation of FramebufferDeviceGetPalette API for BCM2708 Framebuffer
Note Not intended to be called directly by applications, use FramebufferDeviceGetPalette instead.


function BCM2708FramebufferSetPalette(Framebuffer:PFramebufferDevice; Palette:PFramebufferPalette):LongWord;
Description: Implementation of FramebufferDeviceSetPalette API for BCM2708 Framebuffer
Note Not intended to be called directly by applications, use FramebufferDeviceSetPalette instead.


function BCM2708FramebufferSetBacklight(Framebuffer:PFramebufferDevice; Brightness:LongWord):LongWord;
Description: Implementation of FramebufferDeviceSetBacklight API for BCM2708 Framebuffer
Note Not intended to be called directly by applications, use FramebufferDeviceSetBacklight instead.


function BCM2708FramebufferSetCursor(Framebuffer:PFramebufferDevice; Width,Height,HotspotX,HotspotY:LongWord; Image:Pointer; Len:LongWord):LongWord;
Description: Implementation of FramebufferDeviceSetCursor API for BCM2708 Framebuffer
Note Not intended to be called directly by applications, use FramebufferDeviceSetCursor instead.


function BCM2708FramebufferUpdateCursor(Framebuffer:PFramebufferDevice; Enabled:Boolean; X,Y:LongInt; Relative:Boolean):LongWord;
Description: Implementation of FramebufferDeviceUpdateCursor API for BCM2708 Framebuffer
Note Not intended to be called directly by applications, use FramebufferDeviceUpdateCursor instead.


BCM2708 helper functions

function BCM2708SPIGetDescription(Id:LongWord):String;
Description: Get the device description of an SPI device
Id The Id number of the SPI device (0 to 2)
Return The correct device description suitable for passing to SPIDeviceFindByDescription
Note The Id number supplied to this function may differ from the Ultibo device id value.


function BCM2708I2CGetDescription(Id:LongWord):String;
Description: Get the device description of an I2C device
Id The Id number of the I2C device (0 to 2)
Return The correct device description suitable for passing to I2CDeviceFindByDescription
Note The Id number supplied to this function may differ from the Ultibo device id value.


function BCM2708I2CSlaveGetDescription(Id:LongWord):String;
Description: Get the device description of an I2C slave device
Id The Id number of the I2C slave device (Always 0)
Return The correct device description suitable for passing to I2CSlaveFindByDescription
Note The Id number supplied to this function may differ from the Ultibo device id value


function BCM2708PWMGetDescription(Id,Channel:LongWord):String;
Description: Get the device description of a PWM device
Id The Id number of the PWM device (0 or 1)
Channel The channel number of the PWM device (0 or 1)
Return The correct device description suitable for passing to PWMDeviceFindByDescription
Note The Id number supplied to this function may differ from the Ultibo device id value.


function BCM2708UARTGetDescription(Id:LongWord):String;
Description: Get the device description of a UART device
Id The Id number of the UART device (0 or 1)
Return The correct device description suitable for passing to UARTDeviceFindByDescription
Note The Id number supplied to this function may differ from the Ultibo device id value.


Return to Unit Reference