Difference between revisions of "Unit PlatformRPi2"
(One intermediate revision by the same user not shown) | |||
Line 182: | Line 182: | ||
| <code>RPI2_KERNEL_COMMAND = 'cmdline.txt';</code> | | <code>RPI2_KERNEL_COMMAND = 'cmdline.txt';</code> | ||
| | | | ||
+ | |- | ||
+ | |colspan="2"|<code>RPI2_FIRMWARE_FILES = 'bootcode.bin,start.elf,fixup.dat,armstub32-rpi2.bin,armstub32-rpi3.bin';</code> | ||
+ | |- | ||
+ | |colspan="2"|<code>RPI2_DTB_FILES = 'bcm2709-rpi-2-b.dtb,bcm2709-rpi-cm2.dtb,bcm2710-rpi-2-b.dtb,bcm2710-rpi-3-b.dtb,bcm2710-rpi-3-b-plus.dtb,bcm2710-rpi-cm3.dtb,bcm2710-rpi-zero-2.dtb,bcm2710-rpi-zero-2-w.dtb';</code> | ||
|- | |- | ||
|} | |} | ||
Line 2,176: | Line 2,180: | ||
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | <div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 0px; padding-bottom: 15px;"> | ||
<pre style="border: 0; padding-bottom:0px;">function RPi2FramebufferDeviceSetBacklight(Framebuffer:PFramebufferDevice; Brightness:LongWord):LongWord;</pre> | <pre style="border: 0; padding-bottom:0px;">function RPi2FramebufferDeviceSetBacklight(Framebuffer:PFramebufferDevice; Brightness:LongWord):LongWord;</pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | <div style="font-size: 14px; padding-left: 12px;">'''Description:''' To be documented</div> | ||
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> | <div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;"> |
Latest revision as of 05:09, 23 November 2022
Return to Unit Reference
Description
Ultibo Platform Interface unit for Raspberry Pi 2
The RPi2 B has the Power LED connected to GPIO Pin 35 (Activity LED is now on GPIO Pin 47).
The RPi3 B has the Activity LED connected to the GPU, access is via a Virtual GPIO (Power LED is only accessible via the GPIO expander driver).
The RPi3 B+ has the Activity LED connected to GPIO Pin 29 (Power LED is only accessible via the GPIO expander driver).
The RPi Zero2W has the Activity LED connected to GPIO Pin 29.
Constants
RPI2_VCIO_*
RPI2_VCIO_ALIAS = BCM2836_VCIO_ALIAS;
|
The VCIO Alias (For ARM Physcial to VC IO translation) |
RPI2_VCBUS_*
RPI2_VCBUS_ALIAS = BCM2836_VCBUS_C_ALIAS;
|
The currently selected VCBUS Alias (For ARM Physcial to VC Bus translation) |
RPI2_SECURE_*
RPI2_SECURE_BOOT = $00000001;
|
If 1 then startup will attempt to switch back to secure world during boot process (Moved to ARMSecureBoot) |
RPI2_SECURE_BOOT_OFFSET = $000000D4;
|
The address of the Secure Boot marker in the ARM boot stub |
RPI2_SECURE_BOOT_MARKER = $58495052;
|
The Secure Boot marker (ASCII "RPIX") |
RPI2_STARTUP_*
RPI2_STARTUP_ADDRESS = $00008000;
|
Address of StartupHandler on Reset (Obtain from linker) |
RPI2_PAGE_TABLE_*
RPI2_PAGE_TABLE_BASE = $00004000;
|
Place the first level Page Table after the interrupt vectors at 0x00001000 and before the code start at 0x00008000 |
RPI2_PAGE_TABLE_SIZE = SIZE_16K;
|
ARM Cortex A7 first level Page Table is exactly 16KB in size (4096 32 bit (4 byte) entries) |
RPI2_VECTOR_TABLE_*
RPI2_VECTOR_TABLE_BASE = $00001000;
|
Place the Interrupt Vector Table at 0x00001000 before the code start at 0x00008000 |
RPI2_VECTOR_TABLE_SIZE = SIZE_64;
|
The Interrupt Vector Table is exactly 64 bytes (16 32 bit (4 byte) entries) |
RPI2_VECTOR_TABLE_COUNT = 8;
|
The Interrupt Vector Table contains 8 entries on an ARMv7 device |
RPI2_CPU_*
RPI2_CPU_COUNT = BCM2836_CPU_COUNT;
|
|
RPI2_CPU_BOOT = CPU_ID_0;
|
|
RPI2_CPU_MASK = CPU_AFFINITY_0 or CPU_AFFINITY_1 or CPU_AFFINITY_2 or CPU_AFFINITY_3;
|
RPI2_IRQ_*, RPI2_FIQ_*
RPI2_IRQ_START = 0;
|
System wide IRQs start at zero |
RPI2_IRQ_ROUTING = CPU_ID_0;
|
Route system wide IRQs to CPU0 |
RPI2_FIQ_ROUTING = CPU_ID_0;
|
Route system wide FIQs to CPU0 |
RPI2_IRQ_LOCAL_START = BCM2836_GPU_IRQ_COUNT + BCM2836_ARM_IRQ_COUNT;
|
Local IRQs start after GPU and ARM IRQs |
RPI2_SWI_*
RPI2_SWI_COUNT = 256;
|
Number of available SWI entries |
RPI2_*_TIMER_*
RPI2_CORE_TIMER_PRESCALER = $06AAAAAB;
|
Divide the Crystal Clock by 19.2 to give a 1MHz Core Timer |
RPI2_CORE_TIMER_FREQUENCY = 1000000;
|
The Core Timer frequency from the prescaler setting above |
RPI2_GENERIC_TIMER_FREQUENCY = 1000000;
|
The ARM Generic Timer frequency from the prescaler setting above |
RPI2_KERNEL_*
RPI2_KERNEL_NAME = 'kernel7.img';
|
|
RPI2_KERNEL_CONFIG = 'config.txt';
|
|
RPI2_KERNEL_COMMAND = 'cmdline.txt';
|
|
RPI2_FIRMWARE_FILES = 'bootcode.bin,start.elf,fixup.dat,armstub32-rpi2.bin,armstub32-rpi3.bin';
| |
RPI2_DTB_FILES = 'bcm2709-rpi-2-b.dtb,bcm2709-rpi-cm2.dtb,bcm2710-rpi-2-b.dtb,bcm2710-rpi-3-b.dtb,bcm2710-rpi-3-b-plus.dtb,bcm2710-rpi-cm3.dtb,bcm2710-rpi-zero-2.dtb,bcm2710-rpi-zero-2-w.dtb';
|
RPI2_GPIO_PWRLED_*
GPIO Pin 35 | |
Note: GPIO Pin 35 on the RPi2 is set on boot to Pull Up/Down Enable which must be cleared before using the pin | |
RPI2_GPIO_PWRLED_GPFSEL = BCM2836_GPFSEL3;
|
GPFSEL register for PWR LED |
RPI2_GPIO_PWRLED_GPSET = BCM2836_GPSET1;
|
GPSET register for PWR LED |
RPI2_GPIO_PWRLED_GPCLR = BCM2836_GPCLR1;
|
GPCLR register for PWR LED |
RPI2_GPIO_PWRLED_GPFSHIFT = 15;
|
GPFSEL register shift for PWR LED |
RPI2_GPIO_PWRLED_GPFMASK = BCM2836_GPFSEL_MASK;
|
GPFSEL register mask for PWR LED |
RPI2_GPIO_PWRLED_GPSHIFT = (35 - 32);
|
GPSET/GPCLR register shift for PWR LED |
RPI2_GPIO_PWRLED_GPMASK = BCM2836_GPSET_MASK;
|
GPSET/GPCLR register mask for PWR LED |
GPIO Pin 35 on RPi2 | |
See: http://www.raspberrypi.org/forums/viewtopic.php?t=72260 | |
See also for how to control GPPUD etc: http://wiki.osdev.org/Raspberry_Pi_Bare_Bones |
RPI2_GPIO_ACTLED_*
GPIO Pin 47 | |
Note: GPIO Pin 47 on the RPi2 is Pull High instead of Pull Low, to turn on the LED use RPI2_GPIO_ACTLED_GPSET instead of RPI2_GPIO_ACTLED_GPCLR | |
RPI2_GPIO_ACTLED_GPFSEL = BCM2836_GPFSEL4;
|
GPFSEL register for ACT LED |
RPI2_GPIO_ACTLED_GPSET = BCM2836_GPSET1;
|
GPSET register for ACT LED |
RPI2_GPIO_ACTLED_GPCLR = BCM2836_GPCLR1;
|
GPCLR register for ACT LED |
RPI2_GPIO_ACTLED_GPFSHIFT = 21;
|
GPFSEL register shift for ACT LED |
RPI2_GPIO_ACTLED_GPFMASK = BCM2836_GPFSEL_MASK;
|
GPFSEL register mask for ACT LED |
RPI2_GPIO_ACTLED_GPSHIFT = (47 - 32);
|
GPSET/GPCLR register shift for ACT LED |
RPI2_GPIO_ACTLED_GPMASK = BCM2836_GPSET_MASK;
|
GPSET/GPCLR register mask for ACT LED |
RPI2_MAILBOX_*
RPI2_MAILBOX_TIMEOUT = 100;
|
Default timeout to wait for mailbox calls to complete (Milliseconds) |
RPI2_MAILBOX_TIMEOUT_EX = 1000;
|
Extended timeout to wait for mailbox calls to complete (Milliseconds) |
RPI2_LOCAL_MAILBOX_*
RPI2_LOCAL_MAILBOX_TIMEOUT = 100;
|
Default timeout to wait for local mailbox calls to complete (Milliseconds) |
RPI2_FRAMEBUFFER_*
RPI2_FRAMEBUFFER_DESCRIPTION = 'BCM2836 Framebuffer';
|
Type definitions
None defined
Public variables
RPi2 specific Ultibo variables
RPi2Initialized:Boolean;
|
RPi2CNTVOFFLow:LongWord = 0;
|
The low 32 bits of the Virtual Counter Offset register at boot time (CPU0 only) (Set by Startup). Must be initialized to remain in .data or else rewritten to zero with .bss |
RPi2CNTVOFFHigh:LongWord = 0;
|
The high 32 bits of the Virtual Counter Offset register at boot time (CPU0 only) (Set by Startup). Must be initialized to remain in .data or else rewritten to zero with .bss |
Timer variables
TimerRegisters:PBCM2836SystemTimerRegisters;
|
Mailbox variables
Mailbox0Registers:PBCM2836Mailbox0Registers;
|
Mailbox1Registers:PBCM2836Mailbox1Registers;
|
Interrupt variables
InterruptRegisters:PBCM2836InterruptRegisters;
|
InterruptEntries:array[0..(BCM2836_GPU_IRQ_COUNT + BCM2836_ARM_IRQ_COUNT - 1)] of PInterruptEntry;
|
LocalInterruptEntries:array[RPI2_IRQ_LOCAL_START..(BCM2836_IRQ_COUNT - 1),0..(RPI2_CPU_COUNT - 1)] of PInterruptEntry;
|
System call
SystemCallEntries:array[0..RPI2_SWI_COUNT - 1] of TSystemCallEntry;
|
IRQ/FIQ
IRQEnabled:array[0..2] of LongWord;
|
3 groups of IRQs to Enable/Disable (See: TBCM2836InterruptRegisters) |
FIQEnabled:LongWord;
|
The single IRQ number to Enable as FIQ instead (See: TBCM2836InterruptRegisters) |
LocalIRQEnabled:array[0..(RPI2_CPU_COUNT - 1)] of LongWord;
|
1 group of local IRQs to Enable/Disable per CPU (See: TBCM2836ARMLocalRegisters) |
LocalFIQEnabled:array[0..(RPI2_CPU_COUNT - 1)] of LongWord;
|
1 group of local FIQs to Enable/Disable per CPU (See: TBCM2836ARMLocalRegisters) |
Watchdog variables
WatchdogRegisters:PBCM2836PMWatchdogRegisters;
|
ARM local
ARMLocalRegisters:PBCM2836ARMLocalRegisters;
|
Virtual GPIO
VirtualGPIOBuffer:TBCM2837VirtualGPIOBuffer;
|
Function declarations
Initialization functions
procedure RPi2Init;
Note | None documented |
---|
procedure RPi2SecondarySwitch; assembler; nostackframe;
Note | None documented |
---|
procedure RPi2SecondarySecure; assembler; nostackframe;
Note | None documented |
---|
procedure RPi2SecondaryHandler; assembler; nostackframe;
Note | None documented |
---|
RPi2 platform functions
procedure RPi2SMPInit;
Note | None documented |
---|
procedure RPi2BoardInit;
Note | None documented |
---|
procedure RPi2MemoryInit;
Note | None documented |
---|
procedure RPi2ClockInit;
Note | None documented |
---|
procedure RPi2PowerInit;
Note | None documented |
---|
procedure RPi2MailboxInit;
Note | None documented |
---|
procedure RPi2InterruptInit;
Note | None documented |
---|
procedure RPi2PeripheralInit;
Note | None documented |
---|
procedure RPi2FramebufferInit;
Note | None documented |
---|
procedure RPi2PageTableInit;
Note | None documented |
---|
procedure RPi2PowerLEDEnable;
Note | None documented |
---|
procedure RPi2PowerLEDOn;
Note | None documented |
---|
procedure RPi2PowerLEDOff;
Note | None documented |
---|
procedure RPi2ActivityLEDEnable;
Note | None documented |
---|
procedure RPi2ActivityLEDOn;
Note | None documented |
---|
procedure RPi2ActivityLEDOff;
Note | None documented |
---|
function RPi2MailboxReceive(Mailbox,Channel:LongWord):LongWord;
Note | Data = first 28 bits, Channel = last 4 bits |
---|
procedure RPi2MailboxSend(Mailbox,Channel,Data:LongWord);
Note | Data = first 28 bits, Channel = last 4 bits |
---|
function RPi2MailboxCall(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 RPi2MailboxCallEx(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 RPi2MailboxPropertyCall(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 RPi2MailboxPropertyCallEx(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 RPi2MailboxPropertyTag(Tag:LongWord; Data:Pointer; Size:LongWord):LongWord;
Data | Data does not need to include mailbox property channel header or footer. Data pointer does not need any specific alignment or caching attributes. |
---|---|
Size | Size must be a multiple of 4 bytes. Size must include the size of the request and response which use the same buffer. |
function RPi2RequestExIRQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
Note | None documented |
---|
function RPi2ReleaseExIRQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
Note | None documented |
---|
function RPi2RequestExFIQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
Note | None documented |
---|
function RPi2ReleaseExFIQ(CPUID,Number:LongWord; Handler:TInterruptHandler; HandlerEx:TInterruptExHandler; Parameter:Pointer):LongWord;
Note | None documented |
---|
function RPi2RegisterInterrupt(Number,Mask,Priority,Flags:LongWord; Handler:TSharedInterruptHandler; Parameter:Pointer):LongWord;
Note | None documented |
---|
function RPi2DeregisterInterrupt(Number,Mask,Priority,Flags:LongWord; Handler:TSharedInterruptHandler; Parameter:Pointer):LongWord;
Note | None documented |
---|
function RPi2RegisterSystemCallEx(CPUID,Number:LongWord; Handler:TSystemCallHandler; HandlerEx:TSystemCallExHandler):LongWord;
Note | None documented |
---|
function RPi2DeregisterSystemCallEx(CPUID,Number:LongWord; Handler:TSystemCallHandler; HandlerEx:TSystemCallExHandler):LongWord;
Note | None documented |
---|
function RPi2GetInterruptEntry(Number,Instance:LongWord; var Interrupt:TInterruptEntry):LongWord;
Note | None documented |
---|
function RPi2GetLocalInterruptEntry(CPUID,Number,Instance:LongWord; var Interrupt:TInterruptEntry):LongWord;
Note | None documented |
---|
function RPi2GetSystemCallEntry(Number:LongWord):TSystemCallEntry;
Note | None documented |
---|
function RPi2SystemRestart(Delay:LongWord):LongWord;
Note | None documented |
---|
function RPi2SystemShutdown(Delay:LongWord):LongWord;
Note | None documented |
---|
function RPi2SystemGetCommandLine:String;
Note | None documented |
---|
function RPi2CPUGetMemory(var Address:PtrUInt; var Length:UInt64):LongWord;
Note | None documented |
---|
function RPi2GPUGetState:LongWord;
Note | None documented |
---|
function RPi2GPUGetMemory(var Address:PtrUInt; var Length:UInt64):LongWord;
Note | None documented |
---|
function RPi2BoardGetModel:LongWord;
Note | None documented |
---|
function RPi2BoardGetSerial:Int64;
Note | None documented |
---|
function RPi2BoardGetRevision:LongWord;
Note | None documented |
---|
function RPi2BoardGetMACAddress:String;
Note | None documented |
---|
function RPi2FirmwareGetRevision:LongWord;
Note | None documented |
---|
function RPi2FirmwareGetThrottled:LongWord;
Note | None documented |
---|
function RPi2PowerGetWait(PowerId:LongWord):LongWord;
Note | None documented |
---|
function RPi2PowerGetState(PowerId:LongWord):LongWord;
Note | None documented |
---|
function RPi2PowerSetState(PowerId,State:LongWord; Wait:Boolean):LongWord;
Note | Power Lock not required due to Mailbox Property Call serialization |
---|
function RPi2ClockGetCount: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 RPi2ClockGetTotal: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 RPi2ClockGetRate(ClockId:LongWord):LongWord;
Note | None documented |
---|
function RPi2ClockSetRate(ClockId,Rate:LongWord; Turbo:Boolean):LongWord;
Note | None documented |
---|
function RPi2ClockGetState(ClockId:LongWord):LongWord;
Note | None documented |
---|
function RPi2ClockSetState(ClockId,State:LongWord):LongWord;
Note | None documented |
---|
function RPi2ClockGetMinRate(ClockId:LongWord):LongWord;
Note | None documented |
---|
function RPi2ClockGetMaxRate(ClockId:LongWord):LongWord;
Note | None documented |
---|
function RPi2TurboGetState(TurboId:LongWord):LongWord;
Note | None documented |
---|
function RPi2TurboSetState(TurboId,State:LongWord):LongWord;
Note | None documented |
---|
function RPi2VoltageGetValue(VoltageId:LongWord):LongWord;
Note | None documented |
---|
function RPi2VoltageSetValue(VoltageId,Value:LongWord):LongWord;
Note | None documented |
---|
function RPi2VoltageGetMinValue(VoltageId:LongWord):LongWord;
Note | None documented |
---|
function RPi2VoltageGetMaxValue(VoltageId:LongWord):LongWord;
Note | None documented |
---|
function RPi2TemperatureGetCurrent(TemperatureId:LongWord):LongWord;
Note | None documented |
---|
function RPi2TemperatureGetMaximum(TemperatureId:LongWord):LongWord;
Note | None documented |
---|
function RPi2GPUMemoryAllocate(Length,Alignment,Flags:LongWord):THandle;
Note | None documented |
---|
function RPi2GPUMemoryRelease(Handle:THandle):LongWord;
Note | None documented |
---|
function RPi2GPUMemoryLock(Handle:THandle):LongWord;
Note | None documented |
---|
function RPi2GPUMemoryUnlock(Handle:THandle):LongWord;
Note | None documented |
---|
function RPi2GPUExecuteCode(Address:Pointer; R0,R1,R2,R3,R4,R5:LongWord):LongWord;
Note | None documented |
---|
function RPi2DispmanxHandleGet(Resource:THandle):THandle;
Note | None documented |
---|
function RPi2EDIDBlockGet(Block:LongWord; Buffer:Pointer; Length:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferAllocate(Alignment:LongWord; var Address,Length:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferRelease:LongWord;
Note | None documented |
---|
function RPi2FramebufferSetState(State:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferGetDimensions(var Width,Height,Top,Bottom,Left,Right:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferGetPhysical(var Width,Height:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferSetPhysical(var Width,Height:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferTestPhysical(var Width,Height:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferGetVirtual(var Width,Height:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferSetVirtual(var Width,Height:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferTestVirtual(var Width,Height:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferGetDepth(var Depth:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferSetDepth(var Depth:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferTestDepth(var Depth:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferGetPixelOrder(var Order:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferSetPixelOrder(var Order:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferTestPixelOrder(var Order:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferGetAlphaMode(var Mode:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferSetAlphaMode(var Mode:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferTestAlphaMode(var Mode:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferGetPitch:LongWord;
Note | None documented |
---|
function RPi2FramebufferGetOffset(var X,Y:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferSetOffset(var X,Y:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferTestOffset(var X,Y:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferGetOverscan(var Top,Bottom,Left,Right:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferSetOverscan(var Top,Bottom,Left,Right:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferTestOverscan(var Top,Bottom,Left,Right:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferGetPalette(Buffer:Pointer; Length:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferSetPalette(Start,Count:LongWord; Buffer:Pointer; Length:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferTestPalette(Start,Count:LongWord; Buffer:Pointer; Length:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferGetLayer(var Layer:LongInt):LongWord;
Note | None documented |
---|
function RPi2FramebufferSetLayer(var Layer:LongInt):LongWord;
Note | None documented |
---|
function RPi2FramebufferTestLayer(var Layer:LongInt):LongWord;
Note | None documented |
---|
function RPi2FramebufferTestVsync:LongWord;
Note | None documented |
---|
function RPi2FramebufferSetVsync:LongWord;
Note | None documented |
---|
function RPi2FramebufferSetBacklight(Brightness:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferGetNumDisplays(var NumDisplays:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferGetDisplayId(DisplayNum:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferSetDisplayNum(DisplayNum:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferGetDisplaySettings(DisplayNum:LongWord; var DisplaySettings:TDisplaySettings):LongWord;
Note | None documented |
---|
function RPi2FramebufferDisplayIdToName(DisplayId:LongWord):String;
Note | None documented |
---|
function RPi2TouchGetBuffer(var Address:PtrUInt):LongWord;
Note | On current firmware versions calling TouchGetBuffer will allocate a buffer from GPU memory and render subsequent calls to TouchSetBuffer ineffective. After an initial call to TouchSetBuffer calls to TouchGetBuffer will always return the CPU allocated buffer. |
---|
function RPi2TouchSetBuffer(Address:PtrUInt):LongWord;
Note | None documented |
---|
function RPi2VirtualGPIOGetBuffer(var Address:PtrUInt):LongWord;
Note | None documented |
---|
function RPi2VirtualGPIOSetBuffer(Address:PtrUInt):LongWord;
Note | None documented |
---|
function RPi2CursorSetDefault:LongWord;
Note | None documented |
---|
function RPi2CursorSetInfo(Width,Height,HotspotX,HotspotY:LongWord; Pixels:Pointer; Length:LongWord):LongWord;
Note | None documented |
---|
function RPi2CursorSetState(Enabled:Boolean; X,Y:LongWord; Relative:Boolean):LongWord;
Relative | X, Y is relative to Display (Virtual) not Framebuffer (Physical). |
---|
function RPi2DMAGetChannels:LongWord;
Note | None documented |
---|
function RPi2VirtualGPIOAllocate:Boolean;
Note | None documented |
---|
function RPi2VirtualGPIOInputGet(Pin:LongWord):LongWord;
Note | None documented |
---|
function RPi2VirtualGPIOOutputSet(Pin,Level:LongWord):LongWord;
Note | None documented |
---|
function RPi2VirtualGPIOFunctionSelect(Pin,Mode:LongWord):LongWord;
Note | None documented |
---|
RPi2 thread functions
procedure RPi2SchedulerInit;
Note | None documented |
---|
procedure RPi2SchedulerStart(CPUID:LongWord);
Note | None documented |
---|
procedure RPi2SecondaryBoot(CPUID:LongWord);
Note | None documented |
---|
RPi2 clock functions
procedure RPi2ClockInterrupt(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 RPi2ClockUpdate(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 |
RPi2 scheduler functions
function RPi2SchedulerInterrupt(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 RPi2SchedulerUpdate(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 RPI2_GENERIC_TIMER_FREQUENCY |
procedure RPi2SchedulerSystemCall(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 |
---|
RPi2 framebuffer functions
function RPi2FramebufferDeviceAllocate(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;
Note | None documented |
---|
function RPi2FramebufferDeviceAllocateAlt(Framebuffer:PFramebufferDevice; Properties:PFramebufferProperties):LongWord;
Note | None documented |
---|
function RPi2FramebufferDeviceRelease(Framebuffer:PFramebufferDevice):LongWord;
Note | None documented |
---|
function RPi2FramebufferDeviceBlank(Framebuffer:PFramebufferDevice; Blank:Boolean):LongWord;
Note | None documented |
---|
function RPi2FramebufferDeviceCommit(Framebuffer:PFramebufferDevice; Address:PtrUInt; Size,Flags:LongWord):LongWord;
Note | None documented |
---|
function RPi2FramebufferDeviceSetBacklight(Framebuffer:PFramebufferDevice; Brightness:LongWord):LongWord;
Note | None documented |
---|
RPi2 helper functions
procedure RPi2Wait; assembler; nostackframe;
Note | None documented |
---|
procedure RPi2LongWait; assembler; nostackframe;
Note | None documented |
---|
procedure RPi2ShortWait; assembler; nostackframe;
Note | None documented |
---|
procedure RPi2SlowBlink; assembler; nostackframe;
Note | None documented |
---|
procedure RPi2FastBlink; assembler; nostackframe;
Note | None documented |
---|
procedure RPi2BootBlink; assembler; nostackframe;
Note | None documented |
---|
procedure RPi2BootOutput(Value:LongWord);
Note | This function is primarily intended for testing QEMU boot because it doesn't initialize the UART and won't work on real hardware.
Based on hexstrings() function by dwelch67 (https://github.com/dwelch67) |
---|
procedure RPi2BootConsoleStart;
Note | None documented |
---|
procedure RPi2BootConsoleWrite(const Value:String);
Note | None documented |
---|
procedure RPi2BootConsoleWriteEx(const Value:String; X,Y:LongWord);
Note | None documented |
---|
function RPi2BootConsoleGetX:LongWord;
Note | None documented |
---|
function RPi2BootConsoleGetY:LongWord;
Note | None documented |
---|
function RPi2ConvertPowerIdRequest(PowerId:LongWord):LongWord;
Note | None documented |
---|
function RPi2ConvertPowerStateRequest(PowerState:LongWord):LongWord;
Note | None documented |
---|
function RPi2ConvertPowerStateResponse(PowerState:LongWord):LongWord;
Note | None documented |
---|
function RPi2ConvertClockIdRequest(ClockId:LongWord):LongWord;
Note | None documented |
---|
function RPi2ConvertClockStateRequest(ClockState:LongWord):LongWord;
Note | None documented |
---|
function RPi2ConvertClockStateResponse(ClockState:LongWord):LongWord;
Note | None documented |
---|
function RPi2ConvertVoltageIdRequest(VoltageId:LongWord):LongWord;
Note | None documented |
---|
function RPi2ConvertTemperatureIdRequest(TemperatureId:LongWord):LongWord;
Note | None documented |
---|
Return to Unit Reference