Difference between revisions of "Unit PL031"

From Ultibo.org
Jump to: navigation, search
 
(2 intermediate revisions by the same user not shown)
Line 16: Line 16:
 
----
 
----
  
''To be documented''
+
 
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL031 specific constants''' <code> PL031_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL031_RTC_DESCRIPTION = 'ARM PrimeCell PL031 Real Time Clock';</code>
 +
| Description of PL031 device
 +
|-
 +
|colspan="2"|&nbsp;
 +
|-
 +
| <code>PL031_MIN_TIME = TIME_TICKS_TO_1970;</code>
 +
| Time starts at 01/01/1970 00:00:00 (MM/DD/YY HH:MM:SS)
 +
|-
 +
| <code>PL031_MAX_TIME = 137919572470000000;</code>
 +
| Time ends at 19/1/2038 03:14:07 (MM/DD/YY HH:MM:SS)
 +
|-
 +
|}
 +
</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;">'''PL031 RTC control register''' <code> PL031_RTC_CR_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL031_RTC_CR_EN = (1 shl 0);</code>
 +
| If set to 1, the RTC is enabled. Once it is enabled, any writes to this bit have no effect on the RTC until a system reset. A read returns the status of the RTC.
 +
|-
 +
|}
 +
</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;">'''PL031 RTC interrupt mask set and clear register''' <code> PL031_RTC_IMSC_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL031_RTC_IMSC_INTR_SET = (1 shl 0);</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
| <code>PL031_RTC_IMSC_INTR_CLEAR = (0 shl 0);</code>
 +
| &nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL031 RTC raw interrupt status register''' <code> PL031_RTC_RIS_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL031_RTC_RIS_INTR = (1 shl 0);</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL031 RTC masked interrupt status register''' <code> PL031_RTC_MIS_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL031_RTC_MIS_INTR = (1 shl 0);</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
 +
<div class="toccolours mw-collapsible mw-collapsed" style="border: 1; font-family: arial; padding-top: 20px; padding-bottom: 15px;">
 +
<div style="font-size: 14px; padding-left: 12px;">'''PL031 RTC interrupt clear register''' <code> PL031_RTC_ICR_* </code></div>
 +
<div class="mw-collapsible-content" style="text-align: left; padding-left: 5px;">
 +
{| class="wikitable" style="font-size: 14px; background: white;"
 +
|-
 +
| <code>PL031_RTC_ICR_INTR = (1 shl 0);</code>
 +
| style="width: 50%;"|&nbsp;
 +
|-
 +
|}
 +
</div></div>
 +
<br />
  
 
=== Type definitions ===
 
=== Type definitions ===
Line 103: Line 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 PL031RTCCreate(Address:LongWord; const Name:String; IRQ:LongWord):PRTCDevice;</pre>
+
<pre style="border: 0; padding-bottom:0px;">function PL031RTCCreate(Address:PtrUInt; const Name:String; IRQ:LongWord):PRTCDevice;</pre>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create, register and start a new PL031 RTC device which can be accessed using the RTC API</div>
 
<div style="font-size: 14px; padding-left: 12px;">'''Description:''' Create, register and start a new PL031 RTC device which can be accessed using the RTC API</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;"
 
|-
 
|-
! '''Address'''
+
! Address
 
| The address of the PL031 registers
 
| The address of the PL031 registers
 
|-
 
|-
! '''Name'''
+
! Name
 
| The text description of this device which will show in the device list (Optional)
 
| The text description of this device which will show in the device list (Optional)
 
|-
 
|-
! '''IRQ'''
+
! IRQ
 
| The interrupt number for the PL031
 
| The interrupt number for the PL031
 
|-
 
|-
! '''Return'''
+
! Return
 
| Pointer to the new RTC device or nil if the RTC device could not be created
 
| Pointer to the new RTC device or nil if the RTC device could not be created
 
|-
 
|-
Line 129: Line 206:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''RTC'''
+
! RTC
 
| The RTC device to destroy
 
| The RTC device to destroy
 
|-
 
|-
! '''Return'''
+
! Return
 
| ERROR_SUCCESS if completed or another error code on failure
 
| ERROR_SUCCESS if completed or another error code on failure
 
|-
 
|-
Line 147: Line 224:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use RTCDeviceStart instead
+
| Not intended to be called directly by applications, use RTCDeviceStart instead.
 
|-
 
|-
 
|}
 
|}
Line 159: Line 236:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use RTCDeviceStop instead
+
| Not intended to be called directly by applications, use RTCDeviceStop instead.
 
|-
 
|-
 
|}
 
|}
Line 171: Line 248:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use RTCDeviceGetTime instead
+
| Not intended to be called directly by applications, use RTCDeviceGetTime instead.
 
|-
 
|-
 
|}
 
|}
Line 183: Line 260:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
| Not intended to be called directly by applications, use RTCDeviceSetTime instead
+
| Not intended to be called directly by applications, use RTCDeviceSetTime instead.
 
|-
 
|-
 
|}
 
|}
Line 198: Line 275:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-
Line 210: Line 287:
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
{| class="wikitable" style="font-size: 14px; background: white;"
 
|-
 
|-
! '''Note'''
+
! Note
 
| None documented
 
| None documented
 
|-
 
|-

Latest revision as of 04:59, 17 June 2021

Return to Unit Reference


Description


ARM PrimeCell PL031 Real Time Clock Driver unit

The PL031 is a simple memory mapped Real Time Clock (RTC) device that supports a single 32-bit time counter based on the Unix time format which starts at 1 Jan 1970 and runs out at 19 Jan 2038.

The device also includes a single alarm value which can trigger an interrupt when the selected time is reached.

This driver currently does not support reading or setting the alarm value.

Constants



PL031 specific constants PL031_*
PL031_RTC_DESCRIPTION = 'ARM PrimeCell PL031 Real Time Clock'; Description of PL031 device
 
PL031_MIN_TIME = TIME_TICKS_TO_1970; Time starts at 01/01/1970 00:00:00 (MM/DD/YY HH:MM:SS)
PL031_MAX_TIME = 137919572470000000; Time ends at 19/1/2038 03:14:07 (MM/DD/YY HH:MM:SS)


PL031 RTC control register PL031_RTC_CR_*
PL031_RTC_CR_EN = (1 shl 0); If set to 1, the RTC is enabled. Once it is enabled, any writes to this bit have no effect on the RTC until a system reset. A read returns the status of the RTC.


PL031 RTC interrupt mask set and clear register PL031_RTC_IMSC_*
PL031_RTC_IMSC_INTR_SET = (1 shl 0);  
PL031_RTC_IMSC_INTR_CLEAR = (0 shl 0);  


PL031 RTC raw interrupt status register PL031_RTC_RIS_*
PL031_RTC_RIS_INTR = (1 shl 0);  


PL031 RTC masked interrupt status register PL031_RTC_MIS_*
PL031_RTC_MIS_INTR = (1 shl 0);  


PL031 RTC interrupt clear register PL031_RTC_ICR_*
PL031_RTC_ICR_INTR = (1 shl 0);  


Type definitions



PL031 real time clock (RTC) registers

PPL031RTCRegisters = ^TPL031RTCRegisters;

TPL031RTCRegisters = record

Note: Layout of the PL031 registers (See: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0224b/i1005653.html)
DR:LongWord; Data register
MR:LongWord; Match register
LR:LongWord; Load register
CR:LongWord; Control register
IMSC:LongWord; Interrupt mask set and clear register
RIS:LongWord; Raw interrupt status register
MIS:LongWord; Masked interrupt status register
ICR:LongWord; Interrupt clear register

PL031 real time clock (RTC)

PPL031RTC = ^TPL031RTC;

TPL031RTC = record

RTC Properties
RTC:TRTCDevice;  
PL031 Properties
IRQ:LongWord;  
Registers:PPL031RTCRegisters; Device registers
Statistics Properties
InterruptCount:LongWord; Number of interrupt requests received by the device


Public variables


None defined

Function declarations



PL031 functions

function PL031RTCCreate(Address:PtrUInt; const Name:String; IRQ:LongWord):PRTCDevice;
Description: Create, register and start a new PL031 RTC device which can be accessed using the RTC API
Address The address of the PL031 registers
Name The text description of this device which will show in the device list (Optional)
IRQ The interrupt number for the PL031
Return Pointer to the new RTC device or nil if the RTC device could not be created


function PL031RTCDestroy(RTC:PRTCDevice):LongWord;
Description: Stop, deregister and destroy a PL031 RTC device created by this driver
RTC The RTC device to destroy
Return ERROR_SUCCESS if completed or another error code on failure


PL031 RTC functions

function PL031RTCStart(RTC:PRTCDevice):LongWord;
Description: Implementation of RTCDeviceStart API for PL031 RTC
Note Not intended to be called directly by applications, use RTCDeviceStart instead.


function PL031RTCStop(RTC:PRTCDevice):LongWord;
Description: Implementation of RTCDeviceStop API for PL031 RTC
Note Not intended to be called directly by applications, use RTCDeviceStop instead.


function PL031RTCGetTime(RTC:PRTCDevice):Int64;
Description: Implementation of RTCDeviceGetTime API for PL031 RTC
Note Not intended to be called directly by applications, use RTCDeviceGetTime instead.


function PL031RTCSetTime(RTC:PRTCDevice; const Time:Int64):Int64;
Description: Implementation of RTCDeviceSetTime API for PL031 RTC
Note Not intended to be called directly by applications, use RTCDeviceSetTime instead.


PL031 helper functions

function PL031FileTimeToRTCTime(RTC:PRTCDevice; const FileTime:Int64; var RTCTime:LongWord):Boolean;
Description: Convert a FileTime value in 100 nanosecond ticks since 1 January 1601 to the time format of the PL031 RTC which is seconds since 1 January 1970
Note None documented


function PL031RTCTimeToFileTime(RTC:PRTCDevice; RTCTime:LongWord; var FileTime:Int64):Boolean;
Description: Convert a PL031 RTC time value in seconds since 1 January 1970 to the FileTime format which is 100 nanosecond ticks since 1 January 1601
Note None documented


Return to Unit Reference