Difference between revisions of "Unit PlatformRPi3"
Line 10: | Line 10: | ||
---- | ---- | ||
− | '' | + | |
+ | <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;">'''RPi3 ARM physical to VC IO mapping constants''' <code> RPI3_VCIO_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>RPI3_VCIO_ALIAS = BCM2837_VCIO_ALIAS;</code> | ||
+ | | The VCIO Alias (For ARM Physcial to VC IO translation) | ||
+ | |- | ||
+ | |} | ||
+ | </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;">'''RPi3 ARM physical to VC bus mapping constants''' <code> RPI3_VCBUS_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>RPI3_VCBUS_ALIAS = BCM2837_VCBUS_C_ALIAS;</code> | ||
+ | | The currently selected VCBUS Alias (For ARM Physcial to VC Bus translation) | ||
+ | |- | ||
+ | |} | ||
+ | </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;">'''RPi3 secure world boot constants''' <code> RPI3_SECURE_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>RPI3_SECURE_BOOT = $00000001;</code> | ||
+ | | If 1 then startup will attempt to switch back to secure world during boot process | ||
+ | |- | ||
+ | |} | ||
+ | </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;">'''RPi3 address of StartupHandler on reset constants''' <code> RPI3_STARTUP_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>RPI3_STARTUP_ADDRESS = $00008000;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |} | ||
+ | </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;">'''RPi3 page table address and size constants''' <code> RPI3_PAGE_TABLE_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>RPI3_PAGE_TABLE_BASE = $00004000;</code> | ||
+ | | Place the first level Page Table after the interrupt vectors at 0x00001000 and before the code start at 0x00008000 | ||
+ | |- | ||
+ | | <code>RPI3_PAGE_TABLE_SIZE = SIZE_16K;</code> | ||
+ | | ARM Cortex A7 first level Page Table is exactly 16KB in size (4096 32 bit (4 byte) entries) | ||
+ | |- | ||
+ | |} | ||
+ | </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;">'''RPi3 vector table address and size constants ''' <code> RPI3_VECTOR_TABLE_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>RPI3_VECTOR_TABLE_BASE = $00001000;</code> | ||
+ | | Place the Interrupt Vector Table at 0x00001000 before the code start at 0x00008000 | ||
+ | |- | ||
+ | | <code>RPI3_VECTOR_TABLE_SIZE = SIZE_64;</code> | ||
+ | | The Interrupt Vector Table is exactly 64 bytes (16 32 bit (4 byte) entries) | ||
+ | |- | ||
+ | | <code>RPI3_VECTOR_TABLE_COUNT = 8;</code> | ||
+ | | The Interrupt Vector Table contains 8 entries on an ARMv7 device | ||
+ | |- | ||
+ | |} | ||
+ | </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;">'''RPi3 CPU count constants''' <code> RPI3_CPU_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>RPI3_CPU_COUNT = BCM2837_CPU_COUNT;</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | | <code>RPI3_CPU_BOOT = CPU_ID_0;</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>RPI3_CPU_MASK = CPU_AFFINITY_0 or CPU_AFFINITY_1 or CPU_AFFINITY_2 or CPU_AFFINITY_3;</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </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;">'''RPi3 IRQ/FIQ start/routing constants''' <code> RPI3_IRQ_*, RPI3_FIQ_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>RPI3_IRQ_START = 0;</code> | ||
+ | | System wide IRQs start at zero | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>RPI3_IRQ_ROUTING = CPU_ID_0;</code> | ||
+ | | Route system wide IRQs to CPU0 | ||
+ | |- | ||
+ | | <code>RPI3_FIQ_ROUTING = CPU_ID_0;</code> | ||
+ | | Route system wide FIQs to CPU0 | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>RPI3_IRQ_LOCAL_START = BCM2837_GPU_IRQ_COUNT + BCM2837_ARM_IRQ_COUNT;</code> | ||
+ | | Local IRQs start after GPU and ARM IRQs | ||
+ | |- | ||
+ | |} | ||
+ | </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;">'''RPi3 SWI constants''' <code> RPI3_SWI_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>RPI3_SWI_COUNT = 256;</code> | ||
+ | | Number of available SWI entries | ||
+ | |- | ||
+ | |} | ||
+ | </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;">'''RPi3 core timer prescaler constants''' <code> RPI3_*_TIMER_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>RPI3_CORE_TIMER_PRESCALER = $06AAAAAB;</code> | ||
+ | | Divide the Crystal Clock by 19.2 to give a 1MHz Core Timer | ||
+ | |- | ||
+ | | <code>RPI3_CORE_TIMER_FREQUENCY = 1000000;</code> | ||
+ | | The Core Timer frequency from the prescaler setting above | ||
+ | |- | ||
+ | | <code>RPI3_GENERIC_TIMER_FREQUENCY = 1000000;</code> | ||
+ | | The ARM Generic Timer frequency from the prescaler setting above | ||
+ | |- | ||
+ | |} | ||
+ | </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;">'''RPi3 kernel image name constants''' <code> RPI3_KERNEL_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>RPI3_KERNEL_NAME = 'kernel7.img';</code> | ||
+ | | style="width: 50%;"| | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>RPI3_KERNEL_NAME = 'kernel8.img';</code> | ||
+ | | | ||
+ | |- | ||
+ | |colspan="2"| | ||
+ | |- | ||
+ | | <code>RPI3_KERNEL_CONFIG = 'config.txt';</code> | ||
+ | | | ||
+ | |- | ||
+ | | <code>RPI3_KERNEL_COMMAND = 'cmdline.txt';</code> | ||
+ | | | ||
+ | |- | ||
+ | |} | ||
+ | </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;">'''RPi3 mailbox constants''' <code> RPI3_MAILBOX_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>RPI3_MAILBOX_TIMEOUT = 100;</code> | ||
+ | | Default timeout to wait for mailbox calls to complete (Milliseconds) | ||
+ | |- | ||
+ | | <code>RPI3_MAILBOX_TIMEOUT_EX = 1000;</code> | ||
+ | | Extended timeout to wait for mailbox calls to complete (Milliseconds) | ||
+ | |- | ||
+ | |} | ||
+ | </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;">'''RPi3 local mailbox constants''' <code> RPI3_LOCAL_MAILBOX_* </code></div> | ||
+ | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | ||
+ | {| class="wikitable" style="font-size: 14px; background: white;" | ||
+ | |- | ||
+ | | <code>RPI3_LOCAL_MAILBOX_TIMEOUT = 100;</code> | ||
+ | | Default timeout to wait for local mailbox calls to complete (Milliseconds) | ||
+ | |- | ||
+ | |} | ||
+ | </div></div> | ||
+ | <br /> | ||
=== Type definitions === | === Type definitions === |
Revision as of 03:58, 19 December 2016
Return to Unit Reference
Description
The RPi3 B has the Activity LED connected to the GPU, access is via a Virtual GPIO (Power LED appears to be unavailable).
Constants
RPI3_VCIO_*
RPI3_VCIO_ALIAS = BCM2837_VCIO_ALIAS;
|
The VCIO Alias (For ARM Physcial to VC IO translation) |
RPI3_VCBUS_*
RPI3_VCBUS_ALIAS = BCM2837_VCBUS_C_ALIAS;
|
The currently selected VCBUS Alias (For ARM Physcial to VC Bus translation) |
RPI3_SECURE_*
RPI3_SECURE_BOOT = $00000001;
|
If 1 then startup will attempt to switch back to secure world during boot process |
RPI3_STARTUP_*
RPI3_STARTUP_ADDRESS = $00008000;
|
RPI3_PAGE_TABLE_*
RPI3_PAGE_TABLE_BASE = $00004000;
|
Place the first level Page Table after the interrupt vectors at 0x00001000 and before the code start at 0x00008000 |
RPI3_PAGE_TABLE_SIZE = SIZE_16K;
|
ARM Cortex A7 first level Page Table is exactly 16KB in size (4096 32 bit (4 byte) entries) |
RPI3_VECTOR_TABLE_*
RPI3_VECTOR_TABLE_BASE = $00001000;
|
Place the Interrupt Vector Table at 0x00001000 before the code start at 0x00008000 |
RPI3_VECTOR_TABLE_SIZE = SIZE_64;
|
The Interrupt Vector Table is exactly 64 bytes (16 32 bit (4 byte) entries) |
RPI3_VECTOR_TABLE_COUNT = 8;
|
The Interrupt Vector Table contains 8 entries on an ARMv7 device |
RPI3_CPU_*
RPI3_CPU_COUNT = BCM2837_CPU_COUNT;
|
|
RPI3_CPU_BOOT = CPU_ID_0;
|
|
RPI3_CPU_MASK = CPU_AFFINITY_0 or CPU_AFFINITY_1 or CPU_AFFINITY_2 or CPU_AFFINITY_3;
|
RPI3_IRQ_*, RPI3_FIQ_*
RPI3_IRQ_START = 0;
|
System wide IRQs start at zero |
RPI3_IRQ_ROUTING = CPU_ID_0;
|
Route system wide IRQs to CPU0 |
RPI3_FIQ_ROUTING = CPU_ID_0;
|
Route system wide FIQs to CPU0 |
RPI3_IRQ_LOCAL_START = BCM2837_GPU_IRQ_COUNT + BCM2837_ARM_IRQ_COUNT;
|
Local IRQs start after GPU and ARM IRQs |
RPI3_SWI_*
RPI3_SWI_COUNT = 256;
|
Number of available SWI entries |
RPI3_*_TIMER_*
RPI3_CORE_TIMER_PRESCALER = $06AAAAAB;
|
Divide the Crystal Clock by 19.2 to give a 1MHz Core Timer |
RPI3_CORE_TIMER_FREQUENCY = 1000000;
|
The Core Timer frequency from the prescaler setting above |
RPI3_GENERIC_TIMER_FREQUENCY = 1000000;
|
The ARM Generic Timer frequency from the prescaler setting above |
RPI3_KERNEL_*
RPI3_KERNEL_NAME = 'kernel7.img';
|
|
RPI3_KERNEL_NAME = 'kernel8.img';
|
|
RPI3_KERNEL_CONFIG = 'config.txt';
|
|
RPI3_KERNEL_COMMAND = 'cmdline.txt';
|
RPI3_MAILBOX_*
RPI3_MAILBOX_TIMEOUT = 100;
|
Default timeout to wait for mailbox calls to complete (Milliseconds) |
RPI3_MAILBOX_TIMEOUT_EX = 1000;
|
Extended timeout to wait for mailbox calls to complete (Milliseconds) |
RPI3_LOCAL_MAILBOX_*
RPI3_LOCAL_MAILBOX_TIMEOUT = 100;
|
Default timeout to wait for local mailbox calls to complete (Milliseconds) |
Type definitions
None defined
Public variables
To be documented
Function declarations
Initialization functions
procedure RPi3Init;
Note | None documented |
---|
procedure RPi3SecondarySwitch; assembler; nostackframe;
Note | None documented |
---|
procedure RPi3SecondarySecure; assembler; nostackframe;
Note | None documented |
---|
procedure RPi3SecondaryHandler; assembler; nostackframe;
Note | None documented |
---|
RPi3 platform functions
procedure RPi3SMPInit;
Note | None documented |
---|
procedure RPi3BoardInit;
Note | None documented |
---|
procedure RPi3MemoryInit;
Note | None documented |
---|
procedure RPi3ClockInit;
Note | None documented |
---|
procedure RPi3PowerInit;
Note | None documented |
---|
procedure RPi3MailboxInit;
Note | None documented |
---|
procedure RPi3InterruptInit;
Note | None documented |
---|
procedure RPi3PeripheralInit;
Note | None documented |
---|
procedure RPi3FramebufferInit;
Note | None documented |
---|
procedure RPi3PageTableInit;
Note | None documented |
---|
procedure RPi3PowerLEDEnable;
Note | None documented |
---|
procedure RPi3PowerLEDOn;
Note | None documented |
---|
procedure RPi3PowerLEDOff;
Note | None documented |
---|
procedure RPi3ActivityLEDEnable;
Note | None documented |
---|
procedure RPi3ActivityLEDOn;
Note | None documented |
---|
procedure RPi3ActivityLEDOff;
Note | None documented |
---|
function RPi3MailboxReceive(Mailbox,Channel:LongWord):LongWord;
Note | Data = first 28 bits, Channel = last 4 bits |
---|
procedure RPi3MailboxSend(Mailbox,Channel,Data:LongWord);
Note | Data = first 28 bits, Channel = last 4 bits |
---|
function RPi3MailboxCall(Mailbox,Channel,Data:LongWord; var Response:LongWord):LongWord;
Note | Data = first 28 bits, Channel = last 4 bits
Data pointer must be 16 byte aligned to allow for the 4 bit channel number |
---|
function RPi3MailboxCallEx(Mailbox,Channel,Data:LongWord; var Response:LongWord; Timeout:LongWord):LongWord;
Note | Data = first 28 bits, Channel = last 4 bits
Data pointer must be 16 byte aligned to allow for the 4 bit channel number |
---|
function RPi3MailboxPropertyCall(Mailbox,Channel:LongWord; Data:Pointer; var Response:LongWord):LongWord;
Note | Data = first 28 bits, Channel = last 4 bits
Data pointer must be 16 byte aligned to allow for the 4 bit channel number |
---|
function RPi3MailboxPropertyCallEx(Mailbox,Channel:LongWord; Data:Pointer; var Response:LongWord; Timeout:LongWord):LongWord;
Note | Data = first 28 bits, Channel = last 4 bits
Data pointer must be 16 byte aligned to allow for the 4 bit channel number |
---|
function RPi3RequestExIRQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
CPUID | CPU to route IRQ to |
---|---|
Number | IRQ number to register |
Handler | Interrupt handler function to register |
HandlerEx | Extended Interrupt handler function to register |
Note | Only one of Handler or HandlerEx can be specified |
function RPi3ReleaseExIRQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
CPUID | CPU to route IRQ to |
---|---|
Number | IRQ number to deregister |
Handler | Interrupt handler function to deregister |
HandlerEx | Extended Interrupt handler function to deregister |
Note | Only one of Handler or HandlerEx can be specified |
function RPi3RequestExFIQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
CPUID | CPU to route FIQ to |
---|---|
Number | FIQ number to register |
Handler | Interrupt handler function to register |
HandlerEx | Extended Interrupt handler function to register |
Note | Only one of Handler or HandlerEx can be specified |
function RPi3ReleaseExFIQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
CPUID | CPU to route FIQ to |
---|---|
Number | FIQ number to deregister |
Handler | Interrupt handler function to deregister |
HandlerEx | Extended Interrupt handler function to deregister |
Note | Only one of Handler or HandlerEx can be specified |
function RPi3RegisterSystemCallEx(CPUID,Number:LongWord; Handler:TSystemCallHandler; HandlerEx:TSystemCallExHandler):LongWord;
CPUID | The CPU ID to register the System Call against (or CPU_ID_ALL) |
---|---|
Number | The System Call number to be registered |
Handler | The handler function to be registered |
HandlerEx | The extended handler function to be registered |
Note | Only one of Handler or HandlerEx can be specified |
function RPi3DeregisterSystemCallEx(CPUID,Number:LongWord; Handler:TSystemCallHandler; HandlerEx:TSystemCallExHandler):LongWord;
CPUID | The CPU ID to deregister the System Call from (or CPU_ID_ALL) |
---|---|
Number | The System Call number to be deregistered |
Handler | The handler function to be deregistered |
HandlerEx | The extended handler function to be deregistered |
Note | Only one of Handler or HandlerEx can be specified |
function RPi3GetInterruptEntry(Number:LongWord):TInterruptEntry;
Note | None documented |
---|
function RPi3GetLocalInterruptEntry(CPUID,Number:LongWord):TInterruptEntry;
Note | None documented |
---|
function RPi3GetSystemCallEntry(Number:LongWord):TSystemCallEntry;
Note | None documented |
---|
function RPi3SystemRestart(Delay:LongWord):LongWord;
Note | None documented |
---|
function RPi3SystemShutdown(Delay:LongWord):LongWord;
Note | None documented |
---|
function RPi3SystemGetCommandLine:String;
Note | None documented |
---|
function RPi3CPUGetMemory(var Address:PtrUInt; var Length:LongWord):LongWord;
Note | None documented |
---|
function RPi3GPUGetState:LongWord;
Note | None documented |
---|
function RPi3GPUGetMemory(var Address:PtrUInt; var Length:LongWord):LongWord;
Note | None documented |
---|
function RPi3BoardGetModel:LongWord;
Note | None documented |
---|
function RPi3BoardGetSerial:Int64;
Note | None documented |
---|
function RPi3BoardGetRevision:LongWord;
Note | None documented |
---|
function RPi3BoardGetMACAddress:String;
Note | None documented |
---|
function RPi3FirmwareGetRevision:LongWord;
Note | None documented |
---|
function RPi3PowerGetWait(PowerId:LongWord):LongWord;
Note | None documented |
---|
function RPi3PowerGetState(PowerId:LongWord):LongWord;
Note | None documented |
---|
function RPi3PowerSetState(PowerId,State:LongWord; Wait:Boolean):LongWord;
Note | Power Lock not required due to Mailbox Property Call serialization |
---|
function RPi3ClockGetCount:LongWord;
Note | On the Raspberry Pi this comes from the System Timer free running counter which runs at 1MHz and therefore overflows every 4295 seconds |
---|
function RPi3ClockGetTotal:Int64;
Note | On the Raspberry Pi this comes from the System Timer free running counter which runs at 1MHz, the clock interrupt also uses this timer to increment the clock every second and therefore keep time. |
---|
function RPi3ClockGetRate(ClockId:LongWord):LongWord;
Note | None documented |
---|
function RPi3ClockSetRate(ClockId,Rate:LongWord; Turbo:Boolean):LongWord;
Note | None documented |
---|
function RPi3ClockGetState(ClockId:LongWord):LongWord;
Note | None documented |
---|
function RPi3ClockSetState(ClockId,State:LongWord):LongWord;
Note | None documented |
---|
function RPi3ClockGetMinRate(ClockId:LongWord):LongWord;
Note | None documented |
---|
function RPi3ClockGetMaxRate(ClockId:LongWord):LongWord;
Note | None documented |
---|
function RPi3TurboGetState(TurboId:LongWord):LongWord;
Note | None documented |
---|
function RPi3TurboSetState(TurboId,State:LongWord):LongWord;
Note | None documented |
---|
function RPi3VoltageGetValue(VoltageId:LongWord):LongWord;
Note | None documented |
---|
function RPi3VoltageSetValue(VoltageId,Value:LongWord):LongWord;
Note | None documented |
---|
function RPi3VoltageGetMinValue(VoltageId:LongWord):LongWord;
Note | None documented |
---|
function RPi3VoltageGetMaxValue(VoltageId:LongWord):LongWord;
Note | None documented |
---|
function RPi3TemperatureGetCurrent(TemperatureId:LongWord):LongWord;
Note | None documented |
---|
function RPi3TemperatureGetMaximum(TemperatureId:LongWord):LongWord;
Note | None documented |
---|
function RPi3GPUMemoryAllocate(Length,Alignment,Flags:LongWord):THandle;
Note | None documented |
---|
function RPi3GPUMemoryRelease(Handle:THandle):LongWord;
Note | None documented |
---|
function RPi3GPUMemoryLock(Handle:THandle):LongWord;
Note | None documented |
---|
function RPi3GPUMemoryUnlock(Handle:THandle):LongWord;
Note | None documented |
---|
function RPi3GPUExecuteCode(Address:Pointer; R0,R1,R2,R3,R4,R5:LongWord):LongWord;
Note | None documented |
---|
function RPi3DispmanxHandleGet(Resource:THandle):THandle;
Note | None documented |
---|
function RPi3EDIDBlockGet(Block:LongWord; Buffer:Pointer; Length:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferAllocate(Alignment:LongWord; var Address,Length:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferRelease:LongWord;
Note | None documented |
---|
function RPi3FramebufferSetState(State:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferGetDimensions(var Width,Height,Top,Bottom,Left,Right:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferGetPhysical(var Width,Height:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferSetPhysical(var Width,Height:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferTestPhysical(var Width,Height:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferGetVirtual(var Width,Height:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferSetVirtual(var Width,Height:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferTestVirtual(var Width,Height:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferGetDepth(var Depth:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferSetDepth(var Depth:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferTestDepth(var Depth:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferGetPixelOrder(var Order:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferSetPixelOrder(var Order:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferTestPixelOrder(var Order:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferGetAlphaMode(var Mode:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferSetAlphaMode(var Mode:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferTestAlphaMode(var Mode:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferGetPitch:LongWord;
Note | None documented |
---|
function RPi3FramebufferGetOffset(var X,Y:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferSetOffset(var X,Y:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferTestOffset(var X,Y:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferGetOverscan(var Top,Bottom,Left,Right:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferSetOverscan(var Top,Bottom,Left,Right:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferTestOverscan(var Top,Bottom,Left,Right:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferGetPalette(Buffer:Pointer; Length:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferSetPalette(Start,Count:LongWord; Buffer:Pointer; Length:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferTestPalette(Start,Count:LongWord; Buffer:Pointer; Length:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferTestVsync:LongWord;
Note | None documented |
---|
function RPi3FramebufferSetVsync:LongWord;
Note | None documented |
---|
function RPi3FramebufferSetBacklight(Brightness:LongWord):LongWord;
Note | None documented |
---|
function RPi3TouchGetBuffer(var Address:LongWord):LongWord;
Note | None documented |
---|
function RPi3VirtualGPIOGetBuffer(var Address:LongWord):LongWord;
Note | None documented |
---|
function RPi3CursorSetDefault:LongWord;
Note | None documented |
---|
function RPi3CursorSetInfo(Width,Height,HotspotX,HotspotY:LongWord; Pixels:Pointer; Length:LongWord):LongWord;
Note | None documented |
---|
function RPi3CursorSetState(Enabled:Boolean; X,Y:LongWord; Relative:Boolean):LongWord;
Relative | X, Y is relative to Display (Virtual) not Framebuffer (Physical) |
---|
function RPi3DMAGetChannels:LongWord;
Note | None documented |
---|
function RPi3VirtualGPIOInputGet(Pin:LongWord):LongWord;
Note | None documented |
---|
function RPi3VirtualGPIOOutputSet(Pin,Level:LongWord):LongWord;
Note | None documented |
---|
function RPi3VirtualGPIOFunctionSelect(Pin,Mode:LongWord):LongWord;
Note | None documented |
---|
RPi3 thread functions
procedure RPi3SchedulerInit;
Note | None documented |
---|
procedure RPi3SchedulerStart(CPUID:LongWord);
Note | None documented |
---|
procedure RPi3SecondaryBoot(CPUID:LongWord);
Note | None documented |
---|
RPi3 IRQ functions
function RPi3DispatchIRQ(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;
Note | Called by ARMv8IRQHandler in PlatformARMv8
A DataMemoryBarrier is executed before and after calling this function |
---|
function RPi3HandleIRQ(Number,CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;
Note | None documented |
---|
RPi3 FIQ functions
function RPi3DispatchFIQ(CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;
Note | Called by ARMv8FIQHandler in PlatformARMv8
A DataMemoryBarrier is executed before and after calling this function |
---|
function RPi3HandleFIQ(Number,CPUID:LongWord; Thread:TThreadHandle):TThreadHandle;
Note | None documented |
---|
RPi3 SWI functions
function RPi3DispatchSWI(CPUID:LongWord; Thread:TThreadHandle; Request:PSystemCallRequest):TThreadHandle;
Note | Called by ARMv8SoftwareInterruptHandler in PlatformARMv8
A DataMemoryBarrier is executed before and after calling this function |
---|
RPi3 clock functions
procedure RPi3ClockInterrupt(Parameter:Pointer);
Note | This schedules another clock interrupt to occur CLOCK_CYCLES_PER_TICK in the future, then updates ClockTicks and ClockSeconds and checks for timers to trigger. |
---|
procedure RPi3ClockUpdate(Cycles:LongWord; var Last:LongWord);
Cycles | Number of cycles after which the timer interrupt is to be triggered |
---|---|
Note | This refers to native clock cycles as specified by CLOCK_FREQUENCY |
RPi3 ccheduler functions
function RPi3SchedulerInterrupt(CPUID:LongWord; Thread:TThreadHandle; Parameter:Pointer):TThreadHandle;
Note | This schedules another scheduler interrupt to occur SCHEDULER_CLOCKS_PER_INTERRUPT in the future, then checks for threads to wakeup or timeout and the next thread to schedule. |
---|
procedure RPi3SchedulerUpdate(Cycles:LongWord; var Last:LongWord);
Cycles | Number of cycles after which the scheduler interrupt is to be triggered |
---|---|
Note | This refers to native clock cycles as specified by RPI3_GENERIC_TIMER_FREQUENCY |
procedure RPi3SchedulerSystemCall(Request:PSystemCallRequest);
Note | This is registered to receive requests for the SYSTEM_CALL_CONTEXT_SWITCH and will perform a context switch from within an SWI |
---|
RPi3 framebuffer functions
function RPi3FramebufferDeviceAllocate(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;
Note | None documented |
---|
function RPi3FramebufferDeviceAllocateAlt(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;
Note | None documented |
---|
function RPi3FramebufferDeviceRelease(Framebuffer:PFramebufferDevice):LongWord;
Note | None documented |
---|
function RPi3FramebufferDeviceBlank(Framebuffer:PFramebufferDevice; Blank:Boolean):LongWord;
Note | None documented |
---|
function RPi3FramebufferDeviceCommit(Framebuffer:PFramebufferDevice; Address,Size,Flags:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferDeviceSetBacklight(Framebuffer:PFramebufferDevice; Brightness:LongWord):LongWord;
Note | None documented |
---|
function RPi3FramebufferDeviceSetProperties(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;
Note | None documented |
---|
RPi3 helper functions
procedure RPi3Wait; assembler; nostackframe;
Note | None documented |
---|
procedure RPi3LongWait; assembler; nostackframe;
Note | None documented |
---|
procedure RPi3ShortWait; assembler; nostackframe;
Note | None documented |
---|
procedure RPi3SlowBlink; assembler; nostackframe;
Note | None documented |
---|
procedure RPi3FastBlink; assembler; nostackframe;
Note | None documented |
---|
procedure RPi3BootBlink; assembler; nostackframe;
Note | None documented |
---|
function RPi3ConvertPowerIdRequest(PowerId:LongWord):LongWord;
Note | None documented |
---|
function RPi3ConvertPowerStateRequest(PowerState:LongWord):LongWord;
Note | None documented |
---|
function RPi3ConvertPowerStateResponse(PowerState:LongWord):LongWord;
Note | None documented |
---|
function RPi3ConvertClockIdRequest(ClockId:LongWord):LongWord;
Note | None documented |
---|
function RPi3ConvertClockStateRequest(ClockState:LongWord):LongWord;
Note | None documented |
---|
function RPi3ConvertClockStateResponse(ClockState:LongWord):LongWord;
Note | None documented |
---|
function RPi3ConvertVoltageIdRequest(VoltageId:LongWord):LongWord;
Note | None documented |
---|
function RPi3ConvertTemperatureIdRequest(TemperatureId:LongWord):LongWord;
Note | None documented |
---|
Return to Unit Reference