#include <rb8515_clock.h>
Inherits RulbusDevice.
Generate a clock signal for the time delay module RB8514.
Module RB8515 is a clock signal generator for time delay module RB8514.
It provides four fixed frequency outputs, three identical clock outputs with programmable frequency and a Rulbus interrupt output with programmable frequency.
Output | Description --------------+----------------------------------------------------------- Ffixed | fixed frequencies: | 100 kHz, 1 MHz, 10 MHz and 100 MHz | Fprogrammable | programmable frequencies: | 0 Hz (disabled), 100 Hz, 1 kHz, 10 kHz, 100 kHz, 1 MHz, 10 MHz and 100 MHz. | Finterrupt | programmable Rulbus interrupt frequency: | 0 Hz (disabled), 1 Hz, 5 Hz, 10 Hz, 50 Hz, 100 Hz, 500 Hz, 1 kHz.
When a clock is opened, it is configured as follows:
Here is a small example how you may use a clock module.
Rulbus::RB8515_clock clock( "clock" ); clock.setClockFrequency( 10e6 );
Module RB8515 contains a 100 MHz oscillator, a 10 MHz oscillator, several divider ICs and logic to select the output frequency and to select the interrupt frequency. An on-board jumper selects the oscillator used.
The module has a a control-register to select the programmable clock- and interrupt frequencies and it has a status-registers to read the interrupt status.
Register | Offset Rd/Wr Description --------------+----------------------------------------------------------- Status | 0 read status register | 76543210 | 7 : interrupt pending | 6543210 : not used | Control | 0 write control register | 76543210 | 7 : interrupt enable and /clear pending interrupt | 6 : interrupt enable | 543 : interrupt frequency | 0: disabled | 1: 1 Hz | 2: 5 Hz | 3: 10 Hz | 4: 50 Hz | 5: 100 Hz | 6: 500 Hz | 7: 1 kHz | 210 : clock frequency | 0: disabled | 1: 100 Hz | 2: 1 kHz | 3: 10 kHz | 4: 100 kHz | 5: 1 MHz | 6: 10 MHz | 7: 100 MHz
Public Member Functions | |
Construction | |
public methods | |
RB8515_clock (NameCref name, Addr addr=DEF_ADDR, Rack rack=DEF_RACK) | |
constructor; may throw RulbusOpenError. | |
~RB8515_clock () | |
destructor. | |
Accessors | |
Freq | clockFrequency () const |
the current clock frequency. | |
Freq | interruptFrequency () const |
the current interrupt frequency. | |
bool | isPendingInterrupt () |
true if interrupt is pending; a pending interrupt is cleared. | |
bool | isEnabledInterrupt () const |
true if interrupt is enabled. | |
Mutators | |
void | setClockFrequency (Freq aFrequency) |
set clock frequency; may throw RulbusRangeError. | |
void | setInterruptFrequency (Freq aFrequency) |
set interrupt frequency; may throw RulbusRangeError. | |
void | clearInterrupt () |
clear pending interrupt. | |
bool | disableInterrupt () |
disable interrupt. | |
bool | enableInterrupt (bool enable=true) |
enable or disable interrupt. | |
Protected Member Functions | |
void | getClkFreqCode (Freq aFrequency, IntPtr pCode) const |
map clock frequency to register code; may throw RulbusRangeError. | |
void | getIntFreqCode (Freq aFrequency, IntPtr pCode) const |
map interrupt frequency to register code; may throw RulbusRangeError. | |
void | getFreqCode (Freq aFrequency, const FreqTable *tablePtr, IntPtr pCode) const |
using specified table, map frequency to register code; may throw RulbusRangeError. | |
Construction and Assignment | |
RB8515_clock () | |
prevent default construction | |
RB8515_clock (RB8515_clockCref rhs) | |
prevent copying | |
RB8515_clockRef | operator= (RB8515_clockCref rhs) |
prevent copying | |
Private Types | |
Clock frequency codes | |
enum | { FC_INVALID = -1, FC_0Hz = 0, FC_100Hz, FC_1kHz, FC_10kHz, FC_100kHz, FC_1MHz, FC_10MHz, FC_100MHz } |
Interrupt frequency codes | |
enum | { FI_INVALID = -1, FI_0Hz = 0, FI_1Hz, FI_5kHz, FI_10Hz, FI_50Hz, FI_100Hz, FI_500Hz, FI_1kHz } |
Private Attributes | |
Data | |
Byte | theCtlByte |
control byte | |
Static Private Attributes | |
Register offsets | |
const int | OFF_CR = 0 |
control-register offset | |
const int | OFF_SR = 0 |
status-register offset | |
const int | ADR_WIDTH = OFF_SR + 1 |
address with | |
Masks and shifts | |
const int | MSK_CLKFRQ = 0x07 |
bit-mask clock frequency | |
const int | MSK_INTFRQ = 0x38 |
interrupt frequency | |
const int | MSK_INTENA = 0x40 |
interrupt enable | |
const int | MSK_INTCLRn = 0x80 |
interrupt enable & /clear | |
const int | MSK_INTSTS = 0x80 |
interrupt status | |
const int | SHL_CLKFRQ = 0x00 |
shift left # bits clock freq. | |
const int | SHL_INTFRQ = 0x03 |
shift left # bits interrupt freq. | |
Defaults | |
const Addr | DEF_ADDR = 0xC8 |
default address | |
const Freq | DEF_CLKFRQ = 1e3 |
default clock freq. (1 kHz) | |
const Freq | DEF_INTFRQ = 0e0 |
default interrupt freq. (disable) | |
Tables for frequency--code mapping | |
FreqTable | clkTable [] |
table to map clock frequency to register code. | |
FreqTable | intTable [] |
table to map interrupt frequency to register code. |
|
|
|
|
|
Initial value: { 0 , FC_0Hz << SHL_CLKFRQ, 100e0, FC_100Hz << SHL_CLKFRQ, 1e3, FC_1kHz << SHL_CLKFRQ, 10e3, FC_10kHz << SHL_CLKFRQ, 100e3, FC_100kHz << SHL_CLKFRQ, 1e6, FC_1MHz << SHL_CLKFRQ, 10e6, FC_10MHz << SHL_CLKFRQ, 100e6, FC_100MHz << SHL_CLKFRQ, 0 , FC_INVALID, } |
|
Initial value: { 0 , FI_0Hz << SHL_INTFRQ, 1e0, FI_1Hz << SHL_INTFRQ, 5e0, FI_5kHz << SHL_INTFRQ, 10e0, FI_10Hz << SHL_INTFRQ, 50e0, FI_50Hz << SHL_INTFRQ, 100e0, FI_100Hz << SHL_INTFRQ, 500e0, FI_500Hz << SHL_INTFRQ, 1e3, FI_1kHz << SHL_INTFRQ, 0 , FI_INVALID, } |