Copyright: A. Roth, 2005


SFR
Die Spezialfunktionsregister im 89LPC912

System SFR:

ACC Akkumulator

PSW  Programmstatuswort

B  Register B

DPL  Datenpointer Low-Byte

DPH  Datenpointer High-Byte

SP  Stackpointer

PCON  Powercontrol

PCONA  Powercontrol A

AUXR1  Hilfsregister 1

DIVM  CPU Takt Control

RSTSCR  Reset Source Register

TRIM  Oszillator Trim Register

Interrupt:

IEN0  Interruptfreigabe 0

IEN1  Interruptfreigabe 1

IP0  Interruptpriorität 0

IP0H  Interruptpriorität 0 High

IP1  Interruptpriorität 1

IP1H  Interruptpriorität 1 High

Ports:

P0  Port 0

P1  Port 1

P2  Port 2

P3  Port 3

P0M1  Port 0 Modus 1

P0M2  Port 0 Modus 2

PT0AD  Port 0 Analog/Digital

P1M1  Port 1 Modus 1

P1M2  Port 1 Modus 2

P2M1  Port 2 Modus 1

P2M2  Port 2 Modus 2

P3M1  Port 3 Modus 1

P3M2  Port 3 Modus 2

Timer:

TH0  Timer 0 High-Byte

TL0  Timer 0 Low-Byte

TH1  Timer 1 High-Byte

TL1  Timer 1 Low-Byte

TCON  Timercontrol

TMOD  Timermodus

TAMOD  Timerhilfsmodus

Analog Comparator:

CMP1  Comparator 1 Kontrolle

CMP2  Comparator 2 Kontrolle

Keyboard:

KBCON  Keyboard Kontrollregister

KBMASK  Keyboard Interruptmaske

KBPATN  Keyboard Musterregister

Real Time Clock, RTC:

RTCCON  RTC Kontrollregister

RTCH  RTC High-Byte

RTCL  RTC Low-Byte

SPI Port:

SPCTL  SPI Kontrollregister

SPSTAT  SPI Statusregister

SPDAT  SPI Datenregister

Watchdog:

WDCON  Watchdog Kontrollregister

WDL  Watchdog Nachladeregister

WFEED1  Watchdog Feedregister 1

WFEED2  Watchdog Feedregister 2

Flash Programmierung:

FMCON  Flash Kontrollregister

FMDATA  Flash Datenregister

FMADRL  Flashadresse Low

FMADRH  Flashadresse High

Flash Elements (keine SFR):

UCFG1  User Konfigurationsregister

BOOTVEC  Boot Vector

BOOTSTAT  Boot Status Byte

SEC  Sector Security Byte

MFGID  Herstellerkennung

ID1/2  Chipkennung


Bits
Die SFR-Bits im 89LPC912

AC  Hilfscarry (PSW)

ACC.0 - ACC.7 (Akku)

B.0 - B.7  Register B (B)

CY  Carry (PSW)

EA  Globale Interruptfreigabe (IEN0)

EBO  Brown-out Interruptfreigabe (IEN0)

EC  Comparator Interruptfreigabe (IEN1)

EKBI  Keyboard Interruptfreigabe (IEN1)

ESPI  SPI Interruptfreigabe (IEN1)

ET0  Timer 0 Interruptfreigabe (IEN0)

ET1  Timer 1 Interruptfreigabe (IEN0)

EWDRT  Watchdog Interruptfreigabe (IEN0)

F0  Flip-Flop 0 (PSW)

F1  Flip-Flop 1 (PSW)

OV  Overflow (PSW)

P  Parity Flag (PSW)

PBO  Interruptpriorität für Brown-out (IP0)

PC  Interruptpriorität für Comparator (IP1)

PKBI  Interruptpriorität für Keyboard (IP1)

PSPI  Interruptpriorität für SPI (IP1)

PT0  Interruptpriorität für Timer 0 (IP0)

PT1  Interruptpriorität für Timer 1 (IP0)

PWDRT  Interruptpriorität für Watchdog (IP0)

RS0  Registerbank Select 0 (PSW)

RS1  Registerbank Select 1 (PSW)

T0  Zähler 0 Eingang (P3)

TF0  Timer 0 Überlauf (TCON)

TF1  Timer 1 Überlauf (TCON)

TR0  Timer 0 Run (TCON)

TR1  Timer 1 Run (TCON)


Vektoren
Interrupt-Vektoren im 89LPC912

Adresse	Symbol	Funktion

0000h	Reset	Programmbeginn

000Bh	Timer 0	Timer 0 Interrupt

001Bh	Timer 1	Timer 1 Interrupt

002Bh	Brownout detect	Brown-out Erkennung

003Bh	KBI Interupt	Keyboard Interupt

0043h	Comparator Interrupt	Comparator Interrupt

004Bh	SPI Interrupt	SPI Interrupt

0053h	Watchdog Timer	Watchdog Interrupt

0053h	Realtime Clock	RTC Timer Interrupt

Benutzen Sie die Bezeichnung in der Spalte Symbol, um in Ihrem Programm eine Interruptroutine zu markieren. Der Assembler kennt die Adresse und weist dem Label automatisch die richtige zu. Sie können die Symbolnamen in der 89LPC912.CPU-Datei ändern

Beispiel:

Timer 0:	;Diesem Label wird die Adresse 000Bh zugeordnet

Befehle in der Interruptroutine

reti	;Ende der Interruptroutine


Interrupts
Die Interrupts im 89LPC912

Interruptauslösende Bits

Interruptquelle	Adresse	Bit	SFR
Timer 0	000Bh	TF0	TCON.5
Timer 1	001Bh	TF1	TCON.7
Brown-out	002Bh	BOF	RSTSCR.5
Keyboard	003Bh	KBIF	KBCON.0
Comparator	0043h	CMF1/CMF2	CMP1.0/CMP2.0
SPI	004Bh	SPIF	SPSTAT.7
Watchdog	0053h	WDTOF	WDCON.1
RTC	0053h	RTCF	WDCON.1

Interruptfreigebende Bits

Interruptquelle	Adresse	Bit	SFR
Timer 0	000Bh	ET0	IEN0.1
Timer 1	001Bh	ET1	IEN0.3
Brown-out	002Bh	EBO	IEN0.5
Keyboard	003Bh	EKBI	IEN1.1
Comparator	0043h	EC	IEN1.2
SPI	004Bh	ESPI	IEN1.3
Watchdog/RTC	0053h	EWDRT	IEN0.6

Interruptnamen des Assemblers

Interruptquelle	Adresse	Name
Timer 0 Interrupt	000Bh	Timer 0
Timer 1 Interrupt	001Bh	Timer 1
Brown-out	002Bh	Brownout detect
Keyboard	003Bh	KBI Interrupt
Comparator	0043h	Comparator Interrupt
SPI	004Bh	SPI Interrupt
Watchdog	0053h	Watchdog Timer
RTC Timer	0053h	Realtime Clock

Globale Interruptfreigabe	Bit EA	SFR IEN0.7

____ ♣ ____

Interrupts

Ein Interrupt unterbricht üblicherweise das laufende Programm und reagiert auf ein eingetretenes Ereignis. Diese Ereignisse können extern ausgelöst sein, in konstanten Zeitabständen intern durch einen Timer erzeugt werden oder das Ergebnis der seriellen Kommunikation sein. Bevor jedoch die Interruptroutine bedient wird, wird in jedem Fall der laufende Befehl zu Ende geführt.

Jeder Interrupt hat ein Freigabe-, ein Prioritäts- und ein Auslösebit. Jeder Interrupt kann durch Setzen des Freigabebits künstlich ausgelöst, d.h. simuliert werden. Die Auslösebits werden durch das entsprechende Ereignis gesetzt, unabhängig von der Freigabe des Interrupt. Somit können die Bits durch die Software unabhängig von den Interrupts abgefragt werden. Es kann daher sinnvoll sein, die Auslösebits vor der Freigabe des Interrupt zu löschen.

Interruptvektor

Jeder Interrupt besitzt eine feste Einsprungadresse, zu der ein LCALL vorgenommen wird. Dabei wird die aktuelle Adresse des folgenden Befehls auf den Stack gelegt, an der nach Beendigung der Interruptroutine mit dem RETI-Befehl fortgefahren wird. Bei der Verzweigung in eine Interruptroutine wird ein Flag gesetzt, das einen laufenden Interrupt anzeigt. Kommen während der Bearbeitung des aktuellen Interrupt weitere Interruptanforderungen an, so werden sie wegen des gesetzten Flags zunächst nicht bedient, es sei denn, der neue Interrupt hat eine höhere Priorität. Aus diesem Grund muss jede Interruptroutine mit dem RETI-Befehl und nicht mit dem einfachen RET-Befehl abgeschlossen werden.

Der Assembler benutzt zur Kennzeichnung der Interruptvektoren deren Namen. Diese können in der Datei *.CPU geändert werden. Im Programm werden sie wie ein Label mit fester Adresse gehandhabt.

Beispiel

Timer0:	; Timer 0 Interrupt

push	acc

push	psw

. . . .	; weitere Befehle

pop	psw

pop	acc

Reti	; Ende des Interrupt

Siehe auch

Interruptfreigabe-Register, IEN0	Interrupt Priorität, IP


ACC
Der Akkumulator, ACC

Adresse:	E0h,	bitadressierbar

Der Akkumulator - kurz Akku genannt - ist ein zentrales Register, über das zahlreiche Daten für eine arithmetische, logische Operation mit der CPU oder einem Datentransfer laufen. Bei einem Subroutinenaufruf wird der Inhalt des Akkus nicht auf den Stack gelegt. Das muss, falls gewünscht, mit dem PUSH-Befehl erfolgen. Sie schreiben dann aber nicht push a, sondern push acc, weil nur das Symbol acc die Adresse des Akkus repräsentiert.

Die Bits des Akkumulators werden durch Nachstellung der Bitnummer hinter den Registernamen adressiert.

Beispiele

If bit acc.0 then

clr acc.3

setb acc.5

Der Inhalt des Akkus ist nach jedem Reset Null.


RegisterB
Das Register B

Adresse:	F0h,	bitadressierbar

Die Verwendung des Register B liegt ausschließlich im Multiplikations- und Divisionsbefehl, mul ab, div ab. Nach der Multiplikation steht in B das High-Bytes des Ergebnisses, bei der Division steht der in B der Rest. Neben dieser Funktion steht B als allgemeines Register der Anwendung zur Verfügung.

Die Bits des Register B werden durch Nachstellung der Bitnummer hinter den Registernamen adressiert.

Beispiele

If bit B.0 then

clr B.3

setb B.5

Der Inhalt des Register B ist nach jedem Reset Null.


Port
Die Ports, P0, P1, P2

Port	Adresse	Bitadresse/Zweitfunktion

P0	80h	---	86h	85h	84h	---	82h	---	---
CMP1/	CMPREF/	CIN1A/	CIN2A/
KB6	KB5	KB4	KB2
P1	90h	---	---	95h	---	---	92h	---	---
RST	T0
P2	A0h	---	---	A5h	A4h	A3h	A2h	---	---
SPICLK	SS	MISO	MOSI

Beachten Sie, dass die Ports nicht über alle Pins verfügen. Alle Ports sind sowohl byte- als auch bitadressierbar. Jeder Pin ist bidirektional, d.h. er kann unabhängig von seinen Nachbarn als Eingang oder Ausgang verwendet werden.

Ausgang

Wenn ein Pin Ausgang ist, kann man ihn mit High-Pegel (setb) oder Low-Pegel (clr) beschreiben. Die Treibereigenschaft kann mit den Port Modus Registern PxMy individuell angepasst werden.

Eingang

Jeder Pin kann individuell mit den Port Modus Registern PxMy als Eingang konfiguriert werden. Port 0 hat zudem eine Analogfunktion. Für Ihn kann mit dem Port 0 Digital Input Disable PT0AD Register die Digitalfunktion abgestellt werden.

Zweitfunktion

Die Zweitfunktionen der Ports werden auf unterschiedliche Weise ausgewählt. Die Beschreibung findet sich bei den Port Modus Registern PxMy.

Nach einem Reset führen alle Pins High-Pegel und sind als MCS51 Standard Pins konfiguriert.

Siehe auch

Port 3, P3	Port Modus Register, PxM

Analog Comparator, CMP1 	Digital Input Disable, PT0AD


SP
Der Stackpointer, SP

Adresse:	81h,	nicht bitadressierbar

Der Stackpointer dient zur Verwaltung der Rücksprungadressen bei Subroutinenaufrufen mit den Befehlen lcall und acall. Er wird auch benötigt, wenn die Inhalte von Spezialfunktionsregistern und Variablen auf dem Stack abgelegt werden (push-Befehl). Der Stack ist ein aufwärts wachsender Speicherbereich im internen RAM. Bevor ein Wert auf den Stack gelegt wird, wird der Stackpointer SP um Eins erhöht. Dieser neue Wert bildet nun die Adresse im internen RAM (der Stack). Beim Zurückholen der Werte vom Stack (ret, reti, pop) wird der Stackpointer SP erst nach dem Auslesen des Wertes erniedrigt.

Ein Beschreiben des Stackpointers untergräbt die automatische Verwaltung des Stack und sollte mit Bedacht vorgenommen werden.

Nach einem Reset ist sein Wert 07. Somit zeigt der Stackpointer auf die Adresse 08.


DPTR
Der Datenpointer, DPTR

Der LPC912 verfügt über zwei Datenpointer. Das Bit Datenpointer Select DPS im AUXR1 Register entscheidet, ob Datenpointer 0 oder 1 aktiv ist. Alle Befehle, die den Datenpointer benutzen, verwenden den zur Zeit aktiven Datenpointer.

Der Datenpointer DPTR ist ein 16-Bit-Register, das aus dem Low-Byte DPL (Adresse 82h) und dem High-Byte DPH (Adresse 83h) besteht. Der Datenpointer kann mit einem 16-Bit-Wert beschrieben werden, z.B. mov DPTR,#2E30h, oder mit einem Label mov dptr, #Label. Die gleiche Wirkung erzielt man durch folgende Befehle mov DPH,#2Eh und mov DPL,#30h. Der Datenpointer kann inkrementiert werden inc DPTR.

Tabellen

Die Hauptverwendung des Datenpointers ist zum Lesen von Daten aus dem Programmspeicher movc a,@a+DPTR . Der Zugriff auf ein externes RAM mit dem MOVX-Befehl ist nicht möglich, weil der LPC912 kein externes RAM unterstützt.

Sprünge

Auch Sprünge können mit dem Datenpointer ausgeführt werden. Der Befehl jmp @a+DPTR addiert den Akku und den Datenpointer und schreibt die Summe in den Programmzähler. Das Programm wird nachfolgend an der Adresse fortgesetzt, die aus der Summe von Akku und Datenpointer gebildet wird.

Der Inhalt der Datenpointer nach einem Reset ist 0000h.

Siehe auch

Interrupt Priority, IP	Datenpointer Auswahl


IEN0
Interrupt Enable Register 0, IEN0

Adresse:	A8h,	bitadressierbar

Bitsymbol:	EA	EWDRT	EBO	---	ET1	---	ET0	---

Bitadresse:	AFh	AEh	ADh	ACh	ABh	AAh	A9h	A8h

Symbol	Funktion

--	Diese Bits sind für zukünftige Erweiterungen reserviert und sollten, um Softwarekompatibilität zu gewährleisten, nicht benutzt werden.

EA	Enable All. Globales Interrupt-Freigabebit. Ist dieses Bit Null, kann kein Interrupt ausgelöst werden. Das ist z.B. in zeitkritischen Routinen oder solchen wichtig, die sehr viele interne Register beanspruchen. Ein Interrupt würde in einer solchen Routine zu viele Register verändern, so dass das Ergebnis dieser Routine zerstört würde.
Mit EA = 1 sind Interrupts möglich.

EWDRT	Enable Watchdog/RTC-Timer Interrupt. Mit EWDRT = 1 wird der Watchdog bzw. RTC-Timer Interrupt freigegeben.
Interruptadresse = 0053h, Vectorname = Watchdog Timer oder Realtime Clock.

EBO	Enable Brownout Interrupt. Mit EBO = 1 wird der Brownout Interrupt freigegeben.
Interruptadresse = 002Bh, Vectorname = Brownout detect

ET1	Enable Timer 1 Interrupt. Mit ET1 = 1 führt ein Überlauf von Timer 1 zu einem Interrupt. Bei der Ausführung des Interrupt wird das Bits TF1 im Register TCON gelöscht.
Interruptadresse = 001Bh, Vectorname = Timer 1

ET0	Enable Timer 0 Interrupt. Mit ET0 = 1 führt ein Überlauf von Timer 0 zu einem Interrupt. Bei der Ausführung des Interrupt wird das Bits TF0 im Register TCON gelöscht.
Interruptadresse = 000Bh, Vectorname = Timer 0

Der Inhalt des IEN0-Registers nach einem Reset:

Reset	Inhalt

Jeder Reset	0000 0000

Beispiel

Reset:

sjmp Start

Timer 1:	; Timer 1 Interrupt

 [Befehle]

reti

Start:

setb TR1	; Timer 1 Start

setb ET1

setb EA

end

Dieses Beispiel gibt den Timer 1 Interrupt frei. Alle Aktivitäten des Programms finden in der Interruptroutine statt.

Siehe auch

Interrupt Priority, IP	Interrupt Enable 1, IEN1

Interrupt


IEN1
Interrupt Enable Register 1, IEN1

Adresse:	E8h,	bitadressierbar

Bitsymbol:	---	---	---	---	ESPI	EC	EKBI	---

Bitadresse:	EFh	EEh	EDh	ECh	EBh	EAh	E9h	E8h

Symbol	Funktion

--	Diese Bits sind für zukünftige Erweiterungen reserviert und sollten, um Softwarekompatibilität zu gewährleisten, nicht benutzt werden.

ESPI	Enable SPI Interrupt. Eine 1 gibt den SPI Interrupt frei, eine 0 sperrt ihn. Interrupt auslösendes Bit ist das SPIF Bit im SPSTAT Register.
Interruptadresse = 004Bh, Vectorname = SPI Interrupt.

EC	Enable Comparator Interrupt. Eine 1 gibt den Comparator Interrupt frei, eine 0 sperrt ihn. Interrupt auslösendes Bit ist das CMF1 Bit oder CMF2 Bit im CMP1 bzw. CMP2 Register.
Interruptadresse = 0043h, Vectorname = Comparator Interrupt.

EKBI	Enable Keyboard Interrupt. Eine 1 gibt den Keyboard Interrupt frei, eine 0 sperrt ihn. Interrupt auslösendes Bit ist das KBIF Bit im KBCON Register.
Interruptadresse = 003Bh, Vectorname = KBI Interrupt.

Der Inhalt des IEN1-Registers nach einem Reset:

Reset	Inhalt

Jeder Reset	00x0 0000

Siehe auch

Interrupt Priority, IP	Interrupt Enable 0, IEN0

Interrupt


IP
Interrupt Priority Register, IPn

IP0:	B8h,	bitadressierbar

Bitsymbol:	---	PWDRT	PBO	---	PT1	---	PT0	---

Bitadresse:	BFh	BEh	BDh	BCh	BBh	BAh	B9h	B8h

IP0H:	B7h,	nicht bitadressierbar

Bitsymbol:	---	PWDRTH	PBOH	---	PT1H	---	PT0H	---

Bitnummer:	7	6	5	4	3	2	1	0

IP1:	F8h,	bitadressierbar

Bitsymbol:	---	---	---	---	PSPI	PC	PKBI	---

Bitadresse:	BFh	BEh	BDh	BCh	BBh	BAh	B9h	B8h

IP1H:	F7h,	nicht bitadressierbar

Bitsymbol:	---	---	---	---	PSPIH	PCH	PKBIH	---

Bitnummer:	7	6	5	4	3	2	1	0

Der LPC912 verfügt über vier Interrupt Prioritäten. Diese werden mit den vorstehenden Registern ausgewählt:

IPxH	IPx

0	0	Priorität 0

0	1	Priorität 1

1	0	Priorität 2

1	1	Priorität 3

Der Inhalt der IP-Register nach einem Reset:

Register	Inhalt (x heißt, Bit ist unbestimmt)

IP0	x000 0000
IP0H	x000 0000
IP1	00x0 0000
IP1H	00x0 0000

Siehe auch

Interrupt Enable 0, IEN0	Interrupt Enable 1, IEN1


PCON
Power Control Register, PCON

Adresse:	87h,	nicht bitadressierbar

Bitsymbol:	SMOD1	SMOD0	BOPD	BOI	GF1	GF0	PMOD1	PMOD0

Bitposition:	7	6	5	4	3	2	1	0

Symbol	Funktion

SMOD	Baudratenverdoppelung. Mit einer Eins wird die Baudrate in den Modi 1, 2 oder 3 verdoppelt. (nur im LPC913/914)

SMOD1	Framing Error Location. Mit SMOD1 = 0 dient Bit 7 in SCON als SM0 für den seriellen Port, mit SMOD1 = 1 dient Bit 7 in SCON als Framing Error Bit FE für den seriellen Port. (nur im LPC913/914)

BOPD	Brownout Detect Power-down. Eine 1 schaltet die Brownout Erkennung ab, eine 0 an. Wichtig: Für die Programmierung eines EEPROM-Byte muss BOPD null sein, sonst ist kein Beschreiben möglich.

BOI	Brownout Detect Interrupt Enable. Eine 1 erzeugt nach der Brownout Erkennung einen Interrupt, einen 0 einen Reset.

GF1	General Flag 1. Bit für allgemeinen Verwendungszweck, es wird für keinen Steuerungszweck verwendet.

GF0	General Flag 0. Bit für allgemeinen Verwendungszweck, es wird für keinen Steuerungszweck verwendet.

PMOD	Power Modus.
00b: Normaler Modus, keine Leistungsreduzierung.
01b: Idle Modus. Es werden keine Befehle ausgeführt, aber die Peripherie-Einrichtung laufen, sodass die CPU bei einem Interrupt wieder aktiviert wird. Jeder Interrupt oder Reset kann den Idle Modus beenden.
10b: Power-down Modus. Im Power-down Modus ist der Oszillator für maximale Energieersparnis angehalten. Es sind nur noch folgende Einrichtungen aktiv falls aktiviert:
- Brownout Erkennung
- Watchdog Timer
- Comarator
- Real Time Clock System
- Keyboard Interrupt Erkennung
Der Power-down Modus kann nur durch einen dieser Interrupts oder durch einen Reset verlassen werden.
11b: Totaler Power-down Modus. Vergleichbar zum vorstehenden Modus mit der Ausnahme, dass Brownout Erkennung und Comarator nicht mehr aktiv sind. Wakeup Auslöser sind Watchdog, Keyboard, RTC oder Reset.

Der Inhalt des PCON-Registers nach einem Reset:

Reset	Inhalt

Jeder Reset	0000 0000

Siehe auch

Power Control A, PCONA


PCONA
Power Control Register A, PCONA

Adresse:	B5h,	nicht bitadressierbar

Bitsymbol:	RTCPD	–	VCPD	–	–	–	SPD	–

Bitposition:	7	6	5	4	3	2	1	0

Symbol	Funktion

–	Reserviert für zukünftigen Gebrauch. Diese Bits sollten nicht mit einer 1 beschrieben werden.

RTCPD	Real Time Clock Power-down. Eine 1 stellt den internen Takt zum RTC ab, eine 0 gibt ihn frei.

VCPD	Analog Voltage Comparator Power-down. Eine 1 unterbindet die Stromzufuhr für den Comparator, ein 0 gibt sie frei. Vor dem Setzen des Bits muss der Comparator abgeschaltet werden.

SPD	Serial Port Power-down. Eine 1 schaltet die Taktversorgung für den seriellen Port ab, eine 0 erlaubt sie. (nur im LPC913/914)

Der Inhalt des PCONA-Registers nach einem Reset:

Reset	Inhalt

Jeder Reset	0x0x xx0x

Siehe auch

Power Control Register, PCON


TCON
Timer Control Register, TCON

Adresse:	88h,	bitadressierbar

Bitsymbol:	TF1	TR1	TF0	TR0	–	–	–	–

Bitadresse:	8Fh	8Eh	8Dh	8Ch	8Bh	8Ah	89h	88h

Symbol	Funktion

–	Reserviert für zukünftigen Gebrauch. Diese Bits sollten nicht mit einer 1 beschrieben werden.

TF1	Timer 1 Overflow Flag. Beim Überlauf des Timer 1 (FFFFh zu 0000 Übergang) wird dieses Bit gesetzt. In der Timer 1 Interruptroutine wird das Bit automatisch gelöscht.

TR1	Timer 1 Run. Eine Eins startet Timer/Zähler 1, eine Null stoppt ihn.

TF0	Timer 0 Overflow Flag. Beim Überlauf des Timer 0 (FFFFh zu 0000 Übergang) wird dieses Bit gesetzt. In der Timer 0 Interruptroutine wird das Bit automatisch gelöscht (Ausnahme: Modus 6).

TR0	Timer 0 Run. Eine Eins startet Timer/Zähler 0, eine Null stoppt ihn.

Der Inhalt des TCON-Registers nach einem Reset:

Reset	Inhalt

Jeder Reset	0000 0000

Siehe auch

Timer Modus TMOD	Interrupt Enable IEN0

Timer Modus A TAMOD


TMOD
Timer Modus Register, TMOD

Adresse:	89h,	nicht bitadressierbar

Bitsymbol:	–	–	T1M1	T1M0	–	T0C/T	T0M1	T0M0

Bitposition:	7	6	5	4	3	2	1	0

Symbol	Funktion

–	Reserviert für zukünftigen Gebrauch. Diese Bits sollten nicht mit einer 1 beschrieben werden.

T1M	Timer 1 Modus. Diese beiden Bits konfigurieren den Timer/Zähler:

T1M1	T1M0

0	0	Modus 0: 8 Bit mit 5-Bit Vorteiler

0	1	Modus 1: 16 Bit, kein Vorteiler

1	0	Modus 2: 8 Bit, Autoreloadmodus

1	1	Modus 3: Timer 0 = zwei 8 Bit Timer, Timer 1 ist gestoppt.

T0C/T	Counter/Timer Select. Mit einer Eins ist die Zählerfunktion aktiviert - Signale kommen extern über den Pin T0, mit einer Null ist die Timerfunktion gewählt - Signale kommen vom Oszillatortakt.

T0M	Timer 0 Modus. Diese beiden Bits konfigurieren zusammen mit dem Bit T0M2 aus dem Register TAMOD den Timer/Zähler:

T0M2	T0M1	T0M0

0	0	0	Modus 0: 8 Bit mit 5-Bit Vorteiler

0	0	1	Modus 1: 16 Bit, kein Vorteiler

0	1	0	Modus 2: 8 Bit, Autoreloadmodus

0	1	1	Modus 3: Timer 0 = zwei 8 Bit Timer, Timer 1 ist gestoppt.

1	1	0	Modus 6: Pulsweiten Modulation PWM

Die restlichen Modi sind nicht belegt und dürfen nicht verwendet werden.

Der Inhalt des TMOD-Registers nach einem Reset:

Reset	Inhalt

jeder Reset	0000 0000

Siehe auch

Timer Control, TCON	Timer


TAMOD
Timer Modus A, TAMOD

Adresse:	8Fh,	nicht bitadressierbar

Bitsymbol:	–	–	–	–	–	–	–	T0M2

Bitposition:	7	6	5	4	3	2	1	0

In diesem Register befindet sich nur ein Bit, das zusammen mit den Bits T0M1 und T0M0 aus dem Register TMOD die Arbeitsweise des Timer 0 steuert:

T0M2	T0M1	T0M0

0	0	0	Modus 0: 8 Bit mit 5-Bit Vorteiler

0	0	1	Modus 1: 16 Bit, kein Vorteiler

0	1	0	Modus 2: 8 Bit, Autoreloadmodus

0	1	1	Modus 3: Timer 0 = zwei 8 Bit Timer, Timer 1 ist gestoppt.

1	1	0	Modus 6: Pulsweiten Modulation PWM

Die restlichen Modi sind nicht belegt und dürfen nicht verwendet werden.

Der Inhalt des TAMOD-Registers nach einem Reset:

Reset	Inhalt

jeder Reset	xxx0 xxx0

Siehe auch

Timer Control, TCON	Timer

Timer Modus, TMOD


PSW
Programmstatuswort, PSW

Adresse:	D0h,	bitadressierbar

Bitsymbol:	CY	AC	F0	RS1	RS0	OV	F1	P

Bitadresse:	D7h	D6h	D5h	D4h	D3h	D2h	D1h	D0h

Symbol	Funktion

CY	Carry. Das Carry wird durch eine vorausgegangene mathematische Operation beschrieben. Daneben gibt es eine Reihe weiterer Befehle, die eine Änderung des Carrys zur Folge haben, z.B. CJNE, RLC, RRC etc.
Das Carry ist ferner der boolesche Akku, über den viele Bitoperationen laufen.
Beim Bit-Test gibt es zwei Möglichkeiten, das Carry zu testen: If bit c then entspricht JNC,rel (2 Byte) oder If bit CY then entspricht JNB CY,rel (3 Byte).

AC	Auxilliary-Carry. Das AC-Bit wird bei einem Übertrag vom Low-Nibble zum High-Nibble bei Addition und Subtraktion gesetzt, sonst gelöscht. Es spielt auch eine Rolle beim Dezimaladjust für die BCD-Addition.

F0	User Flag 0. Allgemeines Bit zur freien Verwendung. Es gibt keine Hardware-Aktion des Controllers, die das Bit verändert.

RS1 RS0	  Register Bank Select. Mit diesen Bits erfolgt die Auswahl der aktuellen Registerbank R0 bis R7.

RS1	RS0	Registerbank	Adressen

0	0	0	00h bis 07h

0	1	1	08h bis 0Fh

1	0	2	10h bis 17h

1	1	3	18h bis 1Fh

OV	Overflow. Das OV wird bei der Addition und Subtraktion gesetzt wenn:
• ein Übertrag im 6. Bit und nicht im 7. Bit erfolgt oder
• kein Übertrag im 6. Bit, aber einer im 7. Bit erfolgt, sonst wird es gelöscht.
Das OV-Bit macht auf einen Überlauf bei signierten Zahlen aufmerksam.

F1	User Flag 1. Allgemeines Bit zur freien Verwendung. Es gibt keine Hardware-Aktion des Controllers, die das Bit verändert.

P	Parity. Das Bit wird gesetzt, wenn die Zahl der Einsen im Akku ungerade ist, und gelöscht bei gerader Anzahl (odd Parity).

Der Inhalt des PSW-Registers nach einem Reset:

Reset	Inhalt

Externer Reset	0000 0000

Siehe auch

Akkumulator ACC


P3
Port 3, P3

Adresse:	B0h,	bitadressierbar

Pin:	–	–	–	–	–	–	P3.1	P3.0

Bitadresse:	B7h	B6h	B5h	B4h	B3h	B2h	B1h	B0h

Im LPC912 sind nur 2 Pins des Port 3 vorhanden. Der Pins 0 hat eine Zweitfunktion. Um diese Zweitfunktion auszuführen, muss der P3.0 auf Eins gesetzt und die entsprechende Zweitfunktion aktiviert werden. Die Pins, für die keine Zweitfunktion gewählt wurde, dienen als normale I/O-Pins. P3.0/1 können als externen Taktgenerator dienen. Die Wahl zwischen Port und XTAL-Funktion wird im User-Konfigurationsbyte UFCG1 während der Programmierung getroffen.

Pin	Symbol	Zweitfunktion

–	Reserviert für zukünftigen Gebrauch. Diese Bits sollten nicht mit einer 1 beschrieben werden.

P3.0	XTAL2	Ausgang des Oszillatorverstärkers.

P3.0	CLKOUT	Ausgabe der halben Oszillatorfrequenz, wenn das Bit ENCLK im TRIM-Register gesetzt ist und wenn die Taktquelle der interne RC-Oszillator, der Watchdog Timer oder ein externes Signal am Eingang XTAL1 ist.

P3.1	XTAL1	Eingang des Oszillatorverstärkers, kann zusammen mit XTAL2 als externer Taktgenerator dienen. Die XTAL1-2 Funktion wird im User-Konfigurationsbyte UFCG1 während der Programmierung des Chips festgelegt. Das Signal eines externen Schwingkreises wird hier angeschlossen, Maximalfrequenz = 18 MHz.

Der Zustand des Port 3 nach einem Reset:

Reset	Inhalt

Externer Reset	xxxx xx11

Siehe auch

Interrupt Enable 0, IEN0	Interrupt

Ports P0, P1, P2	Port Modus, PxM1/2


PXM
Port Modus Register, PxM1/2

Port 0

SFR:	P0M1: 84h, P0M2: 85h

Aktivbits:	–	6	5	4	–	2	–	–

Port 1

SFR:	P1M1: 91h, P1M2: 92h

Aktivbits:	–	–	–	–	–	2	–	–

Port 2

SFR:	P2M1: A4h, P2M2: A5h

Aktivbits:	–	–	5	4	3	2	–	–

Port 3

SFR:	P3M1: B1h, P3M2: B2h

Aktivbits:	–	–	–	–	–	–	1	0

Im LPC912 sind 12 I/O-Pins vorhanden, wenn die interne Reset-Beschaltung und die interne Takterzeugung verwendet wird. P1.5 (Reset-Eingang) kann nur als Eingang benutzt werden. Die restlichen Pins können in vier Modi versetzt werden. P1.2 kann nur als „nur Eingang“ oder Open Drain konfiguriert werden.

PxM1.b	PxM2.b	Modus

0	0	Quasi-bidirectional

0	1	Push-Pull

1	0	Nur Eingang (High Impedanz)

1	1	Open Drain

Quasi-bidirectional: Standard MCS51 Port. Low-Pegel kann viel Strom liefern (ca. 20 mA), bei High-Pegel liegt intern ein ca. 40 k Ohm Widerstand an plus. Beim Umschalten von minus auf plus wird kurzzeitig der 40 k Widerstand überbrückt, um schnell kapazitive Lasten zu treiben. Bei High-Pegel kann der Port als Eingang verwendet werden. Die von außen ankommende Spannung wird über einen Schmitt-Trigger als Eingangsinformation verwendet.

Push-Pull. Pin ist CMOS-kompatibler Ausgang. Low- und High-Pegel liefern denselben Strom (ca. 20 mA). Keine Eingangsfunktion

Nur Eingang. Am Pin liegt weder plus noch minus an. Die von außen ankommende Spannung wird über einen Schmitt-Trigger als Eingangsinformation verwendet.

Open Drain. Low-Pegel kann als Ausgang viel Strom liefern (ca. 20 mA), bei High-Pegel hängt der Pin in der Luft, es wird kein Pullup-Widerstand verwendet. Die von außen ankommende Spannung wird über einen Schmitt-Trigger als Eingangsinformation verwendet.

Nach einem Power-up Reset sind alle Ports als „nur Eingang“ konfiguriert. Die Inhalte nach einem Power-up Reset:

SFR	Inhalt

P0M1	1111 1111

P0M2	0000 0000

P1M1	1111 1111

P1M2	0000 0000

P2M1	1111 1111

P2M2	0000 0000

P3M1	xxxx xx11

P3M2	xxxx xx00

Siehe auch

Interrupt Enable 0, IEN0	Interrupt

Ports P0, P1, P2


PT0AD
Port 0 Analog Disable, PT0AD

Adresse:	F6h

Aktivbits:	–	–	5	4	–	2	–	–

Port 0 verfügt über Analogfunktionen. Um diese zu benutzen, müssen die betreffenden Pins mit einer 1 beschrieben, damit sie als „nur Eingang“ konfiguriert werden, und die Digitalfunktion abgeschaltet werden.

Beispiel für die Comparator 1 Verwendung:

mov PT0AD, #30h	; digitale Verwendung der Pins CIN1A und CMPREF abschalten

anl P0M2, #CFh	; Pins auf nur Eingang umstellen

orl P0M1, #30h

mov CMP1, #24h	; Comparator 1 einschalten

acall 10µs Verzögerung	; 10 µs warten

anl CMP1, #Feh	; Interrupt Flag löschen

setb EC	; Comparator und globalen

setb EA	; Interrupt freigeben

Nach einem Power-up Reset ist die digitale Verwendung von Port 0 eingeschaltet. Der Inhalt nach einem Reset:

Reset	Inhalt

Power-up Reset	xx00 x0xx

Siehe auch

Interrupt Enable, IEN0	Interrupt

Ports P0, P1, P2 	Port Modus, PxM1/2


TIMER
Timer 0, Timer 1

Timer oder Zähler

Als Spezialfunktionsregister sind die Timer an den Adressen 8A bis 8D les- und beschreibbar. Jeder von ihnen benötigt als 16-Bit-Register zwei Bytes. Man achte auf die etwas unregelmäßige Aufteilung der Adressen:

Timer 0 Low,	TL0:	8Ah

Timer 0 High,	TH0:	8Ch

Timer 1 Low,	TL1:	8Bh

Timer 1 High,	TH1:	8Dh

Jeder Timer lässt sich auch als Zähler verwenden. Man muss ihn dazu im Timer-Modus-Register TMOD mit dem Bit C/T umschalten.

In der Timerfunktion wird der Inhalt des Registers bei jedem Maschinentakt um Eins erhöht. Der Timer kann somit die Maschinentakte zählen. Da ein Maschinentakt aus 12 Oszillatorperioden besteht, beträgt die Zählrate ein Zwölftel der Oszillatorfrequenz. Man hat somit bei einem Quarz von 12 MHz eine Zeitbasis von einer Millionstel Sekunde = 1 µs.

Als Zähler wird der Registerinhalt genau dann um Eins erhöht, wenn von außen eine negative Flanke am korrespondierenden Pin auftritt. Dabei ist Pin T0 mit dem Zähler 0 und T1 mit Zähler 1 verbunden. T0 und T1 finden sich als Zweitfunktion in Port 3. Es sind die Pins Nr. 14 und 15 des 40poligen Gehäuses. In diesem Fall wird der Zustand der Pins in jedem Maschinentakt überprüft. Wenn sich der Pin in einem High-Zustand und im nächsten Maschinentakt in einem Low-Zustand befindet, wird der Inhalt des Zählers um Eins erhöht. Der neue Wert wird allerdings mit dem folgenden Maschinentakt in das Register geschrieben. Somit dauert die Erkennung einer negativen Flanke an T0 oder T1 zwei Maschinentakte, das sind 24 Oszillatorperioden. Die Zählrate ist daher auf ein Vierundzwanzigstel der Oszillatorfrequenz beschränkt. Die maximale Zählfrequenz beträgt also 500 kHz. An die Flankensteilheit wird nur insofern eine Bedingung gestellt, als dass der Pegelwechsel innerhalb eines Maschinentaktes erfolgen muss. Das Tastverhältnis kann beliebig sein, jedoch sollte die lmpulsbreite so lang wie ein Maschinentakt sein, um zu gewährleisten, dass der Pegel vor der Änderung mit Sicherheit erkannt wird.

Timer und Zähler sind also identisch bis auf die Herkunft ihrer Signale. Als Timer sind es die Impulse des Oszillators, als Zähler externe Ereignisse. Die Wahl, ob Zähler oder Timer, erfolgt durch Beschreiben des Kontrollbits C/T im Spezialfunktionsregister TMOD

Die Timer-Modi

Jeder der zwei Timer kann auf vier Arten betrieben werden, sie sind ebenfalls in TMOD einstellbar. Modus 0, 1 und 2 ist für beide Timer derselbe, Modus 3 ist unterschiedlich.

Modus 0

Dieser Modus ist ein Relikt aus der MCS-48 Controllerfamilie. Es ist ein 8-Bit-Zähler, der als Timer nicht bei jedem Maschinentakt um Eins anwächst, sondern dessen Inhalt erst nach jedem zweiunddreißigsten Takt (32 = 2^5) erhöht wird. Als Zähler wird ebenfalls nur jeder zweiunddreißigste Impuls gezählt. Und zwar dient als Zählregister das High-Byte des betreffenden Zählers; die unteren fünf Bits des Low-Bytes, also Bits 0 bis 4, dienen als Vorteiler und teilen das Eingangssignal durch 32. Die oberen drei Bits des Low-Bytes sind in diesem Fall unbestimmt und sollten beim Lesen ignoriert werden. Man beachte, dass ein Start des Timers (durch Setzen des RUN-Bits TR) den Inhalt des Registers nicht löscht. In diesem Modus könnte man auch den Zähler als 13-Bit-Register auffassen.

Wenn man den genauen Wert des Zählerstandes erfahren will, kann man selbstverständlich den Inhalt des Vorteilers auslesen und verwerten. Wenn in allen dreizehn Bit Einsen stehen, läuft der Zähler beim nächsten Impuls über. Dabei geschieht folgendes:

•	Alle dreizehn Bits werden auf Null gesetzt.

•	Das Interrupt-Bit für den betreffenden Timer wird gesetzt.

Ob allerdings in eine entsprechende lnterruptroutine verzweigt wird, hängt davon ab, ob der Interrupt freigegeben oder gesperrt ist.

Der Sinn dieses Timermodus wird deutlich, wenn man die Verwendung des Timers in der 48iger Familie betrachtet. Diese Bausteine werden mit einer niedrigeren Taktfrequenz betrieben, außerdem wird der Timer nicht in jedem Maschinentakt um Eins erhöht, sondern nach jedem dritten. Dies führt zu einer Interruptfrequenz von ca. 50 Hz, eine Frequenz, die häufig zur Überwachung von Keyboards benutzt wird. Eine Verwendung dieses Modus hat im 8031 also nur dann Sinn, wenn eine sehr niedrige Taktfrequenz verwendet wird. Bei 12 MHz beträgt die durch diesen Modus ausgelöste Interruptfrequenz 1465 Hz.

Modus 1

Im Modus 1 werden sämtliche Bits zum Zählen benutzt. Der Zähler ist also ein 16-Bit-Aufwärtszähler. Als lnterruptquelle verwendet, erzeugt er eine Frequenz von 15,288 Hz. Ein Überlauf des Zählers hat dieselbe Wirkung wie in Modus 0.

Modus 2

Modus 2 wird am häufigsten benutzt, da er sehr vielfältig verwendet werden kann. Es ist ein 8-Bit-Aufwärtszähler mit automatischer Nachladung einer Konstanten beim Überlauf. Der Zähler wird durch das Low-Byte gebildet, der Konstantenspeicher durch das High-Byte. Das Beschreiben des High-Bytes erfolgt durch den Anwender und kann nach seinen Wünschen geschehen. Ein Überlauf des Zählers bewirkt folgendes:

•	Das Interrupt-Bit für den betreffenden Timer wird gesetzt.

•	Der Inhalt des Zähler-High-Bytes wird in das Low-Byte kopiert, das High-Byte wird dadurch nicht gelöscht.

Modus 3

Setzt man Timer 1 in diesen Modus, wird er gestoppt. Der aktuelle Inhalt des Timer 1 bleibt dabei erhalten. Der Effekt ist der gleiche, als würde man das Bit TR1 löschen. Setzt man Timer 1 in einen anderen Modus, so kann er durchaus weiterhin als Timer oder Zähler arbeiten, auch wenn Timer 0 sich in Modus 3 befindet. Dieser Modus wirkt also nur auf Timer 0. Low-Byte und High-Byte werden als zwei separate 8-Bit-Zähler eingerichtet. Nur das Low-Byte kann auch als Ereigniszähler verwendet werden, das High-Byte nur als Timer. Die Bits, die im Timer Mode Register TMOD Timer 0 steuern, sind nun allein für das Low-Byte zuständig. Die Bits, die im Timer Control Register TCON für Timer 0 gelten, beziehen sich nun auf das Low-Byte, die Bits, die für Timer 1 gelten, auf das High-Byte. Der High-Byte-Zähler wird also durch Setzen von TR1 gestartet und durch Löschen gestoppt. Ein Überlauf desselben wird durch eine Eins im TF1-Bit angezeigt. Ist ein Timer 1-lnterrupt erlaubt, so verzweigt das Programm dann in die Timer 1-lnterruptroutine. Da das High-Byte von Timer/Zähler 0 hardwaremäßig nicht mit dem externen Eingang T1 verbunden ist, kann das High-Byte nicht als Ereigniszähler verwendet werden. Timer/Zähler 1 wird nur gestartet durch Verlassen seines Modus 3 und gestoppt durch das Versetzen in seinen Modus 3.

Modus 3 ist für Anwendungen vorgesehen, die einen zusätzlichen 8-Bit-Zähler benötigen. Mit Timer 0 in Modus 3 sieht es so aus, als hätte der 8031 drei Zähler. Aus- und einschalten kann man Timer 1, indem man ihn in Modus 3 wechseln lässt, oder er kann ruhig als Baudratengenerator für den seriellen Port benutzt werden oder für alle anderen Zwecke, die keinen Interrupt erfordern.

Der Inhalt der Timer nach einem Reset ist 0000 0000

Siehe auch

Timer Control Register TCON

Timer Modus Register TMOD


AUXR1
Auxiliary Register, AUXR1

Adresse:	A2h,	nicht bitadressierbar

Bitsymbol:	CLKLP	EBRR	---	---	SRST	0	---	DPS

Bitnummer:	7	6	5	4	3	2	1	0

Symbol	Funktion

–	Reserviert für zukünftigen Gebrauch. Diese Bits sollten nicht mit einer 1 beschrieben werden.

CLKLP	Clock Low Power Select. Eine 1 reduziert die Leistungsaufnahme bei der Takterzeugung. Diese Option kann bei einer Frequenz unter 8 MHz benutzt werden.

EBRR	UART Break Detect Reset Enable. Nur in den Bausteinen LPC913/914 vorhanden.

SRST	Software Reset. Eine 1 löst einen Reset aus, als wäre er durch die Hardware erfolgt.

0	Dieses Bit ist immer eine 0 und soll verhindern, dass ein Inkrement-Befehl zum Umschalten der Datenpointer die höheren Bits verändert.

DPS	Data Pointer Select. Wählt einen der beiden Datenpointer aus. MOVX-Befehle können weder mit dem Datenpointer noch indirekt mit @ri ausgeführt werden, das der LPC912 keinen externen Speicher unterstützt.

Der Inhalt des AUXR1-Registers nach einem Reset:

Reset	Inhalt

Externer Reset	xx11 0000

Siehe auch

Datenpointer


RSTSCR
Reset Source, RSTSCR

Adresse:	DFh,	nicht bitadressierbar

Bitsymbol:	–	–	BOF	POF	R_BK	R_WD	R_SF	R_EX

Bitnummer:	7	6	5	4	3	2	1	0

Symbol	Funktion

–	Reserviert für zukünftigen Gebrauch. Diese Bits sollten nicht mit einer 1 beschrieben werden.

BOF	Brownout Detect Flag. Wenn die Brown-out Erkennung aktiviert ist, wird dieses Bit gesetzt und bleibt gesetzt, bis es durch die Software gelöscht wird. Nach einem Power-on Reset werden die Bits BOF und POF gesetzt, die restlichen Bits gelöscht.

POF	Power-on Detect Flag. Wenn die Power-on Erkennung aktiviert ist, wird dieses Bit gesetzt, um den Einschaltvorgang anzuzeigen. Es bleibt gesetzt, bis es durch die Software gelöscht wird. Nach einem Power-on Reset werden die Bits BOF und POF gesetzt, die restlichen Bits gelöscht.

R_BK	Break Detect Reset. Wenn ein Break Ereignis auftritt und das EBRR (AUXR1.6) gesetzt ist, wird ein Systemreset ausgelöst. Eine 1 in diesem Bit zeigt diesen Vorgang an. Es wird durch die Software oder einen Power-on Reset gelöscht. (nur im P89LPC913/914)

R_WD	Watchdog Timer Reset Flag. Dieses Bit zeigt mit einer 1 an, dass der Reset durch den Watchdog ausgelöst wurde. Es wird durch die Software oder einen Power-on Reset gelöscht. (UCFG1.7 muss 1 sein).

R_SF	Software Reset Flag. Dieses Bit zeigt mit einer 1 an, dass der Reset durch die Softwareausgelöst wurde. Es wird durch die Software oder einen Power-on Reset gelöscht.

R_EX	External Reset Flag. Eine 1 zeigt einen Reset am externen Pin RST an. Das Bit wird durch die Software oder einen Power-on Reset gelöscht. Liegt RST nach dem Einschaltvorgang immer noch an Masse, wird R_EX gesetzt.

Der Inhalt des RSTSCR-Registers nach einem Power-on Reset:

Reset	Inhalt

Externer Reset	xx11 0000

Siehe auch

PowerControl Register A, PCONA


CMP1
Analog Comparator 1, CMP1

Adresse:	ACh,	nicht bitadressierbar

Bitsymbol:	–	–	CE1	–	CN1	OE1	CO1	CMF1

Bitnummer:	7	6	5	4	3	2	1	0

Symbol	Funktion

–	Reserviert für zukünftigen Gebrauch. Diese Bits sollten nicht mit einer 1 beschrieben werden.

CE1	Comparator enable. Eine 1 schaltet die Comparator-Funktion ein. 10 µs nach dem Setzen ist der Comparator-Ausgang gültig. Eingang ist CIN1A = P0.4.

CN1	Comparator negative input select. Eine 0 wählt den Pin CMPREF = P0.5 als negativen Eingang, eine 1 wählt die interne Referenzspannung Vref = 1,23V 10% als negativen Comparator-Eingang.

OE1	Output enable. Eine 1 verbindet den Comparator-Ausgang mit dem Pin CMP1 = P0.6 (CE1 muss 1 sein). Der Ausgang ist asynchron zum CPU-Takt.

CO1	Comparator output. Eine 1 synchronosiert den Comparator-Ausgang zum CPU-Takt, um ihn per Software zu lesen.

CMF1	Comparator interrupt flag. Dieses Bit wird durch die Hardware gesetzt, sobald eine Änderung am CO1-Ausgang auftritt. Es kann einen Interrupt auslösen. Es muss durch die Software gelöscht werden.

Der Inhalt des CMP1-Registers nach jedem Reset:

Reset	Inhalt

Jeder Reset	xx0x 0000

Siehe auch

Comparator 2	Port 0


CMP2
Analog Comparator 2, CMP2

Adresse:	ADh,	nicht bitadressierbar

Bitsymbol:	–	–	CE2	–	CN2	–	CO2	CMF2

Bitnummer:	7	6	5	4	3	2	1	0

Symbol	Funktion

–	Reserviert für zukünftigen Gebrauch. Diese Bits sollten nicht mit einer 1 beschrieben werden.

CE2	Comparator enable. Eine 1 schaltet die Comparator-Funktion ein, ein 0 ab. 10 µs nach dem Setzen ist der Comparator-Ausgang gültig. Eingang ist CIN2A = P0.2.

CN2	Comparator negative input select. Eine 0 wählt den Pin CMPREF = P0.5 als negativen Eingang, eine 1 wählt die interne Referenzspannung Vref = 1,23V 10% als negativen Comparator-Eingang.

CO2	Comparator output. Eine 1 synchronosiert den Comparator-Ausgang zum CPU-Takt, um ihn per Software zu lesen.

CMF2	Comparator interrupt flag. Dieses Bit wird durch die Hardware gesetzt, sobald eine Änderung am CO2-Ausgang auftritt. Es kann einen Interrupt auslösen. Es muss durch die Software gelöscht werden.

Der Inhalt des CMP2-Registers nach jedem Reset:

Reset	Inhalt

Jeder Reset	xx0x 0x00

Siehe auch

Comparator 1	Port 0


KBPATN
Keyboard Pattern Register, KBPATN

Adresse:	93h,	nicht bitadressierbar

Bitsymbol:	–	KP6	KP5	KP4	–	KB2	–	–

Bitnummer:	7	6	5	4	3	2	1	0

Symbol	Funktion

–	Reserviert für zukünftigen Gebrauch. Diese Bits sollten nicht mit einer 1 beschrieben werden.

KBn	Keyboard Pattern Bits. Muster für eine angeschlossene Tastatur.

Für den Keyboard-Interrupt kann man z.B. das KBPATN-Register mit FFh beschreiben. Jede an Port 0 angeschlossene und im KBMASK-Register freigegebene Taste erzeugt einen Interrupt, sofern er freigegeben ist. Dieser Interrupt kann die CPU aus dem Idle oder Power-dowm Modus holen. Diese Eigenschaft ist besonders in tragbaren, Batterie betriebenen Geräten nützlich, die sorgfältig auf den Stromverbrauch achten müssen. Für die Auslösung des Interrupt muss die Tasteninformation länger als sechs Takte an Port 0 anliegen.

Der Inhalt des KBPATN-Registers nach einem Reset:

Reset	Inhalt

Jeder Reset	1111 1111

Siehe auch

Keyboard Control Register, KBCON	Keyboard Mask, KMASK


KBCON
Keyboard Control Register, KBCON

Adresse:	94h,	nicht bitadressierbar

Bitsymbol:	–	–	–	–	–	–	PS	KBIF

Bitnummer:	7	6	5	4	3	2	1	0

Symbol	Funktion

–	Reserviert für zukünftigen Gebrauch. Diese Bits sollten nicht mit einer 1 beschrieben werden.

PS	Pattern Matching Polarity selection. Mit einer 1 erzeugen gleiche Bitmuster an Port 0 und im Register KBPATN einen Interrupt. Mit einer 0 erzeugt ein zu KBPATN verschiedenes Muster an Port 0 einen Interrupt.

KBIF	Keyboard Interrupt Flag. Dieses Bit wird durch die Hardware gesetzt, wenn Port 0 mit den Bedingungen in KBPATN, KBMASK und PATN_SEL übereinstimmt. Es muss durch die Software gelöscht werden.

Der Inhalt des KBCON-Registers nach einem Reset:

Reset	Inhalt

Jeder Reset	xxxx xx00

Siehe auch

Keyboard Pattern Register, KBPATN	Keyboard Mask, KBMASK


KBMASK
Keyboard Mask, KBMASK

Adresse:	86h,	nicht bitadressierbar

Bitsymbol:	–	KB6	KB5	KB4	–	KB2	–	–

Bitnummer:	7	6	5	4	3	2	1	0

Symbol	Funktion

–	Reserviert für zukünftigen Gebrauch. Diese Bits sollten nicht mit einer 1 beschrieben werden.

KBn	Keyboard Mask n. Eine 1 gibt P0.n als Auslöser für einen Keyboard-Interrupt frei.

Der Inhalt des KBMASK-Registers nach einem Reset:

Reset	Inhalt

Jeder Reset	x000 x0xx

Siehe auch

Keyboard Pattern Register, KBPATN	Keyboard Control, KBCON

Interrupt Freigabe Register, IEN1


WDCON
Watchdog Control, WDCON

Adresse:	A7h,	nicht bitadressierbar

Bitsymbol:	PRE2	PRE1	PR0	–	–	WDRUN	WDTOF	WDCLK

Bitnummer:	7	6	5	4	3	2	1	0

Symbol	Funktion

–	Reserviert für zukünftigen Gebrauch. Diese Bits sollten nicht mit einer 1 beschrieben werden.

PREn	Taktvorteiler. Mit diesen drei Bits können zusammen mit dem Register WDL Watchdog-Perioden von 5,5 ms bis 174,8 ms @ 12 MHz eingestellt werden.

WDRUN	Watchdog Run. Eine 1 startet den Watchdog Timer, ein 0 stoppt ihn, d.h. nach einen Reset läuft der Watchdog Timer. Sind die Bits WDTE und WDSE aus 1 gesetzt, kann WDRUN nicht mehr gelöscht werden.

WDTOF	Watchdog Timer Time-Out. Das Bit wird gesetzt, wenn der 8-Bit Watchdog Timer unterläuft. Im Watchdog Modus kann eine Feed Sequenz dieses Bit löschen. Es kann aber auch durch die Software auf 0 gesetzt werden.

WDCLK	Watchdog input clock. Eine 1 wählt den Watchdog Oszillator, eine 0 den PCLK-Takt. Wenn die Bits  WDTE und WDSE gesetzt sind, ist WDCLK immer 1.

Das WDCON-Register verfügt über ein Schattenregister, dessen Inhalt die eigentliche Kontrolle über den Watchdog übernimmt. Nach dem Schreiben in das WDCON-Register muss dessen Inhalt in das Schattenregister kopiert werden. Das erfolgt mit einer Feed Sequenz. Bleibt diese Feed Sequenz nach dem Schreiben aus, wird ein Reset ausgelöst.

Der Inhalt des WDCON-Registers nach einem Reset:

Reset	Inhalt

Power-on Reset	111x x101
Watchdog Reset	111x x111

Siehe auch

Watchdog Feed	Watchdog Load, WDL


WFEED
Watchdog Feed, WFEED

Adresse:	WFEED1 C2h, WFEED2 C3h

Um den Watchdog am Unterlauf zu hindern, muss er innerhalb vorgegebener Zeiten rückgesetzt werden. Das geschieht mit der Watchdog Feed Sequenz. Dabei müssen die Register WFEED1 und WFEED2 unmittelbar nacheinander mit dem Wert A5h bzw. 5Ah beschrieben werden. Eine fehlerhafte Feed Sequenz führt sofort zu einem Reset.
Die Watchdog Feed Sequenz kopiert den Inhalt des Watchdog Control Registers WDCON in das Schattenregister und den Inhalt des Watchdog Load Registers WDL in den 8-Bit Abwärtszähler.

Feed Sequenz:

clr EA	; alle Interrupts abschalten

mov WFEED1, #A5h

mov WFEED2, #5Ah

setb EA	; Interrupts freigeben

Im Watchdog Modus muss jedem Schreibbefehl in das WDCON-Register sofort eine Feed Sequenz folgen, um den Watchdog Zähler mit dem 8-Bit Zählstand zu laden und das WDCON-Register in das Schattenregister zu kopieren. Erfolgt die Feed Sequenz nicht sofort, wird ein Reset ausgelöst.

z.B. WDRUN = 1

mov a, WDCON	; WDCON lesen

setb acc.2	; setze WDRUN = 1

mov WDL, #FFh	; 8-bit Down Counter beschreiben

clr EA	; Interrupts abschalten

mov WDCON, a	; WDCON mit gesetztem WDRUN Bit zurückschreiben

; Watchdog Feed:

mov WFEED1, #A5h

mov WFEED2, #5Ah

setb EA	; Interrupts freigeben

Der Inhalt des WDCON-Registers nach einem Reset:

Reset	Inhalt

Power-on Reset	111x x101
Watchdog Reset	111x x111

Siehe auch

Watchdog Control, WDCON	Watchdog Load, WDL


WDL
Watchdog Load Register, WDL

Adresse:	C1h

Der Watchdog Timer wird mit einem eigenen Oszillator getaktet, der eine Frequenz von 400 kHz erzeugt. Diese Frequenz kann auch als CPU-Takt verwendet werden.

Watchdog Modus, WDTE = 1:
Um den Watchdog am Unterlauf zu hindern, muss der 8-Bit Abwärtszähler innerhalb einer vorgegebenen Zeit mit dem Inhalt des Watchdog Load Registers nachgeladen werden. Das kann nur mit der Watchdog Feed Sequenz geschehen. Dabei müssen die Register WFEED1 und WFEED2 unmittelbar nacheinander mit dem Wert A5h bzw. 5Ah beschrieben werden. Eine fehlerhafte Feed Sequenz führt sofort zu einem Reset.
Die Watchdog Feed Sequenz kopiert den Inhalt des Watchdog Control Registers WDCON in das Schattenregister und den Inhalt des Watchdog Load Registers WDL in den 8-Bit Abwärtszähler.

Timer Modus, WDTE = 0:

Im Timer Modus wird mit jedem Takt der Inhalt des Watchdog Control Registers WDCON in das Schattenregister kopiert, es bedarf dazu keiner Feed Sequenz. Ein Unterlauf des 8-Bit Abwärtszählers setzt das WDTOF Bit, das einen Interrupt auslösen kann. Gleichzeitig wird der 8-Bit Abwärtszähler mit dem Inhalt des WDL-Register nachgeladen. Will man den 8-Bit Abwärtszähler vor dem Unterlauf mit dem WDL-Register nachladen, ist dazu eine Feed Sequenz erforderlich.

Der Inhalt des WDL-Registers nach einem Reset:

Reset	Inhalt

Jeder Reset	1111 1111

Siehe auch

Watchdog Control, WDCON	Watchdog Feed, WFEED


TRIM
Trim Register, TRIM

Adresse:	96h,	nicht bitadressierbar

Bitsymbol:	–	ENCLK	TR5	TR4	TR3	TR22	TR1	TR0

Bitnummer:	7	6	5	4	3	2	1	0

Symbol	Funktion

–	Reserviert für zukünftigen Gebrauch. Diese Bits sollten nicht mit einer 1 beschrieben werden.

ENCLK	Enable Clock Out. Mit einer 1 wird die Hälfte der Taktfrequenz am XTAL2-Pin (P0.3) ausgegeben.

TRn	Trim Bits. Mit diesen Bits kann die Frequenz des internen RC-Oszillators gewählt werden. Größere TRIM-Werte führen zu einer Verkleinerung der Frequenz. Nach einem Rest werden diese Bits mit der Werkseinstellung für 7,373 MHz geladen. Die Genauigkeit liegt bei 1%.

Der Inhalt des TRIM-Registers nach einem Reset:

Reset	Inhalt

Power-on Reset	x1nn nnnn (n = Werkseinstellung)

Siehe auch

Port 0	User Konfigurations-Byte, UCFG1

Taktteiler Register, DIVM


DIVM
Takt Teiler Register, DIVM

Adresse:	95h

Das DIVM-Register teilt den Oszillatortakt mit dem doppelten Wert seines Inhalts. Mit dieser Eigenschaft kann die CPU-Frequenz stark verlangsamt werden. Damit ist ein geringerer Energieverbrauch erzielbar als mit dem Idle-Modus. Zeit unkritische Passagen des Programms können sehr langsam ablaufen. In Interrupts kann die Frequenz sofort erhöht werden, sodass das Reaktionsvermögen des Controllers erhalten bleibt. Der Inhalt des DIVM-Registers kann jederzeit geändert werden.

Die CPU-Frequenz ist die Oszillatorfrequenz geteilt durch (2 x DIVM). Durch Beschreiben des DIVM-Registers mit dem Wert FFh = 255 wird die interne Oszillatorfrequenz von 7,373 MHz auf 14,457 kHz reduziert.

Der Inhalt des DIVM-Registers nach einem Reset:

Reset	Inhalt

Jeder Reset	0000 0000

Siehe auch

Trim Register, TRIM	User Konfigurations-Byte, UCFG1


RTCCON
Real Time Clock Control, RTCCON

Adresse:	D1h,	nicht bitadressierbar

Bitsymbol:	RTCF	RTCS1	RTCS0	–	–	–	ERTC	RTCEN

Bitnummer:	7	6	5	4	3	2	1	0

Symbol	Funktion

–	Reserviert für zukünftigen Gebrauch. Diese Bits sollten nicht mit einer 1 beschrieben werden.

RTCF	Real Time Clock Flag. Die Hardware setzt dieses Bit, wenn der Zählerstand des RTC null erreicht. Es kann einen Interrupt auslösen und muss durch die Software gelöscht werden.

RTSCn	Real Time Clock Source. Diese Bits wählen zusammen mit den Bits FOSC0-2 im UCFG1-Register die Taktquelle für den RTC aus. Diese kann sein: XTAL1-2, RC-Osz., RC-Osz. mit DIVM, Watchdog Timer etc. (vgl. User Manual). Diese Bits können nur mit RTCEN = 0 geändert werden.

ERTC	RTC Interrupt Enable. Watchdog Timer und RTC teilen sich denselben Interrupt. Um die Herkunft zu bestimmen, kann das Bit RTCF gelesen werden. Zur Freigabe des Interrupt müssen die Bits ERTC, EWDRT (IEN0) und EA (IEN0) gesetzt werden.

RTCEN	RTC Enable. Eine 1 schaltet den RTC an, eine 0 aus.

Der Inhalt des RTCCON-Registers nach einem Reset:

Reset	Inhalt

Nur Power-on Reset	011x xx00

Siehe auch

RTC Reload Register, RTC	Interrupt Freigabe, IEN0


RTC
RTC Reload Register, RTC

Adresse:	RTCH: D2h,  RTCL: D1h

Der LPC912 hat ein einfaches Real Time Clock System (RTC), das dem Anwender einen funktionierenden Timer auch im Power-down Modus zur Verfügung stellt. Der RTC kann als Interruptquelle für eine Systemzeitbasis oder als Wake-up-Quelle aus dem Power-down Modus dienen. Der RTC ist ein 16-Bit Abwärtszähler mit einem 7-Bit Vorteiler. Die Taktquelle für den RTC wird mit dem RTC Control Register RTCCON ausgewählt.

Bei einem Unterlauf des RTC wird sein Inhalt aus den Registern RTCH und RTCL nachgeladen und der Vorteiler mit 7Fh beschrieben. Derselbe Vorgang erfolgt auch beim Beschreiben des Bits RTCEN im Register RTCCON mit einer 1.

Der Inhalt des RTC-Registers nach einem Reset:

Reset	Inhalt

Nur Power-on Reset	0000 0000

Siehe auch

RTC Control Register, RTCCON


SPCTL
SPI Control Register, SPCTL

Adresse:	E2h,	nicht bitadressierbar

Bitsymbol:	SSIG	SPEN	DORD	MSTR	CPOL	CPHA	SPR1	SPR0

Bitposition:	7	6	5	4	3	2	1	0

Symbol	Funktion

SSIG	SS-Pin Ignore. Mit einer 1 entscheidet das Bit MSTR über Master und Slave, mit einer 0 entscheidet der Pin SS (P2.4).

SPE	SPI Enable. SPE = 1 aktiviert das Serielle Peripherie Interface SPI. Dabei werden die Pins P2.2, P2.3, P2.4 und P2.5 mit der SPI-Einheit verbunden. Die Pegel dieser Pins können danach nicht mehr durch Bitbefehle geändert werden. SPE = 0 deaktiviert das Serielle Peripherie Interface SPI und alle Pins können als I/O-Pins verwendet werden.

DORD	Data Order. DORD = 1 wählt als Reihenfolge für die SPI-Datenübertragung das LSB zuerst, DORD = 0 das MSB zuerst.

MSTR	Master/Slave. MSTR = wählt den Master SPI Modus, MSTR = 0 wählt den Slave SPI Modus.

CPOL	Clock Polarity. Mit CPOL = 1 liegt die SCK-Leitung im inaktiven Zustand an Plus, und es werden negative Taktsignale ausgegeben. Mit CPOL = 0 liegt die SCK-Leitung im inaktiven Zustand an Minus, und es werden positive Taktsignale bei der Datenübertragung ausgegeben.

CPHA	Clock Phase. Mit CPHA = 1 wird ein gültiges Datenbit bei der zweiten Flanke des Taktsignals ausgegeben, mit CPHA = 0 bei der ersten Flanke des Taktsignals.

SPR	SPI Clock Rate Select. Diese beiden Bits bestimmen die Taktfrequenz des Masters, im Slave-Modus haben sie keine Funktion.

SPR1	SPR0	SCK = f(osc) geteilt durch

0	0	4

0	1	16

1	0	64

1	1	128

Der Inhalt des SPCTL-Registers nach einem Reset:

Reset	Inhalt

Jeder Reset	0000 0100

Siehe auch

Interrupt Enable 1, IEN1	SPI Statusregister, SPSTAT

Port 1, P1	SPI Datenregister, SPDAT


SPSTAT
SPI Status Register, SPSTAT

Adresse:	E1h,	nicht bitadressierbar

Bitsymbol:	SPIF	WCOL	---	---	---	---	---	---

Bitposition:	7	6	5	4	3	2	1	0

Symbol	Funktion

SPIF	SPI Interrupt Flag. Dieses Bit wird nach einem seriellen SPI-Datentransfer gesetzt. Ein serieller Interrupt wird ausgelöst, wenn das Bit ESPI im Interrupt Freigaberegister IEN1 und das Bit EA im Interrupt Freigaberegister IEN0 gesetzt sind. Das Bit SPIF wird gelöscht, wenn die Software eine 1 !! in dieses Bit schreibt.

WCOL	Write Collision Flag. Das Bit wird gesetzt, wenn während eines laufenden SPI-Datentransfers das SPI Datenregister erneut beschrieben wird. Das Bit WCOL wird gelöscht, wenn die Software eine 1 !! in dieses Bit schreibt.

--	Diese Bits werden nicht benutzt. Die Software sollte sie nicht beschreiben, damit spätere Hardware-Erweiterungen zur bestehenden Software kompatibel bleiben.

Der Inhalt des SPSTAT-Registers nach einem Reset:

Reset	Inhalt (x heißt, Bit ist unbestimmt)

Jeder Reset	00xx xxxx

Siehe auch

Interrupt Enable 1, IEN1	SPI Kontrollregister, SPCTL

SPI Datenregister, SPDAT


SPDAT
SPI Datenregister, SPDAT

Adresse:	E3h,	nicht bitadressierbar

Das SPI Datenregister kann im Master- als auch im Slave-Modus beschrieben werden. Das Beschreiben im Master-Modus startet den Datentransfer. Bei jedem Takt geben der Master und der Slave ein Bit des SPI Datenregisters SPDAT auf die Leitung, der Master auf die MOSI-, der Slave auf die MISO-Leitung. Nach dem Transfer steht das Byte des Masters im Slave und das Byte des Slaves im Master; es findet also stets ein Datenaustausch statt. Gleichzeitig wird das Bit SPIF im SPI Statusregister SPSTAT gesetzt. Dieses kann einen Interrupt auslösen.

Der Slave wird nicht adressiert, sondern über seinen Eingang Slave Select SS oder mit dem Bit SSIG und MSTR im SPI Control Register SPCTL ausgewählt. Sind mehrere Slaves im System vorhanden, muss der Master zu jedem Slave über einen Port eine gesonderte Leitung legen und mit Masse den gewünschten Slave auswählen.

Der Inhalt des SPDAT-Registers nach einem Reset:

Reset	Inhalt

Jeder Reset	0000 0000

Siehe auch

SPI Statusregister, SPSTAT

SPI Kontrollregister, SPCTL


FMCON
Flash Memory Control, FMCON

Adresse:	E4h,	nicht bitadressierbar

Bitsymbol:	BUSY	---	---	---	HVA	HVE	SV	OI

Bitposition:	7	6	5	4	3	2	1	0

Das Flash Control Register FMCON ist beim Lesen ein Statusregister, beim Schreiben ein Befehlsregister. Beim Beschreiben werden alle Statusbits gelöscht.

Symbol	Funktion (Lesen)

--	Diese Bits werden nicht benutzt. Die Software sollte sie nicht beschreiben, damit spätere Hardware-Erweiterungen zur bestehenden Software kompatibel bleiben.

HVA	High Voltage Abort. Dieses Bit wird gesetzt, wenn während des Lösch- oder Programmiervorgangs ein Interrupt oder ein Brown-out auftritt. Es wird ferner gesetzt, wenn zu Beginn des Programmiervorgangs die Brown-out Erkennung abgestellt ist.

HVE	High Voltage Error. Dieses Bit wird bei einem Fehler in der Brennspannungserzeugung gesetzt.

SV	Security Violation. Das Bit wird bei einem Zugriff auf einen geschützten Sektor oder Page gesetzt.

OI	Operation Interrupted. Das Bit wird bei einem Interrupt während des Programmierens gesetzt. Wenn das Bit gesetzt ist, muss der Schreibvorgang wiederholt werden.

FMCON-Befehle:

00h:	Ladebefehl für das Flash Memory, alle Pageregister und die Update Flags werden gelöscht.

68h:	Lösch- und Programmierbefehl für das Flash Memory. 16 Byte können maximal gleichzeitig geschrieben werden. Es werden nur die Bytes programmiert, die in das Pageregister geschrieben wurden. Die CPU wird mit diesem Befehl in den Idle Modus versetzt (Dauer 4 ms) und nach dem Programmieren wieder entlassen. Interrupts sollten dabei nicht auftreten. Das Flash Memory wird mit dem movc Befehl gelesen.

6Ch:	Lösch-, Programmier- und Lesebefehl für die Flash Elements. Es kann nur ein Element gleichzeitig beschrieben werden. Die CPU wird mit diesem Befehl in den Idle Modus versetzt (Dauer 4 ms) und nach dem Programmieren wieder entlassen. Interrupts sollten dabei nicht auftreten.

Adresse	Flash Element

00h	User Configuration Byte 1, UCFG1

02h	Boot Vector

03h	Status Bits

08h	Security Byte für Sector 0

09h	Security Byte für Sector 1

0Ah	Security Byte für Sector 2

0Bh	Security Byte für Sector 3

10h	Hersteller ID

11h	Chip ID 1

12h	Chip ID 2

Programmierbeispiel für das Flash Memory.

; Übergabe:

; r3 = Zahl der Byte, maximal 16

; r4 = Pageadresse MSB

; r5 = Pageadresse LSB

; r0 = Zeiger auf Daten im RAM

; Rückgabe:

; r0 = Status

; c = 0 ok, c = 1 Fehler

Memory Programmierung:

FMCON = #0	; Ladebefehl, löscht das Pageregister

FMADRH = r4	; Adresse MSB

FMADRL = r5	; Adresse LSB

for r3

FMDATA = @r0	; Daten ins Pageregister schreiben

inc r0	; nächstes Byte

next

FMCON = #68h	; Lösch/Programmbefehl

; Die CPU geht hier in den Idle Modus, bis der Schreibvorgang zu Ende ist (4 ms). Interrupts können den Idle Modus unterbrechen.

Status zurückgeben:

r0 = FMCON

a = r0: anl a, #0Fh

if a = #0 then

clr c: ret	; ok

end if

setb c	; Fehler

ret

Programmierbeispiel für ein Flash Element.

; Übergabe: r0 = Elementadresse , a = Wert

; Rückgabe: r0 = Status, c = Erfolg

Flash Element schreiben:

FMADRL = r0	; Adresse

FMCON = #6Ch	; Reihenfolge beibehalten !

FMDATA = a	; Wert

; Die CPU geht hier in den Idle Modus, bis der Schreibvorgang zu Ende ist (4 ms). Interrupts können den Idle Modus unterbrechen.

sjmp Status zurückgeben

Lesebeispiel für ein Flash Element.

; Übergabe: a = Elementadresse

; Rückgabe: a = Inhalt

Flash Element lesen:

FMADRL = a	; Adresse

FMCON = #6Ch	; Reihenfolge beibehalten !

a = FMDATA	; kein Idle Modus

ret

Der Inhalt des FMCON-Registers nach einem Reset:

Reset	Inhalt

Jeder Reset	0111 0000

Siehe auch

Flash Datenregister, FMDATA	Flash Adressregister, FMADR


FMDATA
Flash Datenregister, FMDATA

Adresse:	E5h,	nicht bitadressierbar

Das Flash Datenregister FMDATA ist das Fenster zum internen Flash des Controllers und zu den Flash Elements.

Internes Flash

Die Daten, die in das FMDAT Register geschrieben werden,  werden in eines der 16 Page Register kopiert, auf das das Flash Memory Address Low Register FMADRL zeigt. Gleichzeitig wird das entsprechende Update Flag gesetzt und der Adresszähler FMADRL um 1 erhöht. Die Update Flags zeigen an, welche Bytes des Page Registers zum Brennen übernommen werden. Page Register ohne neuen Inhalt, d.h. bei denen die Update Flags nicht gesetzt sind, werden nicht gebrannt.

Bei einem Ladebefehl (00h) in das Register FMCON werden alle 16 Page Bytes und alle Update Flags gelöscht. Beim Schreiben in das FMDATA Register werden die Daten in das Page Byte kopiert, das von den unteren vier Bits des Flash Memory Address Low Register FMADRL adressiert wird.

FMADRH sollte also immer mit dem Wert 0000 00aa und
FMADRL immer mit aaaa 0000 beschrieben werden, falls man 16 Byte gleichzeitig beschreiben möchte.
Für das Schreiben eines Einzelbytes kann die konkrete Adresse in FMADRL mit aaaa aaaa genannt werden.

Die Pageadresse in den Registern FMADRH und FMADRL kann auch nach dem Laden der Page Register geschrieben werden.

Nach dem Schreiben des Programmierbefehls (68h) in das Register FMCON werden alle Bytes des Page Registers, dessen Update Flags gesetzt sind, an die Adresse des Flash geschrieben, die aus den unteren zwei Bit des Flash Memory Address High Registers FMADRH, den oberen vier Bits des Flash Memory Address Low Registers FMADRL und der Adresse (0 bis Fh) des Page Registers entsteht.

Flash Elements

Flash Elements sind zwar auch Flash Bytes, befinden sich aber nicht im Programmspeicher. Sie haben eine ähnliche Funktion wie die SFR. Das Beschreiben der Flash Elements erfolgt auch über das FMDATA Register. Die Adresse (von 0 bis 12h) wird in das Flash Memory Address Low Register FMADRL geschrieben. Es sind nur Einzelbytes programmierbar. Die Reihenfolge ist dabei wichtig:

1. Schreibe die Adresse (0 bis 12h) in FMADRL.
2. Beschreibe das FMCON Register mit dem Wert 6Ch.
3. Schreibe die Daten in FMDATA.
Punkt 3 startet den Programmiervorgang, die CPU geht solange in den Idle Modus.

Für das Lesen eines Flash Elements muss Punkt 3 wie folgt geändert werden:
3. Lies das FMDATA Register.
Die CPU geht dabei nicht in den Idle Modus.

Der Inhalt des FMDATA-Registers nach einem Reset:

Reset	Inhalt

Jeder Reset	0000 0000

Siehe auch

Flash Memory Control, FMCON	Flash Adressregister, FMADR


FMADR
Flash Adressregister, FMADR

Das Flash Adressregister besteht aus zwei Byte: FMADRH, Adresse E7h und FMADRL, Adresse E6h. Der Flash Speicher ist im LPC912 1 kB groß = 1024 Byte. In diesem Bereich befindet sich das Programm. Freie Plätze können als Datenspeicher verwendet werden. Zur Adressierung des Speichers braucht man 10 Bits. Daher werden von FMADRH nur die unteren zwei Bits benutzt.

Die Beschreiben erfolgt über das FMDATA und das FMCON Register, das Lesen mit dem movc Befehl.

Der Speicher des LPC912 ist in vier Sektoren mit je 256 Byte und in 64 Pages mit je 16 Byte eingeteilt. Jeder Sektor kann mit einem Security Byte vor dem Lesen und Beschreiben geschützt werden.

Der Inhalte des FMADR-Register nach einem Reset:

Reset	Inhalt

Jeder Reset	0000 0000

Siehe auch

Flash Memory Control, FMCON	Flash Datenregister, FMDATA


UCFG1
User Configuration, UCFG1

Flash Element Byte

Adresse:	0h

Bitsymbol:	WDTE	RPE	BOE	WDSE	---	FOSC2	FOSC1	FOSC0

Bitposition:	7	6	5	4	3	2	1	0

Symbol	Funktion

WDTE	Watchdog Timer Reset Enable. Eine 1 erlaubt den Watchdog Reset, eine 0 verhindert ihn. Trotzdem kann der Timer zur Interrupterzeugung benutzt werden.

RPE	Reset Pin Enable. Eine 1 gibt dem Pin P1.5 die Resetfunktion, eine 0 benutzt die interne Resetbeschaltung und P1.5 kann als Eingang verwendet werden. Ein Power-up ignoriert die Einstellung und der Pin P1.5 hat Resetfunktion, damit die ICP-Programmiermöglichkeit erhalten bleibt.

BOE	Brown-out Erkennung. Eine 1 erlaubt Brown-out Erkennung, eine 0 verhindert sie.

WDSE	Watchdog Safety Enable. Zusammen mit dem Bit WDTE steuert WDSE die Verhaltensweise des Watchdog.

--	Dieses Bit wird nicht benutzt, es sollte 0 bleiben.

FOSC	Factory Oscillator. Zusammen mit dem Bit WDTE steuert WDSE die Verhaltensweise des Watchdog.

0 0 0	Hochfrequenz Quarz oder Resonator, 4 MHz bis 12 MHz. Verwendet XTAL1-2

0 0 1	Mediumfrequenz Quarz oder Resonator, 100 kHz bis 4 MHz. Verwendet XTAL1-2

0 1 0	Niederfrequenz Quarz, 20 kHz bis 100 kHz. Verwendet XTAL1-2

0 1 1	Interner RC Oszillator, 7,373 MHz. XTAL sind I/O-Pins

1 0 0	Watchdog Oszillator, 400 kHz +20%/-30%. XTAL sind I/O-Pins

1 1 1	Externer Takt an XTAL1. XTAL2 kann als I/O-Pin verwendet werden

Werkseinstellung ist:  0110 0011.

Siehe auch

Flash Memory Control, FMCON	Watchdog Timer, WDCON


SEC
Sector Security, SECx

Flash Element Byte

Adresse:	SEC0: 8h, SEC1: 9h, SEC2: Ah, SEC3: Bh

Bitsymbol:	---	---	---	---	---	EDISx	SPEDISx	MOVCDISx

Bitposition:	7	6	5	4	3	2	1	0

Symbol	Funktion

--	Dieses Bit wird nicht benutzt, es sollte 0 bleiben.

EDIS	Erase Disable. Eine 1 schütz den Sektor x vor dem Löschen im IAP Modus. Das Bit und sein zugehöriger Sektor kann nur  mit einem externen Programmiergerät gelöscht werden.

SPEDIS	Sector Program Erase Disable. Eine 1 verhindert das Löschen oder Programmieren des ganzen oder eines Teils des Sektors x. Das Bit kann zusammen mit seinem Sektorinhalt durch einen Sektorlöschbefehl IAP oder einem externen Programmiergerät gelöscht werden.

MOVCDIS	MOVC Disable. Eine 1 verbietet den movc Befehl in dem betreffenden Sektor x. Das Bit kann nur gelöscht werden, wenn der Sektor gelöscht wird.

Werkseinstellung ist:  0000 0000.

Siehe auch

Flash Memory Control, FMCON


BOOTVEC
Boot Vector, BOOTVEC

Flash Element Byte

Adresse:	2h

Im BOOTVEC Register können nur die Bits 0 bis 4 beschrieben werden, die Bits 5 bis 7 sollten mit 0 beschrieben werden.

Wenn als Reset Adresse der Boot Vector gewählt ist, stellt dieses Register das High Byte der Boot Adresse dar. Das Low Byte der Boot Adresse ist stets 00. Die Werkseinstellung ist 0000 0000.

Nach einem Reset testet der Controller das Boot Status Bit im Flash Elements Register BOOTSTAT. Ist das Bit eine 0, wird die Adresse 0000h als Startadresse gewählt, ist das Bit eine 1, bildet das Register BOOTVEC die High Adresse und die Low Adresse wird mit 00 beschrieben.

Siehe auch

Flash Memory Control, FMCON	Boot Status, BOOTSTAT


BOOTSTAT
Boot Status, BOOTSTAT

Flash Element Byte

Adresse:	3h

Im BOOTSTAT Register hat nur das Bit 0 die Funktion des Boot Status Bit, die Bits 1 bis 7 sollten mit 0 beschrieben werden.

Nach einem Reset testet der Controller das Boot Status Bit im Flash Elements Register BOOTSTAT. Ist das Bit eine 0, wird die Adresse 0000h als Startadresse gewählt, ist das Bit eine 1, bildet das Register BOOTVEC die High Adresse und die Low Adresse wird mit 00 beschrieben.

Die Werkseinstellung ist 0000 0000.

Siehe auch

Flash Memory Control, FMCON	Boot Vector, BOOTVEC


MFGID
Chiperkennung

Flash Element Byte

Adresse:	MFGID: 10h,	ID1: 11h,	ID2: 12h

Die Signatur des LPC912 ist in drei Flash Element Bytes abgelegt. Diese Bytes können nur gelesen werden. Die Manufacturer ID ist 15h, die Chip ID1 ist DDh, die Chip ID2 ist 14h. Für den LPC913 ist die Chip ID2 15h und für den LPC914 16h etc.

Siehe auch

Flash Memory Control, FMCON