Difference between revisions of "Unit BCM2709"

From Ultibo.org
Jump to: navigation, search
Line 143: Line 143:
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 SPI0 constants''' <code> BCM2709_SPI0_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 SPI0''' <code> BCM2709_SPI0_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 188: Line 188:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 BSCI2C (BSC0/1/2) constants''' <code> BCM2709_BSCI2C_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 BSCI2C (BSC0/1/2)''' <code> BCM2709_BSCI2C_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 231: Line 231:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 I2C0 (BSC0) constants''' <code> BCM2709_I2C0_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 I2C0 (BSC0)''' <code> BCM2709_I2C0_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 242: Line 242:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 I2C1 (BSC1) constants''' <code> BCM2709_I2C1_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 I2C1 (BSC1)''' <code> BCM2709_I2C1_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 253: Line 253:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 SPI1 constants''' <code> BCM2709_SPI1_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 SPI1''' <code> BCM2709_SPI1_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 264: Line 264:
 
<br />  
 
<br />  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 SPI2 constants''' <code> BCM2709_SPI2_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 SPI2''' <code> BCM2709_SPI2_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 275: Line 275:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 I2C slave constants''' <code> BCM2709_I2CSLAVE_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 I2C slave''' <code> BCM2709_I2CSLAVE_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 286: Line 286:
 
<br />  
 
<br />  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 SPI slave constants''' <code> BCM2709_SPISLAVE_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 SPI slave''' <code> BCM2709_SPISLAVE_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 297: Line 297:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 DMA constants''' <code> BCM2709_DMA_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 DMA''' <code> BCM2709_DMA_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 364: Line 364:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 PWM constants''' <code> BCM2709_PWM_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 PWM''' <code> BCM2709_PWM_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 378: Line 378:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 PWM0 constants''' <code> BCM2709_PWM0_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 PWM0''' <code> BCM2709_PWM0_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 389: Line 389:
 
<br />  
 
<br />  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 PWM1 constants''' <code> BCM2709_PWM1_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 PWM1''' <code> BCM2709_PWM1_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 400: Line 400:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 GPIO constants''' <code> BCM2709_GPIO_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 GPIO''' <code> BCM2709_GPIO_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 544: Line 544:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 UART0 (PL011) constants''' <code> BCM2709_UART0_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 UART0 (PL011)''' <code> BCM2709_UART0_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 594: Line 594:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 UART1 (AUX) constants''' <code> BCM2709_UART1_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 UART1 (AUX)''' <code> BCM2709_UART1_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 605: Line 605:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 SDHCI constants''' <code> BCM2709_EMMC_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 SDHCI''' <code> BCM2709_EMMC_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 624: Line 624:
 
<br />  
 
<br />  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 ARM timer constants''' <code> BCM2709_ARM_TIMER_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 ARM timer''' <code> BCM2709_ARM_TIMER_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 670: Line 670:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 local timer constants''' <code> BCM2709_LOCAL_TIMER_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 local timer''' <code> BCM2709_LOCAL_TIMER_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 681: Line 681:
 
<br />
 
<br />
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 
<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;">'''BCM2709 random constants''' <code> BCM2709_RANDOM_* </code></div>
+
<div style="font-size: 14px; padding-left: 12px;">'''BCM2709 random''' <code> BCM2709_RANDOM_* </code></div>
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
Line 696: Line 696:
  
  
'''BCM2709 SPI0 types'''
+
'''BCM2709 SPI0'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 746: Line 746:
 
</div></div>   
 
</div></div>   
 
    
 
    
'''BCM2709 BSCI2C (I2C0/1) types'''
+
'''BCM2709 BSCI2C (I2C0/1)'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 805: Line 805:
 
</div></div>   
 
</div></div>   
 
    
 
    
'''BCM2709 BSCI2C (I2C0/1) IRQ data types'''  
+
'''BCM2709 BSCI2C (I2C0/1) IRQ data'''  
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 828: Line 828:
 
</div></div>   
 
</div></div>   
 
    
 
    
'''BCM2709 SPI AUX (SPI1/2) types'''
+
'''BCM2709 SPI AUX (SPI1/2)'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 853: Line 853:
 
</div></div>   
 
</div></div>   
 
   
 
   
'''BCM2709 DMA channel types'''
+
'''BCM2709 DMA channel'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 880: Line 880:
 
</div></div>   
 
</div></div>   
 
    
 
    
'''BCM2709 DMA types'''
+
'''BCM2709 DMA'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 931: Line 931:
 
</div></div>   
 
</div></div>   
 
   
 
   
'''BCM2709 PWM device types'''
+
'''BCM2709 PWM device'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 967: Line 967:
 
</div></div>
 
</div></div>
 
   
 
   
'''BCM2709 PCM audio types'''
+
'''BCM2709 PCM audio'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 992: Line 992:
 
</div></div>   
 
</div></div>   
 
   
 
   
'''BCM2709 GPIO types'''
+
'''BCM2709 GPIO'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,016: Line 1,016:
 
</div></div>   
 
</div></div>   
  
'''BCM2709 GPIO device types'''
+
'''BCM2709 GPIO device'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,046: Line 1,046:
 
</div></div>   
 
</div></div>   
 
    
 
    
'''BCM2709 UART0 types'''
+
'''BCM2709 UART0'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,076: Line 1,076:
 
</div></div>  
 
</div></div>  
 
   
 
   
'''BCM2709 SDHCI types'''
+
'''BCM2709 SDHCI'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,104: Line 1,104:
 
</div></div>   
 
</div></div>   
 
   
 
   
'''BCM2709 system clock types'''
+
'''BCM2709 system clock'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,121: Line 1,121:
 
</div></div>
 
</div></div>
  
'''BCM2709 ARM clock types'''
+
'''BCM2709 ARM clock'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,143: Line 1,143:
 
</div></div>   
 
</div></div>   
  
'''BCM2709 ARM timer types'''
+
'''BCM2709 ARM timer'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,170: Line 1,170:
 
</div></div>   
 
</div></div>   
  
'''BCM2709 local timer types'''
+
'''BCM2709 local timer'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,197: Line 1,197:
 
</div></div>   
 
</div></div>   
 
   
 
   
'''BCM2709 random types'''
+
'''BCM2709 random'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,214: Line 1,214:
 
</div></div>   
 
</div></div>   
  
'''BCM2709 mailbox types'''
+
'''BCM2709 mailbox'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,231: Line 1,231:
 
</div></div>   
 
</div></div>   
 
   
 
   
'''BCM2709 watchdog types'''
+
'''BCM2709 watchdog'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
Line 1,248: Line 1,248:
 
</div></div>
 
</div></div>
  
'''BCM2709 framebuffer types'''
+
'''BCM2709 framebuffer'''
  
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">
 
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial;">

Revision as of 02:25, 24 March 2017

Return to Unit Reference


Description


Ultibo BCM2709 interface unit

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

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

BCM2709 SPI0 Device

The BCM2709 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.

BCM2709 I2C0/1 Device

The BCM2709 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.

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.

BCM2709 SPI1/2 Device

The BCM2709 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.

BCM2709 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)

BCM2709 PWM0/1 Device

The BCM2709 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, 18 and 19 are exposed on the 40 pin header.

BCM2709 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.

BCM2709 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.

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.

BCM2709 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.

BCM2709 SDHCI Device

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

The Card Detect pin is not connected.

The Write Protect pin is not connected.

BCM2709 Clock Device

The clock device in the BCM2709 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 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.

BCM2709 ARM Timer Device

The ARM Timer device in the BCM2709 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



BCM2709 SPI0 BCM2709_SPI0_*
BCM2709_SPI0_DESCRIPTION = 'BCM2836 SPI0 Master';  
 
BCM2709_SPI0_MAX_SIZE = $FFFF;  
 
BCM2709_SPI0_MIN_CLOCK = 3814; Default minimum based on the default settings from the firmware (Recalculated during open)
BCM2709_SPI0_MAX_CLOCK = 125000000; Default maximum based on the default settings from the firmware (Recalculated during open)
 
BCM2709_SPI0_MIN_DIVIDER = 2; Divider is always rounded down to an even number and a value of 0 sets the divider to 65536
BCM2709_SPI0_MAX_DIVIDER = $FFFE; Divider is always rounded down to an even number}
 
BCM2709_SPI0_CORE_CLOCK = 250000000; Default core clock based on the default settings from the firmware (Requested from firmware during start)
 
BCM2709_SPI0_MODE_IRQ = 0;  
BCM2709_SPI0_MODE_DMA = 1;  


BCM2709 BSCI2C (BSC0/1/2) BCM2709_BSCI2C_*
BCM2709_BSCI2C_MAX_SIZE = $FFFF;  
 
BCM2709_BSCI2C_MIN_CLOCK = 3814; Default minimum based on the default settings from the firmware (Recalculated during open)
BCM2709_BSCI2C_MAX_CLOCK = 125000000; Default maximum based on the default settings from the firmware (Recalculated during open)
BCM2709_BSCI2C_DEFAULT_CLOCK = 100000;  
 
BCM2709_BSCI2C_MIN_DIVIDER = 2; Divider is always rounded down to an even number and a value of 0 sets the divider to 32768
BCM2709_BSCI2C_MAX_DIVIDER = $FFFE; Divider is always rounded down to an even number}
 
BCM2709_BSCI2C_CORE_CLOCK = 250000000; Default core clock based on the default settings from the firmware (Requested from firmware during start)
 
BCM2709_BSCI2C_MODE_WRITE = 0;  
BCM2709_BSCI2C_MODE_READ = 1;  


BCM2709 I2C0 (BSC0) BCM2709_I2C0_*
BCM2709_I2C0_DESCRIPTION = 'BCM2836 BSC0 Master I2C';  


BCM2709 I2C1 (BSC1) BCM2709_I2C1_*
BCM2709_I2C1_DESCRIPTION = 'BCM2836 BSC1 Master I2C';  


BCM2709 SPI1 BCM2709_SPI1_*
BCM2709_SPI1_DESCRIPTION = 'BCM2836 AUX SPI1 Master';  


BCM2709 SPI2 BCM2709_SPI2_*
BCM2709_SPI2_DESCRIPTION = 'BCM2836 AUX SPI2 Master';  


BCM2709 I2C slave BCM2709_I2CSLAVE_*
BCM2709_I2CSLAVE_DESCRIPTION = 'BCM2836 I2C Slave';  


BCM2709 SPI slave BCM2709_SPISLAVE_*
BCM2709_SPISLAVE_DESCRIPTION = 'BCM2836 SPI Slave';  


BCM2709 DMA BCM2709_DMA_*
BCM2709_DMA_DESCRIPTION = 'BCM2836 DMA';  
 
BCM2709_DMA_CHANNEL_COUNT = 16; Total number of DMA channels (Not all are usable)
 
BCM2709_DMA_LITE_CHANNELS = $7F80; Mask of DMA Lite channels (7 to 14)
BCM2709_DMA_NORMAL_CHANNELS = $007E; (807F) Mask of normal channels (1 to 6)
BCM2709_DMA_BULK_CHANNELS = $8001; Mask of DMA Bulk channels (0 and 15)
 
BCM2709_DMA_SHARED_CHANNELS = $7800; Mask of channels with shared interrupt (11 to 14)
 
BCM2709_DMA_MAX_LITE_TRANSFER = 65536; Maximum transfer length for a DMA Lite channel
BCM2709_DMA_MAX_NORMAL_TRANSFER = 1073741824; Maximum transfer length for a normal channel
 
BCM2709_DMA_MAX_STRIDE = $FFFF; Maximum stride value (Increment between rows) (Note this is a signed value (Min -32768 / Max 32767)
BCM2709_DMA_MAX_Y_COUNT = $3FFF; Maximum number of X length transfers in 2D stride
BCM2709_DMA_MAX_X_LENGTH = $FFFF; Maximum X transfer length in 2D stride
 
BCM2709_DMA_CB_ALIGNMENT = 32; Alignment required for DMA control blocks
 
BCM2709_DMA_LITE_BURST_LENGTH = 1; Burst length for DMA Lite channels
BCM2709_DMA_NORMAL_BURST_LENGTH = 2; Burst length for normal channels
BCM2709_DMA_BULK_BURST_LENGTH = 8; Burst length for DMA Bulk channels


BCM2709 PWM BCM2709_PWM_*
BCM2709_PWM_MIN_PERIOD = 108; Default based on 19.2MHz PWM clock (Oscillator source)
BCM2709_PWM_DEFAULT_CLOCK = 19200000; Default to the 19.2MHz oscillator clock


BCM2709 PWM0 BCM2709_PWM0_*
BCM2709_PWM0_DESCRIPTION = 'BCM2836 PWM0';  


BCM2709 PWM1 BCM2709_PWM1_*
BCM2709_PWM1_DESCRIPTION = 'BCM2836 PWM1';  


BCM2709 GPIO BCM2709_GPIO_*
BCM2709_GPIO_DESCRIPTION = 'BCM2836 GPIO';  
 
BCM2709_GPIO_MIN_PIN = GPIO_PIN_0;  
BCM2709_GPIO_MAX_PIN = GPIO_PIN_53;  
 
BCM2709_GPIO_MAX_LEVEL = GPIO_LEVEL_HIGH;  
 
BCM2709_GPIO_MAX_PULL = GPIO_PULL_DOWN;  
 
BCM2709_GPIO_MIN_FUNCTION = GPIO_FUNCTION_IN;  
BCM2709_GPIO_MAX_FUNCTION = GPIO_FUNCTION_ALT5;  
 
BCM2709_GPIO_MIN_TRIGGER = GPIO_TRIGGER_LOW;  
BCM2709_GPIO_MAX_TRIGGER = GPIO_TRIGGER_ASYNC_FALLING;  
 
GPIO pull up/down to BCM2836 pull up/down
BCM2709_GPIO_PULL_MAP:array[GPIO_PULL_NONE..GPIO_PULL_DOWN] of LongWord = (
BCM2836_GPPUD_NONE,  
BCM2836_GPPUD_UP,  
BCM2836_GPPUD_DOWN);  
 
GPIO functions to BCM2836 functions
BCM2709_GPIO_FUNCTION_MAP:array[BCM2709_GPIO_MIN_FUNCTION..BCM2709_GPIO_MAX_FUNCTION] of LongWord = (
BCM2836_GPFSEL_IN,  
BCM2836_GPFSEL_OUT,  
BCM2836_GPFSEL_ALT0,  
BCM2836_GPFSEL_ALT1,  
BCM2836_GPFSEL_ALT2,  
BCM2836_GPFSEL_ALT3,  
BCM2836_GPFSEL_ALT4,  
BCM2836_GPFSEL_ALT5);  
 
BCM2836 functions to GPIO functions
BCM2709_GPIO_FUNCTION_UNMAP:array[BCM2709_GPIO_MIN_FUNCTION..BCM2709_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 BCM2836 event registers
BCM2709_GPIO_TRIGGER_MAP:array[BCM2709_GPIO_MIN_TRIGGER..BCM2709_GPIO_MAX_TRIGGER] of LongWord = (
BCM2836_GPLEN0,  
BCM2836_GPHEN0,  
BCM2836_GPREN0,  
BCM2836_GPFEN0,  
BCM2836_GPAREN0,  
BCM2836_GPAFEN0);  


BCM2709 UART0 (PL011) BCM2709_UART0_*
BCM2709_UART0_DESCRIPTION = 'BCM2836 PL011 UART';  
 
BCM2709_UART0_MIN_BAUD = 300; Default minimum of 300 baud
BCM2709_UART0_MAX_BAUD = 187500; Default maximum based on the default settings from the firmware (Recalculated during open)
 
BCM2709_UART0_MIN_DATABITS = SERIAL_DATA_5BIT;  
BCM2709_UART0_MAX_DATABITS = SERIAL_DATA_8BIT;  
 
BCM2709_UART0_MIN_STOPBITS = SERIAL_STOP_1BIT;  
BCM2709_UART0_MAX_STOPBITS = SERIAL_STOP_2BIT;  
 
BCM2709_UART0_MAX_PARITY = SERIAL_PARITY_EVEN;  
 
BCM2709_UART0_MAX_FLOW = SERIAL_FLOW_RTS_CTS;  
 
BCM2709_UART0_CLOCK_RATE = 3000000; Default clock rate based on the default settings from the firmware (Requested from firmware during open)


BCM2709 UART1 (AUX) BCM2709_UART1_*
BCM2709_UART1_DESCRIPTION = 'BCM2836 AUX (Mini) UART';  


BCM2709 SDHCI BCM2709_EMMC_*
BCM2709_EMMC_DESCRIPTION = 'BCM2836 Arasan SD Host';  
 
BCM2709_EMMC_MIN_FREQ = 400000; Default minimum of 400KHz
BCM2709_EMMC_MAX_FREQ = 250000000;  


BCM2709 ARM timer BCM2709_ARM_TIMER_*
BCM2709_ARM_TIMER_DESCRIPTION = 'BCM2836 ARM Timer';  
 
BCM2709_ARM_TIMER_MIN_RATE = 244140; Default minimum (Divider 1023) based on the default settings from the firmware (Recalculated during start)
BCM2709_ARM_TIMER_MAX_RATE = 250000000; Default maximum (Divider 0) based on the default settings from the firmware (Recalculated during start)
BCM2709_ARM_TIMER_DEFAULT_RATE = 1000000; Default rate (Divider 249) based on the default settings from the firmware (Recalculated during start)
 
BCM2709_ARM_TIMER_MIN_INTERVAL = 1;  
BCM2709_ARM_TIMER_MAX_INTERVAL = $FFFFFFFF;  
 
BCM2709_ARM_TIMER_MIN_DIVIDER = 0;  
BCM2709_ARM_TIMER_MAX_DIVIDER = 1023;  
BCM2709_ARM_TIMER_DEFAULT_DIVIDER = 249;  
 
BCM2709_ARM_TIMER_CORE_CLOCK = 250000000; Default core clock based on the default settings from the firmware (Requested from firmware during start)


BCM2709 local timer BCM2709_LOCAL_TIMER_*
BCM2709_LOCAL_TIMER_DESCRIPTION = 'BCM2836 Local Timer';  


BCM2709 random BCM2709_RANDOM_*
BCM2709_RANDOM_WARMUP_COUNT = $00040000; The initial numbers generated are "less random" so will be discarded


Type definitions



BCM2709 SPI0

PBCM2709SPI0Device = ^TBCM2709SPI0Device;

TBCM2709SPI0Device = record

SPI Properties
SPI:TSPIDevice;  
BCM2709 Properties
Address:Pointer; Device register base address
CoreClock:LongWord; Core clock rate
Transfer Properties
Mode:LongWord; Mode of current transfer (BCM2709_SPI0_MODE_IRQ / BCM2709_SPI0_MODE_DMA)
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

BCM2709 BSCI2C (I2C0/1)

PBCM2709BSCI2CDevice = ^TBCM2709BSCI2CDevice;

TBCM2709BSCI2CDevice = record

I2C Properties
I2C:TI2CDevice;  
BCM2709 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 (BCM2709_BSCI2C_MODE_WRITE / BCM2709_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
Statistics Properties
InterruptCount:LongWord; Number of interrupt requests received by the device

BCM2709 BSCI2C (I2C0/1) IRQ data

PBCM2709BSCI2CIRQData = ^TBCM2709BSCI2CIRQData;

TBCM2709BSCI2CIRQData = record

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

BCM2709 SPI AUX (SPI1/2)

PBCM2709SPIAUXDevice = ^TBCM2709SPIAUXDevice;

TBCM2709SPIAUXDevice = record

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

BCM2709 DMA channel

PBCM2709DMAChannel = ^TBCM2709DMAChannel;

TBCM2709DMAChannel = record

Host:PBCM2709DMAHost; 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:PBCM2836DMARegisters; The channel registers for configuration

BCM2709 DMA

PBCM2709DMAHost = ^TBCM2709DMAHost;

TBCM2709DMAHost = record

DMA Properties
DMA:TDMAHost;  
BCM2709 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..BCM2709_DMA_CHANNEL_COUNT - 1] of TBCM2709DMAChannel; 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

BCM2709 PWM device

PBCM2709PWMDevice = ^TBCM2709PWMDevice;

TBCM2709PWMDevice = record

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

BCM2709 PCM audio

PBCM2709PWMAudio = ^TBCM2709PWMAudio;

TBCM2709PWMAudio = record

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

BCM2709 GPIO

PBCM2709GPIOBank = ^TBCM2709GPIOBank;

TBCM2709GPIOBank = record

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

BCM2709 GPIO device

PBCM2709GPIODevice = ^TBCM2709GPIODevice;

TBCM2709GPIODevice = record

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

BCM2709 UART0

PBCM2709UART0Device = ^TBCM2709UART0Device;

TBCM2709UART0Device = record

UART Properties
UART:TUARTDevice;  
BCM2709 Properties
Address:Pointer; Device register base address
ClockRate:LongWord; Device clock rate
Statistics Properties
InterruptCount:LongWord; Number of interrupt requests received by the device

BCM2709 SDHCI

PBCM2709SDHCIHost = ^TBCM2709SDHCIHost;

TBCM2709SDHCIHost = record

SDHCI Properties
SDHCI:TSDHCIHost;  
BCM2709 Properties
WriteDelay:LongWord;  
LastWrite:LongWord;  
ShadowRegister:LongWord;  

BCM2709 system clock

PBCM2709SystemClock = ^TBCM2709SystemClock;

TBCM2709SystemClock = record

Clock Properties
Clock:TClockDevice;  

BCM2709 ARM clock

PBCM2709ARMClock = ^TBCM2709ARMClock;

TBCM2709ARMClock = record

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

BCM2709 ARM timer

PBCM2709ARMTimer = ^TBCM2709ARMTimer;

TBCM2709ARMTimer = record

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

BCM2709 local timer

PBCM2709LocalTimer = ^TBCM2709LocalTimer;

TBCM2709LocalTimer = record

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

BCM2709 random

PBCM2709Random = ^TBCM2709Random;

TBCM2709Random = record

Random Properties
Random:TRandomDevice;  

BCM2709 mailbox

PBCM2709Mailbox = ^TBCM2709Mailbox;

TBCM2709Mailbox = record

Mailbox Properties
Mailbox:TMailboxDevice;  

BCM2709 watchdog

PBCM2709Watchdog = ^TBCM2709Watchdog;

TBCM2709Watchdog = record

Watchdog Properties
Watchdog:TWatchdogDevice;  

BCM2709 framebuffer

PBCM2709Framebuffer = ^TBCM2709Framebuffer;

TBCM2709Framebuffer = record

Framebuffer Properties
Framebuffer:TFramebufferDevice;  


Public variables


None defined

Function declarations



Initialization functions

procedure BCM2709Init;
Description: To be documented
Note None documented


BCM2709 SPI0 functions

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


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


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


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


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


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


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


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


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


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


procedure BCM2709SPI0InterruptHandler(SPI:PBCM2709SPI0Device);
Description: To be documented
Note None documented


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


BCM2709 BSCI2C (I2C0/1) functions

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


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


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


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


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


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


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


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


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


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


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


BCM2709 DMA functions

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


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


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


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


procedure BCM2709DMAInterruptHandler(Channel:PBCM2709DMAChannel);
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 BCM2709DMASharedInterruptHandler(DMA:PBCM2709DMAHost);
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 BCM2709DMARequestComplete(Channel:PBCM2709DMAChannel);
Description: To be documented
Note None documented


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


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


BCM2709 PWM0/1 functions

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


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


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


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


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


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


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


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


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


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


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


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


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


BCM2709 GPIO functions

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


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


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


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


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


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


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


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


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


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


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


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


procedure BCM2709GPIOInterruptHandler(Bank:PBCM2709GPIOBank);
Description: To be documented
Note None documented


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


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


BCM2709 UART0 functions

function BCM2709UART0Open(UART:PUARTDevice; BaudRate,DataBits,StopBits,Parity,FlowControl:LongWord):LongWord;
Description: To be documented
Note None documented


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


function BCM2709UART0Read(UART:PUARTDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;
Description: To be documented
Note None documented


function BCM2709UART0Write(UART:PUARTDevice; Buffer:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;
Description: To be documented
Note None documented


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


procedure BCM2709UART0InterruptHandler(UART:PUARTDevice);
Description: To be documented
Note None documented


procedure BCM2709UART0Receive(UART:PUARTDevice);
Description: To be documented
Note None documented


procedure BCM2709UART0Transmit(UART:PUARTDevice);
Description: To be documented
Note None documented


BCM2709 SDHCI functions

function BCM2709SDHCIHostStart(SDHCI:PSDHCIHost):LongWord;
Description: To be documented
Note None documented


function BCM2709SDHCIHostStop(SDHCI:PSDHCIHost):LongWord;
Description: To be documented
Note None documented


function BCM2709SDHCIHostReadByte(SDHCI:PSDHCIHost; Reg:LongWord):Byte;
Description: To be documented
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 BCM2709SDHCIHostReadWord(SDHCI:PSDHCIHost; Reg:LongWord):Word;
Description: To be documented
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 BCM2709SDHCIHostReadLong(SDHCI:PSDHCIHost; Reg:LongWord):LongWord;
Description: To be documented
Note None documented


procedure BCM2709SDHCIHostWriteByte(SDHCI:PSDHCIHost; Reg:LongWord; Value:Byte);
Description: To be documented
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 BCM2709SDHCIHostWriteWord(SDHCI:PSDHCIHost; Reg:LongWord; Value:Word);
Description: To be documented
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 BCM2709SDHCIHostWriteLong(SDHCI:PSDHCIHost; Reg:LongWord; Value:LongWord);
Description: To be documented
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 BCM2709SDHCIInterruptHandler(SDHCI:PSDHCIHost);
Description: To be documented
Note None documented


function BCM2709SDHCISetupInterrupts(SDHCI:PSDHCIHost):LongWord;
Description: To be documented
Note None documented


function BCM2709MMCDeviceGetCardDetect(MMC:PMMCDevice):LongWord;
Description: Implementation of MMC GetCardDetect for the BCM2709 which does not update the bits in the SDHCI_PRESENT_STATE register to reflect card insertion or removal
Note None documented


BCM2709 clock functions

function BCM2709ClockRead(Clock:PClockDevice):LongWord;
Description: To be documented
Note None documented


function BCM2709ClockRead64(Clock:PClockDevice):Int64;
Description: To be documented
Note None documented


BCM2709 ARM timer functions

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


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


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


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


function BCM2709ARMTimerEvent(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 BCM2709ARMTimerCancel(Timer:PTimerDevice):LongWord;
Description: Implementation of TimerDeviceCancel API for ARM Timer
Note Not intended to be called directly by applications, use TimerDeviceCancel instead


function BCM2709ARMTimerSetRate(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 BCM2709ARMTimerSetInterval(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 BCM2709ARMTimerInterruptHandler(Timer:PTimerDevice);
Description: Interrupt handler for ARM Timer
Note Not intended to be called directly by applications


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


BCM2709 random functions

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


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


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


BCM2709 watchdog functions

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


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


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


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


BCM2709 framebuffer functions

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


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


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


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


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


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


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


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


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


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


Return to Unit Reference