embedded systems ss2018 -...
Post on 18-Oct-2019
11 Views
Preview:
TRANSCRIPT
04EI
Embedded Systems SS2018
Prof. Dr. A. Irber
Fakultät Elektrotechnik und Informationstechnik
04EI
Was ist ein Embedded System?
� Unter Embedded Systems (ES) versteht man applikationsspezifische
Mikrocomputersystemen (Hardware + Software), die in Geräten, Anlagen
und/oder Maschinen eingebettet sind, um diese zu steuern.
� Meist hohes Maß an Parallelverarbeitung und kurze Reaktionszeiten auf
externe Ereignisse notwendig ( Realzeit-Bedingungen )
� Oft werden Multitasking Realtime Betriebssysteme (RTOS) eingesetzt
25.02.16ES - Version 2.0 Seite 2
04EI
Embedded Systems
27.09.08ES - Version 2.0 Seite 3
� Embedded Systems enthalten Rechnereinheiten, die u.a. aus
• Mikrocontrollern
• Mikroprozessoren
• Digital Signal Prozessoren (DSP’s )
bestehen
04EI
27.09.08ES - Version 2.0 Seite 4
Definitionen
� Microprocessor (µP)
Ein Mikroprozessor bildet die Zentraleinheit eines Computers. Direkt an diese CPU sind Speicher integriert und Schnittstellen zu weiteren Schaltungsmodulen. (Beispiele: Intel Core I7, Athlon (AMD), PowerPC (Apple, IBM, NXP(Freescale))
Ein digitaler Signalprozessor ist ein dezidiertes System zur Aus-führung von zeitkritischen, sich wiederholenden und rechenintensiven Aufgaben. (Beispiele: TMS320, Sharc, DSP56xx, Tricore, ...)
Mikrocontroller sind Prozessoren, die neben der CPU und Speicher über eine Vielfalt von Peripherie auf dem Chip verfügen (System on Chip), um Steuer- und Regelungsaufgaben in „embedded systems“ zu übernehmen. (Beispiele: Atmega 328, 68HC11, C164, PIC, Infineon XMC, Freescale MP55xx,, .).
� Digital Signal Processor (DSP)
� Microcontroller (µC)
04EI
Klassifizierung
27.09.08ES - Version 2.0 Seite 5
04EI
27.09.08ES - Version 2.0 Seite 6
Embedded Systems - Inhaltsübersicht
Inhalt:
– Einführung
– Prinzipien der C166-Architektur
– Die CPU des C164
– Adreß- und Speicherorganisation
– Echtzeit-Betriebssystem
– Interrupts
– Ein-/Ausgabeeinheiten
• General Purpose Timer 1
• Ports
• Asynchrone Serielle Schnittstelle
• Capture Compare Unit 2
• A/D - Wandler
– Systemunterstützung
• Taktverteilung und -steuerung
• Leistungsaufnahme
• Realtime Clock
• Watchdog Timer
– CAN - Schnittstelle
– Entwicklungs-Tools:
• C für C164 - C166
• Code-Generator
• Integrierte
Entwicklungsumgebung
• Simulation
• Echtzeit-Betriebssystem
04EI
27.09.08ES - Version 2.0 Seite 7
Embedded Systems - verwendete Produkte
� Mikrocontroller C164 der Firma Infineon
� Integrated Development Environment (IDE �Vision2) der Firma Keil
� Digital Application virtual Engineer (Dave) der Firma Infineon
http://www.infineon.com/
http://www.keil.com/
04EI
27.09.08ES - Version 2.0 Seite 8
Low-Cost* Different RAM Size* 16 M Addr. Range* 3/5 16-bit Timers* Serial i/f SSP, SSC
C165
* 2KB RAM* 3V* P-MQFP-100* P-TQFP-100
* 1KB RAM* SSP* 3V* Red. Peripherals* P-TQFP-100
C163* Reduced Chip Selects* Wide Ext. Bus Support* 3 V Options* 25 MHz Option * 16MHz CPU
* 4 M Adreßraum* 1-2KB RAM* P-MQFP-80
C161RI
* 3KB RAM
� � � � � � � � � �
* I2C Schnittstelle* ADC
C161V/K/O
* Großes RAM* Großes Flash
� � � � � � � � � �
* I2C Interface* CAPCOM* 2 USARTs* CAN / J1850* ADC
C161xx
* CAPCOM* PWM* Serial Interfaces* Timer* 10-bit / 8bit ADC* Full Bus Support/
MUX Bus only
8xC166
* 1KB RAM* 32KB ROM* 32KB Flash* P-MQFP-100
* Ausgewogene Peripheriefür eine Großzahl vonApplikationen
* 1K / 2 KB RAM* ROM / Flash / OTP
General Purpose
C164CI
* 2KB RAM* 64KB OTP/ROM/Flash* Full-CAN 2.0B * Power Management / RTC* Motor Control Peripheral* P-MQFP-80
* 16 MByte Adreßraum* 2/4 KByte RAM* 32 CAPCOM* 4 PWM* 2 Serielle Schnittstellen* 5 Timer* Chip Selects
erleichtern die System-erweiterung
* Extensive I/O
C167CR/SR
* CAN (nur CR)* 4K RAM* PLL
C167CS
* 11KB RAM* 256K Flash* 2 CAN Module* 24 ADC* RTC & Power Managem.* PLL
* 2KB RAM
C167
High-Integration
C167S
* 32K ROM* 2KB RAM* PLL
Die unterschiedlichen Derivate der C166-Familie
04EI
Architektur des C164CI
Die C164 fußt auf der Basisarchitektur der C166 Familie ,die um 1990 von der Firma Siemens in München neu entwickelt wurde. Im Gegensatz zu anderen Mikrocontrollern und Mikroprozessoren wurde hierbei ein moderneres, neueres Konzept realisiert. Hauptaugenmerk wurde hierbei
auf eine effizientere Interrupt Behandlung, die optimierte Fähigkeit mit einzelnen Bits schnell und effizient zu arbeiten und auf einen erhöhten Datendurchsatz zwischen der On-Chip Peripherie, dem Speicher und der CPU zu erlangen, gelegt. Zudem spielte die Erweiterbarkeit mit anderen Peripherie -Modulen eine wichtige Rolle, um für verschiedene Anwendungen einen optimierten Mikrocontroller zu erhalten. Die folgende Abbildung zeigt die interne Blockstruktur des C164ers und gibt einen Überblick wie die einzelnen Module miteinander gekoppelt sind.
25.02.2016Embedded Systems Seite 1
04EI
25.9.2009Embedded Systems Seite 2
164CL
XTAL
C166-Core
Port 5 Port 3
CPU
Dua
l Por
t
RAM
2 KByte
Interrupt Controller
Watchdog
Peripheral Data
External Instr./Data
Instr./Data
USART
ASC
BRG
GPT1
16
16
16
1632
PEC
64 KROM
(C164 CI-8RM)
orOTP
(C164CI-8EM)
Interrupt Bus
Data
Data
Port 8
BRG
SSC
Sync. Channel(SPI)
PLL-Oscillatorprog. Multiplier:
0.5; 1; 1.5; 2;2.5; 3; 4; 5
XB
US
(16-
bit N
ON
MU
X D
ata
/ A
ddre
sses
)
T2
T4
T3
13 ext. IRFull-CANInterfaceV2.0Bactive
RTC
10-BitADC
Tim
er 7
Tim
er 8
Port 1
Tim
er 1
3
1 Comp.Channel
3/6 CAPCOMChannels
CAPCOM6 Unit forPWM Generation
8 9 4 16
6
16
Port 4
8-Channels
External Bus8/16 bit
MUX only&
XBUSControl
CAPCOM 2
8-Channel
C164CI Blockschaltbild
P4.6/ CAN TxD
P4.5/ CANRxD
Por
t 0
04EI
Strukturelemente
Die wichtigsten Strukturelemente sind der
CPU-Kern, der Interrupt Controller und die Peripherie-Einheit.
Diese drei Kernblöcke bestimmen die Performance und die Reaktions-fähigkeit des Controllers auf externe Ereignisse und werden in den folgenden Abschnitten etwas detaillierter betrachtet. Desweiteren
wurde ein Oszillator integriert, der über eine zusätzliche PLL verfügt, die
den externen Takt mit einem einstellbaren Faktor multipliziert bevor er an die CPU und die interne Peripherie weitergeleitet wird. Neben einem internen RAM Bereich verfügen einige Derivate auch über ein Masken-ROM, ein OTP-ROM bzw. ein FLASH Modul.
25.9.2009Embedded Systems Seite 3
04EI
Die Central Processing Unit des C164
Die Hauptaufgabe der CPU ist das Holen und Dekodieren von Befehlen, die Steuerung und Verarbeitung von Operanden in der Arithmetic Logic Unit (ALU) sowie das Retourspeichern der Ergebnisse. Weiters werden von der CPU die internen Busse zwischen den einzelnen Modulen gesteuert.
Die Kommunikation mit dem externen Bus wird jedoch nicht von der CPU gehandhabt, sondern erfolgt über einen eigenen Externen Bus Controller (EBC). Die folgende Abbildung gibt einen groben
Überblick über die Interna der CPU.
Die Bestandteile der CPU sind eine 16-Bit ALU, die vor allem Additionen und Subtraktionen durchführt. Für Rotate- und Shift-Operationen ist ein eigener Barrel Shifter implementiert. Ein BitMasken Generator erlaubt ein maskieren von einzelnen Bits und für Multiplikationen und Divisionen ist ebenfalls eine eigene Hardware vorhanden.
25.9.2009Embedded Systems Seite 4
04EI
25.9.2009Embedded Systems Seite 5
On-Chip(EP)ROM
SP
STK OV
STK UV
CPU - Blockschaltbild
CPU
MDL
MDH
Barrel-Shifter
ALU
16-bit
Mul./Div.-HW
Bit-Mask Gen.
Code Seg.Ptr
On-ChipStaticRAM
R15
R0
STK OV
STK UV
4-StagePipeline
32
16
16
Exec. Unit
Instr. Ptr.
Instr. Reg.
SYSCON
BUSCON 0
BUSCON 1
BUSCON 2
BUSCON 3
BUSCON 4
ADDRSEL 1
ADDRSEL 2
ADDRSEL 3
ADDRSEL 4
Context Ptr.Data Page
Pointer
SFR
PSW
General
R15
R0
Purpose
Registers
04EI
Die Central Processing Unit des C164 -2
Mit Hilfe dieser zahlreichen Funktionen ist es möglich, dass die meisten Befehle in einem einzigen Maschinenzyklus abgearbeitet werden können.
Einzige Ausnahmen sind Befehle zur Multiplikation und Division sowie die Verzweigungs (Branch-) Befehle.
Entsprechend dem Resultat werden auch zahlreiche Flags im Programm-Status-Wort gesetzt. Folgende Abbildung gibt dieses Register kurz wieder.
25.2.2016Embedded Systems Seite 6
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
ILVL IEN HLDEN
- - - USR0 MULIP
E Z V C N
r/w r/w r/w - - - r/w r/w r/w r/w r/w r/w r/w
04EI
Die Central Processing Unit des C164 -3
Das Negative Flag (N) wird gesetzt, wenn die ALU Operation ein negatives Ergebnis liefert. Negative Zahlen werden hierbei immer als Zweierkomplement einer positiven Zahl dargestellt.
Das Carry Flag (C) kennzeichnet ein Carry/Borrow bei einer Addition/Subtraktion. Bei Shift und Rotate Operationen nimmt dieses Bit den Wert des jeweils hinausgeschobenen bzw. rotierenden Bits an.
Wird bei einer arithmetischen Operation der Zahlenbereich überschritten so wird das Overflow Flag (V) gesetzt.
Ist das Ergebnis einer Operation Null, so wird das Zero Flag (Z) gesetzt.
Das End of Table-Flag (E) wird gesetzt, falls der Wert des Quellenoperanden einer Instruktion gleich 0x8000 oder 0x80 ist.
25.2.2016Embedded Systems Seite 7
04EI
Die Central Processing Unit des C164 - 4
Die Execution Unit besteht aus dem Instruction Pointer (IP), der auf den jeweils gültigen Befehl zeigt. Der Instruction Pointer ist vom User aus nicht direkt manipulierbar sondern nur indirekt über Beeinflussung des Programmflusses (Jump, Call, etc.). Zugeordnet zur Execution Unit sind weiters das Instruction Register und die CPU Befehlspipeline. Der C164 besitzt eine 4-stufige Befehlspipeline,
die es erlaubt, dass gleichzeitig mehrere Befehle “aktiv” sind. Die Pipeline des C164 ist in vier Phasen untergliedert.
In der FETCH Phase wird ein Befehl aus dem Programmspeicher geholt.
Dieser wird in der nächsten Phase, der DECODE Phase, dekodiert.
In der Execution Phase wird der Befehl dann ausgeführt und in der WRITE BACK Phase werden dann die daraus resultierenden
Werte retourgesichert. In der folgenden Abbildung ist dies illustriert.
25.2.2016Embedded Systems Seite 8
04EI
25.2.2016Embedded Systems Seite 9
Fetch
Decode
Execute
Write Back
1. Instr. 2. Instr. 3. Instr. 4. Instr.
Time
1 Machine Cycle = 100 ns at 20 MHz CPU clock
Vierstufige Befehls-Pipeline
� 100ns effektive Befehlsausführungszeit (20 MHz fCPU)
� Drei Pre-Fetch-Schritte in Wortbreite (Bus Controller) zur Unterstützung der Pipeline
� Optimierte Sprungausführung
–Für Sprungbefehle (Jump, Cond. Jump, Call, Return,...) wird normaler Weise nur ein zusätzlicher Maschinenzyklus benötigt, um den Befehl an der Zieladresse zu holen
� Jump Cache
–Für die Ausführung von Schleifen ist kein zusätzlicher Maschinenzyklus erforderlich
04EI
Die Central Processing Unit des C164 -4
Im Weiteren sind in der CPU enthalten:
� Code Segment Pointer (CSP) und Instruction Pointer (IP) zur Programmcode Adressierung
� Data Page Pointer (DPP0-3) zur Adressierung der Daten
� Context Pointer (CP) zur Adressierung der General Purpose Register
� Stack Pointer (SP), Stack Underflow (STKUN) und Stack Overflow (STKOV) zur Stackverwaltung
� Die Register MDL, MDH und MDC werden für Multiplikation und Divisions Operationen benötigt.
� Das Programm Status Wort (PSW) enthält Informationen über den CPU Status.
� Die Register SYSCON, BUSCON0-4 und ADDRSEL 1-4 dienen zur
System- und Bussteuerung.
25.02.2016Embedded Systems Seite 10
04EI
25.9.2009Embedded Systems Seite 11
Arithmetic Logic Unit
ALU
A B
Z
Cin
op
Cout
flags
Arithmetic Operations:
Logic Operations:
Shift / Rotate:
add subinc decneg
and nandor norexor exnornot
sll srlsla srarol ror
s/ro : shift/rotatel/r : left/rightl/a : logic (unsigned)/arithmetic (signed)
04EI
25.9.2009Embedded Systems Seite 12
General Purpose Register (GPR)
� 16 GPRs bilden eine Registerbankbestehend aus maximal
– 8 Word-Registern und
– 8 Word-Registern mit Bytezugriff auf das niederwertige und höherwertige Byte
� Die GPRs sind bit-addressierbar
� Die Registerbänke können beliebig im internen RAM angeordnet werden
� Der Platz der aktiven Registerbank wird durch den Context Pointer (CP) festgelegt
� CP kann leicht verändert werden um eine andere Registerbank auszuwählen - “Switch Context”-Befehl.
04EI
25.9.2009Embedded Systems Seite 13
0F600
R8R9
R10R11
R12R13R14R15
RH0RH1
RH2
RH3
RH4RH5
RH6RH7
RL0
RL1
RL2
RL3
RL4RL5
RL6RL7
Context pointer
0FDFE
2KBytesinternal RAM
R6
R0
R1R2R3R4R5
R7
STKOV
STKUV
R15
R0
0FC00
Stackpointer UnderflowStackpointer
Stackpointer Overflow
STKUV
STKOV
2 kByte internes RAM - Plazierung der Registerbänke und des Stack
SP
04EI
Die Speicherorganisation des C164 -1
Wie bereits zuvor erwähnt besitzt der C164 einen nach der von Neumann
Architektur organisierten Speicher. Dies ist durch einen gemeinsamen linearen Programm- und Datenspeicher gekennzeichnet.
Der C164 kann bis zu maximal 4 MByte adressieren. Dieser Bereich ist unterteilt in 64 Code Segmente die jeweils 64 KByte groß sind.
Weiters ist dieser Bereich in 256 Data Pages zu
� je 16 KByte organisiert. Die Code Segmente werden über den Code Segment Pointer (CSP), und
� die Datenbereiche über 4 Data Page Pointer (DPP0-3) angesprochen.
Details hierzu später (Seite )
Diese Aufteilung ist auch aus der folgenden Abbildung ersichtlich.
25.9.2009Embedded Systems Seite 14
04EI
25.9.2009Embedded Systems Seite 15
Interner und externer Adressplan des C164CI
Bit-adressierbarer Bereich
X-Bus Peripheral
Segment 0 beinhaltet den internen Speicher
Internes RAM
512 BytesSFR’s
2k
Internes RAM
ExternerSpeicher
InternesROM /
Flash E²PROM
� � � � � � � � � � � � � � �
512 BytesESFR’s
0x000000
0x008000
0x00FE00
0x00FA00
0x00F600
0x00F200
0xFFFF7 0
32k
0.5k
Reserviert
Bis zu 4 MBytes
Code Segmente Daten Pages
0
1
2
3
3
2
1
0
7
6
5
4
11
10
9
8
15
14
13
12
InternalROM/FLAS
H2*32k
0x010000
0x020000
0x030000
0x040000
Full -CAN
0x00F000
0x00E800Reserviert
0.5k
0x000000
04EI
Die Speicherorganisation des C164 -2
Das Segment 0 stellt hierbei einen Spezialfall dar, da es sämtliche Register der Peripheriemodule, die General Purpose Register (GPR), den Stack, das interne ROM –sofern vorhanden– und das interne RAM enthält.
Ab Adresse 0x0000 im Segment 0 befindet sich das interne ROM, das auch in das Segment 1 eingeblendet werden kann. Dies wird während des Reset Vorganges über das CPU Register SYSCON festgelegt.
Ab Adresse 0xE000 befindet sich der Bereich des sogenannten XRAMs (On-chip extension RAM) bzw. die Register des CAN Moduls. Das XRAM verhält sich wie ein normaler externer Speicher, der keine Wait-States benötigt. Im Adressbereich zwischen 0xF000 und 0xFFFF befindet sich das interne RAM und die Special Function Register (SFR). Dieser Bereich enthält sämtliche Peripherieregister des C164.
Das interne RAM enthält zudem den System Stack, der in seiner Größe im Bereich von 32-1024 Worten programmierbar ist. Der Stack wächst hierbei von höheren Adressen zu niedrigeren Adressen hin.
25.9.2009Embedded Systems Seite 16
04EI
Die Speicherorganisation des C164 -2
Zusätzlich sind in diesem Bereich die General Purpose Register angelegt, die über den Context Pointer (CP) adressiert werden. Wird ein neuer Registersatz benötigt (z.B. bei einem Unterprogrammaufruf oder der Verzweigung in eine Interrupt-Service-Routine) so kann durch Umsetzen des CP einfach auf eine neue Registerbank umgeschaltet werden. Dies hat den Vorteil, dass bei einer Programmverzweigung anstelle sämtlicher verwendeter Register nur der CP auf den Stack gesichert werden muss. Zusätzlich befinden sich in diesem Adressbereich die Source und Destination Pointer für den Peripheral Event Controller (PEC), siehe Abschnitt . Das restliche interne RAM dient entweder als Speicher für Variablen und Daten oder für Programmcode.
Word Zugriffe müssen immer an geraden Adressen erfolgen, wobei das lower Byte an der geraden Adresse (z.B 0xF612) und das higher Byte an der darauffolgenden ungeraden Adresse zu liegen
25.9.2009Embedded Systems Seite 17
04EI
25.9.2009Embedded Systems Seite 18
� Gesamter Adressraum:
– 64 kByte nicht-segmentierter Adressraum (Segment 0)
– bis zu 4 MBytes segmentierter Adressraum:64 kBbyte Code-Segmente und 16 kByte Daten-Pages
– “von Neumann”-Architektur, die intern mit mehrfach-BUS-Strukturen zur Vermeidung des BUS-Bottlenecks ausgestattet ist
� Interner Adressraum
– 2 KByte RAM
– 64 KBytes Flash/OTP ROM (C164CI-8FM)
� Flexible externe BUS-Konfigurationen
– bis zu 22-Bit Adress-BUS / 8-Bit Daten-BUS (gemultiplexed)
– bis zu 22-Bit Adress -BUS / 16- Bit Daten-BUS (gemultiplexed)
– 5 völlig unabhängige Konfigurations-Register
– 4 programmierbare “Chip Selects” und programierbare BUS-Kontrollsignale helfen externe Logik zu vermeiden.
Adressraum - Zusammenfassung
04EI
25.9.2009Embedded Systems Seite 19
Die Programmiersprache C für den Mikrocontroller C164
C166 ist die Realisierung von ANSI-C für die Mikrocontroller-Familie C166.
Der C166-Compiler sieht eine Reihe von Erweiterungen des ANSI-C Standards vor. Speziell solche, die direkt der Unterstützung der 166-Architektur dienen:
C166-Bezeichnung Erläuterung
memory types Als Ergänzung zur "Speicherklasse" kann zu jeder Variablenvereinbarung ein "Speichertyp" mit angegeben werden. Dies erlaubt eine vom aktuellen "Speichermodell" unabhängige Adressierung von Variablen in verschiedenen Adressräumen des 166-Systems. Folgende Typen sind definiert:near, idata, bdata, sdata, far, huge, xhuge.
sfr Dient der Deklaration von "Special-Function-Register" (SFR) der 166-Familie
sbit Deklaration von Bits innerhalb von SFR's.
bit Datentyp bit. Rückgabewert, Übergabeparameter von Funktionen können vom Typ bit sein.
bit-addressable Variable im bitadressierbaren Bereich können mittels bdataals Speichertyp vereinbart werden.
04EI
25.9.2009Embedded Systems Seite 20
Die Programmiersprache C für den Mikrocontroller C164
C166-Bezeichnung Erläuterung
registerbank (using) Jede Funktion kann eine Vereinbarung enthalten, in der die zu benutzende Registerbank angegeben wird.
interrupt Funktionen können als Interrupt-Service-Routinen vereinbart werden durch Angabe des Interruptnamens bzw. –vektors.
register mask Der C166-Compiler erzeugt für jede C-Funktion eine Register-maske, in der die durch die Funktion verwendeten Register aufgeführt werden. Diese können für Funktionsprototypen verwendet werden, um die Registerausnutzung zu optimieren.
RTX166 tasks Durch das Schlüsselwort _task_ werden Funktionen als Tasks des Betriebssystems RTX166 spezifiziert.
Neue Schlüsselwörter (Keywords):Speicherarten: near, idata, bdata, sdata, far, huge, xhugeDatentypen: bit, sfr, sbitFunktionen: interrupt, _task_, using
04EI
25.9.2009Embedded Systems Seite 21
Speicherarten (Memory Types)
Auswahl Adressraum
near 16-Bit Adressen bis zu 64 kBytes
idata On-chip RAM (schnellster Zugriff)
bdata Bit-adressierbares On-chip-RAM
sdata System Page (0xC000-0xFFFF) inklusive SFR‘s
far 32-Bit Pointer mit 16-Bit Adressberechnung, die Objektgröße beträgt 16 kByte.
huge 32-Bit Pointer mit 16-Bit Adressberechnung, die Objektgröße beträgt 64 kByte.
xhuge 32-Bit Pointer mit 32-Bit Adressberechnung, die Objektgröße beträgt 16 MByte.
Die Programmiersprache C für den Mikrocontroller C164
04EI
25.9.2009Embedded Systems Seite 22
� Entsprechend den Speicherarten können Speichermodelle als Voreinstellungen vorgegeben werden, die immer dann Anwendung finden, wenn bei der Variablen- oder Funktionsdefinition keine Speicherart explizit angegeben wird.
� Dies erfolgt mittels der Preprozessordirektive:# pragma speichermodell
� C: Code
D: Daten
Die Programmiersprache C für den Mikrocontroller C164
Speichermodell Variable Funktionen Segmentierung Umfang
TINY near near nein < 64k (C + D)SMALL near near ja 64k COMPACT far near ja 64kHCOMPACT huge near ja 64kMEDIUM near far ja unbegrenztLARGE far far ja unbegrenztHLARGE huge far ja unbegrenzt
04EI
25.9.2009Embedded Systems Seite 23
Datentypen: Speicherumfang und Wertebereich
Datentyp Speicherumfang Wertebereich
bit # 1 Bit 0 oder 1
signed char 1 Byte -128 bis +127
unsigned char 1 Byte 0 bis 255
signed int 2 Bytes -32768 to + 32767
unsigned int 2 Bytes 0 bis 65535
signed long 4 Bytes -2147483648 bis +2147483642
unsigned long 4 Bytes 0 bis 4294967295
float 4 Bytes ±1.176E-38 bis ±3.40E+38
double 8 Bytes ±1.7E-308 bis ±1.7E+308
pointer 2/4 Bytes Adresse des Objects
Die Programmiersprache C für den Mikrocontroller C164
Datentypen für den Zugriff auf Special Function Registers (SFR)
sbit # 1 Bit 0 or 1
sfr # 2 Bytes 0 to 65535
# spezielle Datentypen in C166, die in ANSI-C nicht definiert sind.
04EI
25.9.2009Embedded Systems Seite 24
Integrierte Entwicklungsumgebung
C-
Library
ANSI C
Compiler
Macro-
Assembler
– Debugger– Simulator
Emulator &
PROM Programmer
RTX TinyReal Time
Operating
System
– µVision2
Editor / Project Management
Library
Manager
Linker / Locater
CPU &
Simulator
Monitor
Target DebuggingPeripheral
Ab ins Praktikum
04EI
25.9.2009Embedded Systems Seite 25
Code-Adressierung mittels Segmentierungim 4 MByte Adressraum
Code Segment Pointer (CSP) zur Code-Adressierung
22-Bit physikalische Code-Adresse (C164)
6-Bit Segment-nummer
16-Bit
� � �
16-Bit Instr. Pointer
� ��� � � �
Code Seg. Pointer
� � ��
Der Instruction Pointer (IP) wird nach jeder Befehlsholphase inkrementiert
Der Code Segment Pointer (CSP) wird nur durch absolute Sprünge, bzw. indirekt beim Rücksprung aus Unterprogrammen vom Stack verändert.
04EI
25.9.2009Embedded Systems Seite 26
Adressierung von Daten mittels Seitenauswahl (Paging) innerhalb des 4 MByte Adressraumes
Daten-Adressierung über Data Page Pointer (DPP)
14-bit � �
16-bit Adresse
� �
Auswahl einesData Page Pointer
10-bitSeiten-nummer
DPP3
DPP2
DPP1
DPP0
Physikalische 24-Bit Daten-Adresse
(bis zu 22 aussen verfügbar beim C164)
SFR
04EI
25.2.2016Embedded Systems Seite 27
External Bus Controller
� Der External Bus Controller verfügt über bis zu 4 Chip-Select-Signale
� Auswahl von 4 Adressbereichen möglich
Special Function Register BUSCON0..4Programmierbare Zeiten.Festlegung von CS# - Signalen.Auswahl der Breite des Daten-BUS 8 / 16 Bit.
Special Function Register ADDRSEL1..4Programmierbare Ausschnitte aus dem Adressraum für den Zugriff auf externe Komponenten mit den Eigenschaften der zugeordneten BUSCONx- Register.
Der C164 bietet die Möglichkeit über den External Bus Contoler zusätzlich Programm- und/oder Datenspeicher anzuschließen. Die Buseigenschaften wie Multiplexed- oder Non-multiplexed Bus, 8- oder 16 Bit breiter Datenbus und das Bus Timing können nach einem Restart softwaremäßig für verschiedene Adressbereiche unterschiedlich eingestellt werden.
04EI
Interrupt System des C164-1
Als Mikrocontroller besitzt der C164 ein ausgeprägtes Interrupt System, das es ihm ermöglicht sehr effizient (5-12 CPU clocks <1µs) auf externe und interne Ereignisse zu reagieren.
Grundsätzlich ist hierbei zu unterscheiden zwischen:
� normalen Interrupts
� Peripheral Event Controller (PEC) Interrupts
� Trap Funktionen (Hardware und Software Traps)
� externen Interrupts
Die Vorgehensweise des Ablaufs bei Auftreten eines Interrupts soll nun näher erläutert werden.
Zunächst ist eine Interrupt Service Routine (ISR) zu erstellen (siehe auch Dave), die i.a. einem Unterprogramm entspricht, jedoch mit der Ausnahme, dass für die entsprechende Interrupt Quelle eine definierte Interrupt Trap Nummer, siehe Tabelle , angegeben werden muss.
25.2.2016Embedded Systems Seite 28
04EI
Auszug aus Vektortabelle
25.9.2009Embedded Systems Seite 29
Interrupt-Quelle RequestFlag
EnableFlag
InterruptVector
VectorLocation
TrapNumber
Fast External Interrupt 0 CC8IR CC8IE CC8INT 00’0060 H 18 H / 24 DFast External Interrupt 1 CC9IR CC9IE CC9INT 00’0064 H 19 H / 25 DFast External Interrupt 2 CC10IR CC10IE CC10INT 00’0068 H 1A H / 26 DFast External Interrupt 3 CC11IR CC11IE CC11INT 00’006C H 1B H / 27 DGPT1 Timer 2 T2IR T2IE T2INT 00’0088 H 22 H / 34 DGPT1 Timer 3 T3IR T3IE T3INT 00’008C H 23 H / 35 DGPT1 Timer 4 T4IR T4IE T4INT 00’0090 H 24 H / 36 DA/D Conversion Complete ADCIR ADCIE ADCINT 00’00A0 H 28 H / 40 DA/D Overrun Error ADEIR ADEIE ADEINT 00’00A4 H 29 H / 41 DASC0 Transmit S0TIR S0TIE S0TINT 00’00A8 H 2A H / 42 DASC0 Receive S0RIR S0RIE S0RINT 00’00AC H 2B H / 43 DASC0 Error S0EIR S0EIE S0EINT 00’00B0 H 2C H / 44 DSSC Transmit SCTIR SCTIE SCTINT 00’00B4 H 2D H / 45 DSSC Receive SCRIR SCRIE SCRINT 00’00B8 H 2E H / 46 DSSC Error SCEIR SCEIE SCEINT 00’00BC H 2F H / 47 DCAPCOM Register 16 CC16IR CC16IE CC16INT 00’00C0 H 30 H / 48 D
04EI
Interrupt System des C164-2
Bei Auftreten eines Interrupts wird dann über diese Trap Nummer in der Interrupt Vektor Tabelle, die sich ab der Adresse 0x0000 im Adressraum befindet, die Interrupt Service Routine aufgerufen.
Die entsprechende Interrupt Quelle ist mit einem geeigneten Interrupt Prioritäts Level (ILVL) und Group Prioritäts Level (GLVL) zu versehen. Der C164 besitzt 16 ILVL Level und jeweils vier Group Level.
Es können somit maximal 64 verschiedene Interrupt-Prioritäten vergeben werden.
Treten mehrere Interrupts gleichzeitig auf, so gewinnt jener mit höherem ILVL- und GLVL-Wert.
Tritt nur ein Interrupt auf, so wird nur der ILVL-Wert mit dem CPU-ILVL Wert im Programm Status Wort (PSW) verglichen. Nur wenn der Wert höher ist wird die CPU in ihrem aktuellen Programmfluss unterbrochen.
25.2.2016Embedded Systems Seite 30
04EI
Interrupt System des C164-3
Nach Festlegung der Signifikanz der einzelnen Interrupt Quelle durch den Programmierer wird dieser Prioritätslevel (ILVL+GLVL) in das zugehörige Interrupt Control Register geschrieben. (z.B. T2IC = 0x0027; Weist dem Timer 2 Interrupt Control Register einen ILVL Wert von 9 und einen Group Level von 3 zu.) Das allgemeine Layout eines Interrupt Control Registers ist in der nachfolgenden Abbildung dargestellt:
.
25.9.2009Embedded Systems Seite 31
04EI
Interrupt Control Register
GLVL: Group Level. Interruptgruppe
Interne Reihenfolge bei Interrupts gleicher Priorität
11: höchste Gruppenpriorität00: geringste Gruppenpriorität
ILVL: Interrupt priority level - InterruptprioritätFH: höchste Interruptpriorität0H: niedrigste Interruptpriorität
xxIE: Interrupt Enable Control Bit - Interruptfreigabe0: Interrupt ist gesperrt1: Interrupt ist freigegeben
xxIR: Interrupt Request Flag. Interruptanforderung0: keine Interruptanforderung vorhanden1: Interruptanforderung liegt an
25.9.2009Embedded Systems Seite 32
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- - - - - - - - xxIR xxIE ILVL GLVL
- - - - - - - - r/w r/w r/w r/w
04EI
Interrupt System des C164-4
Es gilt hierbei, je größer der ILVL und GLVL Wert desto höher ist die entsprechende Priorität. Nach der Festlegung der Priorität, ist die entsprechende Interrupt Quelle zu enablen (durch Setzen des zugehörigen yyIE Bits). Soll ein PEC Transfer aktiviert werden, so ist an dieser Stelle das PECC-Register, sowie die Source und Destination Adresse einzustellen.
Nach der lokalen Interrupt Freigabe muss global ein Interrupt zugelassen werden. Dafür ist im CPU Programm Status Wort Register PSW das Bit ’Interrupt Enable’ (IEN) zu setzten.
Ab nun können auftretende Interrupts zugelassen und bearbeitet werden.
25.9.2009Embedded Systems Seite 33
04EI
Interrupt System des C164-5
Wird ein Interrupt aktiviert - das yyIR Bit wird gesetzt - so wird zunächst eine Prioritätsüberprüfung durchgeführt. Hierfür ist im höherwertigen Nibble des PSW (Prozessor Status Wort) Information über den jeweils momentan gültigen Interrupt Status des Controllers enthalten. Das Bit Interrupt Enable (IEN) - wenn gesetzt - gibt an, dass Interrupts des C164 global zugelassen sind. Durch Setzen bzw. Löschen dieses Bits können auf einfache Art und Weise Interrupts zugelassen bzw. gesperrt werden. Das Bit Feld ILVL im Program Status Word spiegelt den momentanen CPU Prioritätslevel wieder. Ist keine Interrupt Routine aktiv so entspricht dies einem ILVLWert von 0x0000.
Befindet sich die CPU jedoch in einer Interrupt Service Routine (ISR) so enthält dieses Feld den Prioritätswert der momentan gültigen Routine. Ist der ILVL Wert im yyIC Register größer als der ILVL Wert im PSW, so wird der Interrupt akzeptiert.
25.9.2009Embedded Systems Seite 34
04EI
Interrupt System des C164-6Ist der ILVL Wert >= 14, das zugehörige PECC Register programmiert und eine PEC Source und Destination Adresse aufgesetzt, so wird ein PEC Transfer durchgeführt. Wenn dies nicht der Fall ist wird eine normale Interrupt Service Routine durchgeführt. Hierzu wird zunächst das zugehörige Interrupt Request Flag (yyIR) gelöscht, die Werte des IP, CP, CSP und des PSW auf den Stack kopiert (push) und anschließend wird der ILVL Wert der auslösenden Interrupt Quelle aus dem Interrupt Control Register in das PSW kopiert. Danach wird in die Interrupt Vektor Tabelle verzweigt. Jede Interrupt Quelle hat hier einen festgelegten Eintrag mit einer zugehörigen Trap Nummer. Über diese Trap Nummer wird in die entsprechende Interrupt Service Routine verzweigt. Der Code der ISR wird nun abgearbeitet.Beim Verlassen der ISR werden die zuvor auf den Stack gesicherten Daten in umgekehrter Reihenfolge wieder retour kopiert.Das Aufsetzen und die Abarbeitung eines Interrupts ist in der folgenden Abbildung noch einmal zusammenfasst. Als Beispiel der Interrupt-Programmierung mit Dave, siehe v1_isr.
25.2.2016Embedded Systems Seite 35
04EI
25.9.2009Embedded Systems Seite 36
Interrupt Handling
INTR Flag ist gesetzt
Periph. Interrupt
Externer Interrupt*
External Interrupt*
Prioritäts-Check
Vergleich derInterruptpriorität mit der Laufzeit-Priorität
der CPU
16 Prioritäts-Stufen
fallshöhere
Priorität
Interrupt Control Register des auslösenden Peripherie-ElementesINTR Service:
Retten:PSW, CSP, IP
Neue CPU-Prio. im PSW.
CSP und IP ausPeripherie-Vector oder Trap-Nummer
PECService
* Externe Interrupts sind z.B. statt
des “Capture” Eingangs möglich
13 ext. Interrupts (+ NMI) einschließlich 4 “schnelle” Interrupts
32 Peripherie Interrupts
4 Gruppen
Gruppen Check
LöscheINTR Flag
Periph. Interrupt
Periph. Interrupt
Periph. Interrupt
SFR DaveVektoren
04EI
Peripheral Event Controller -1Wird hingegen ein Peripheral Event Controller (PEC) Service arbitriert, so wird ein einziger Byte/Word Transfer von der Source zur Destination Adresse innerhalb des Segments 0 in die Befehlspipeline eingefügt.
Der Vorteil dieser Variante liegt in der schnellen Reaktionszeit auf einen Interrupt Request. Es muss in diesem Fall kein Register auf den Stack gesichert werden. Die Konfiguration des PEC Transfers erfolgt über das zugehörige PECC Register. Dieses wird automatisch bei der Festlegung
von ILVL und GLVL Wert entsprechend Abbildung 11 zugeordnet. Für einen PEC Transfer müssen Prioritätslevel ILVL 14 programmiert werden. Dementsprechend können acht verschiedene PEC Transfers programmiert werden. Je nachdem ob konfiguriert wird im Anschluss an den PEC Transfer der COUNT-Wert im PECCx Register dekrementiert und die zugehörige Source oder Destinationadresse inkrementiert. Dadurch wird eine fixe Anzahl an PEC Transfers ermöglicht. Es kann aber auch ein kontinuierlicher PEC Transfer programmiert werden indem im PECCx Register der COUNT-Wert auf 0xFF programmiert wird.
25.9.2009Embedded Systems Seite 37
04EI
Peripheral Event Controller - 2
25.9.2009Embedded Systems Seite 38
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 - - - - - INC BWT COUNT - - - - - r/w r/w r/w
COUNT: PEC Transfer Count. Zeichenzähler für PEC-Übertragung Zählt die Zahl der übertragenen Bytes/Words und beeinflußt Kanaleigenschaften BWT: Byte / Word Transfer Selection. Auswahl der Wortbreite
0: Wortweise Übertragung 1: Byteweise Übertragung
INC: Increment Control. Veränderung der Quell-/Zieladresse (beeinflußt die SFR's: SRCPx / DSTPx) 00: Die Adressen werden nicht verändert. 01: Der Inhalt von DSTPx wird um 1 bzw. 2 erhöht. 10: Der Inhalt von SRCPx wird um 1 bzw. 2 erhöht. 11: Reserviert.
04EI
Peripheral Event Controller - 3
War der COUNT Wert vor dem Dekrementieren bereits 1, so wird das Interrupt-Request-Flag nicht mehr gelöscht und im Anschluss an diesen letzten PEC Transfer wird somit automatisch eine normale ISR aktiviert. Wird also ein PEC Transfer mit einem COUNT Wert 0xFF aufgesetzt, so ist für diese Interrupt Quelle auch eine normale Interrupt Service Routine zu erstellen.
Das Aufsetzen und die Abarbeitung eines PECs sind in der nachfolgenden Abbildung nocheinmal zusammenfassend veranschaulicht.
25.9.2009Embedded Systems Seite 39
04EI
25.9.2009Embedded Systems Seite 40
Interrupt hat den Prioritäs- und Gruppen-Check erfüllt
Interrupt Priorität < 14 Interrupt Priorität 14 oder 15und Data Counter > 0
Interrupt Service PEC Service
8 PECKanäle
Data Counter
SRC Pointer
DEST Pointer
Contr. Reg.
Memory Segment 0
0xFFFF
0x0000
Byte bzw.WordTransfer
INTR Service:
Retten:PSW, CSP, IP
Neue CPU-Prio. im PSW.
CSP und IP ausPeripherie-Vector oder Trap-Nummer
Interrupt falls Data Counter = 0
Prioritäts- & Gruppen-
Check
Peripheral Events Controller (PEC) - 4
Peripheral Events Contoller
SFR
µD
04EI
Real Time Operating System -1
19.3.2010 Embedded Systems Seite 1
Die meisten Applikationen im Bereich der Embedded Systems erfordern ein hohes Maß an paralleler Verarbeitung und kurze Reaktionszeiten auf externe Ereignisse. Kleinere Real-Time-Applikationen können auch ohne RTOS durch den Aufruf einzelner oder mehrere Funktionen in einer Schleife und den Einsatz von Interrupts realisiert werden. Der Einsatz eines RTOS stellt jedoch die professionelle Lösung dar.Ein RTOS erlaubt z.B. ein flexibles Aufteilen von Systemresourcen(CPU, Speicher, etc.) auf einzelne Tasks (Prozesse) und bietet die Möglichkeit der Kommunikation zwischen den Tasks.
µD
04EI
19.3.2010 Embedded Systems Seite 2
Real Time Operating System
• Tasksvoneinander weitgehend unabhängige Aufgaben die möglichst gleichzeitig auszuführen sind.
• Operating Systemübernimmt die Verwaltung und Koordination der Tasks.
Task 1
Task 2
Task 3
• Real Timemöglichst rechtzeitige Reaktion auf eintreffende Ereignisse, möglichst exaktes Einhalten von Zeitanforderungen
µD
04EI
19.3.2010 Embedded Systems Seite 3
Task (Thread) - Konzept
Was ist eine Task (Thread) genau?
• Tasks sind die funktionalen und strukturierenden Einheiten von Betriebssystemen.
• Eine Task ist ein ausführbares Programm zusammen mit den dazugehörigen aktuellen Werten des Programm Counters, der Register, Variablen und Betriebsmittel (Speicher, I/O, Signale, Mailboxen, etc.).
Für die Implementierung einer Task unterhält das Betriebssystem eine eigene Tabelle, den
• Task Control Block– Informationen über Zustand und Priorität der Task
– CPU und System Context
• Task Zustände – ready, running, waiting, suspended.
µD
04EI
19.3.2010 Embedded Systems Seite 4
Taskzustände
waiting
busy
readysuspended
suspended: Die Task nimmt nicht am Geschehen teil.
ready: Die Task ist ablauf-fähig und wartet auf die Zuteilung des Prozessors.
busy: Der Code der Task wird ausgeführt
waiting: Die Task wartet auf das Eintreten eines Ereignisses.
µD
04EI
19.3.2010
Embedded Systems Seite 5
Task Management
busy
suspended
readyreadyreadyreadyreadyready
waiting
Wartebedingungist erfüllt
Tasks werden kreiert
Prozessor ist verfügbar
RTX166tiny:Beim Start wird Task 0 ausgeführt, sie aktiviert alle erforderlichen weiteren Tasks.
Dispatcher
µD
04EI
19.3.2010 Embedded Systems Seite 6
Task Management
• SchedulerScheduler entscheidet, welchem Prozess die CPU zugeordnet wird.
• Dispatcher
sorgt für die korrekte Umschaltung zur bereitgestellten Task
• Scheduling-Verfahren:
- Round-Robin-Scheduling:Beim Round-Robin Verfahren ist jede Task für eine vordefinierte Zeit aktiv bevor sie wieder suspendiert und die CPU einer anderen Task überlassen wird. (Standard bei RTX-Tiny)
- Kooperatives (non preemptive) Scheduling: Task muss selbst die Kontrolle an den Scheduler zurückgeben (Task versetzt sich selbst in den Wartezustand (suspendiert sich selbst) und wartet auf Eintreten eines Ereignisses (Timeout, Signal)
- Preemptive Scheduling: Wenn eine Task mit höher Priorität ansteht, wird der laufendenTask die CPU entzogen und der höher prioren Task zugeteilt
µD
04EI
Task Interaction – Synchronization -1
• Tasks müssen während ihrer Arbeit auf Betriebsmittel (Speicher, Peripherie, etc.) zugreifen, die aber in der Regel nicht exklusiv benutzt werden können. Man spricht in diesem Fall von wechselseitigen Ausschluss (mutual exclusion) zwischen nebeneinander laufenden Prozessen. In diesem und anderen Fällen müssen Tasks synchronisiert werden. Interprozesskommunikation ist möglich mittels:
• Signals Einfache Form der Kommunikation mit Hilfe spezieller Funktionen (siehe RTX-Tiny Funktionen und Praktikum)
• Semaphore Ein Semaphor ist eine Datenstruktur, die aus einer Ganzzahl und den Nutzungsoperationen „Reservieren“ und „Freigeben“ besteht
• Mailboxes Tasks senden und empfangen Nachrichten asynchron (siehe folgende Folie)
• Messages Beim synchronen Message-Passing Verfahren werden Nachrichten direkt von einem Prozess zum anderen weitergesendet.
29.2.2016 Embedded Systems Seite 7
µD
04EI
19.3.2010 Embedded Systems Seite 8
Task Interaction – Synchronization -2
�
�
�
�
Sender Task
Receiver Task
Sender Task
Receiver Task
Asynchronous via Mailbox
Synchronous via Message Passing
µD
04EI
29.2.2016 Embedded Systems Seite 9
• Task Switching– Round Robin
– Cooperative
• 256 Tasks max.� 128 task priorities
Task Kommunikation:
• signal passing
• message passing with mailbox system
• semaphores
RTX166 Full bietet folgende Features:
RTX166-Full / RTX-Tiny
• Task Switching– Round Robin
– Cooperative
• 32 Tasks max. Keine Prioritäten
Task Kommunikation
• signal passing
RTX166 Tiny ist auf folgende Features beschränkt:
µD
04EI
19.3.2010 Embedded Systems Seite 10
int counter;void main (void) {
counter = 0;while (1) { /* repeat forever */
counter++; /* increment counter */}
}
Single Task Programm ohne RTOS
Real Time Operating System RTX166-Tiny
µD
04EI
RTX-Tiny-Beispiel-Programme
29.2.2016 Embedded Systems Seite 11
Das folgende Beispiel wurde aus der Beispielsammlung zur Entwicklungsumgebung der Fa. Keil entnommen. Das Beispiel demonstriert das Round-Robin-Verfahren. Es implementiert zwei Software Zählschleifen, die mit Hilfe von 3verschiedenen Tasks realisiert werden.Im ersten Task main_tsk() werden drei Tasks erzeugt.
In Task job1() wird in einer Endlosschleife für einen Time Slice (default 1ms) der Zähler counter0 erhöht.
Danach wechselt RTX-Tiny zur Task job2 und erhöht dessen Zähler counter1 ebenfalls für einen Time Slice. Danach wird wieder zu job1 gewechselt, usw.
Die Dauer der Time-Slices können in Config_Tiny.A66 eingestellt werden.
µD
04EI
19.3.2010 Embedded Systems Seite 12
#include <rtx166t.h>
…
int counter0, counter1;
void main_tsk(void) _task_ 0
{
os_create_task(1); // set task into READY-state
os_create_task(2); //
os_delete_task(0);
}
void job1 (void) _task_ 1 {
while (1) { /* Endless loop */
counter0++; /* Increment counter 0 */
}
}
void job2 (void) _task_ 2 {
while (1) { /* Endless loop */
counter1++; /* Increment counter 1 */
}
}
Bsp: Round-Robin Task Switching
Rtx_1
µD
04EI
Bsp: Cooperative Task Switching
29.3.2016 Embedded Systems Seite 13
In diesem Beispiel wird das Cooperative Task-Swichting demonstriert.In RTX-Tiny wird dazu die Funktion os_wait(…) verwendet.int os_wait ( int event_sel, /* Ereignis, auf das gewartet wird */
unsigned int ticks, /* Anzahl Timerticks die zu warten sind */int dummy); /* bei TRX-Tiny nicht benutzter Parameter */
Die os_wait-Funktion hält die aktuelle Task für eine bestimmte Zeit oder bis zum Eintreten eines bestimmten Events an. (Genaueres siehe RTX-Tiny Funktionsbeschreibungen)In den Tasks job1 und job2 wird die Task nach der Erhöhung des Zählers jeweils für 5 bzw. 3 Ticks gestoppt (in den waiting status versetzt).Es ergeben sich somit Zähler mit einer festen Zähl-Frequenz bzw. Tasks mit einer festen Rate.Falls der CPU keine Task zugeteilt werden kann, wird eine immer vorhandene Idle-Task ausgeführt.
µD
04EI
29.2.2016 Embedded Systems Seite 14
#include <rtx166t.h>
int counter0, counter1;
void main_tsk(void) _task_ 0
{
os_create_task(1); // set task into READY-state
os_create_task(2); //
os_delete_task(0);
}
void job1 (void) _task_ 1 {
while (1) {
counter0++; /* Increment counter 0 */
os_wait (K_IVL, 3, 0); /* Wait 3 timer ticks */
}
}
void job2 (void) _task_ 2 {
while (1) {
counter1++; /* Increment counter 1 */
os_wait (K_IVL, 5, 0); /* Wait 5 timer ticks */
}
}
Cooperative Task Switching: Wait for Timeout
Rtx_1
µD
04EI
Cooperative Task Switching: Wait for Signal
19.3.2010 Embedded Systems Seite 15
Im folgenden Bespiel sendet die Task job1 nach dem Überlauf des Zählers count1 ein Signal an die Task job2, die sich im Wartezustand „Wait for Signal“ befindet.Nach Erhalt des Signals erhöht diese ihren Zähler und geht erneut in den Wartezustand. Auf diese Weise kann in diesem Fall eine Synchronisation der beiden Zähler und allgemein eine Synchronisation verschiedener Tasks erreicht werden.
µD
04EI
19.3.2010 Embedded Systems Seite 16
#include <rtx166t.h>
int counter0, counter1;
void main_tsk(void) _task_ 0
{
os_create_task(1); // set task into READY-state
os_create_task(2); //
os_delete_task(0);
}
void job1 (void) _task_ 1 {
while (1) {
if (++counter0 == 0) { /* On counter 0 overflow*/
os_send_signal(2);/* Send signal to task 2*/
}
}
}
void job2 (void) _task_ 2 {
while (1) {
os_wait (K_SIG, 0, 0); /* Wait for signal; no timeout */
counter1++; /* Increment counter 1 */
}
}
Cooperative Task Switching: Wait for Signal
µD
04EI
os_running_task_id
19.3.2010 Embedded Systems Seite 17
Prototyp int os_running_task_id (void);Beschreibung Die Funktion os_running_task_id gibt die task_id
der aktuell aktiven Task zurück. Rückgabewert Nummer (task_id) der aktiven Task, der Werte-
bereich ist 0..31.
Beispiel:#include <rtx166t.h>void tst_os_running_task (void) _task_ 3{
int tid;...
tid = os_running_task_id (); /* tid = 3 */}
µD
04EI
RTX-166 Tiny: Beschreibung der Funktionen (s. µVision Help)
19.3.2010 Embedded Systems Seite 18
os_create_task
Prototyp int os_create_task (int task_id); /* ID der task */
Beschreibung Die Funktion os_create_task startet die Task mit der Nummer task_id. Die Task wird in den Zustand "READY" versetzt und kommt bei der nächsten möglichen Gelegenheit zur Ausführung.
Rückgabewert
0 falls die Task erfolgreich gestartet wurde -1 falls die Task nicht gestartet werden konnte,
falls die Task bereits aktiv ist, oder falls die Task task_id nicht existiert.
vergleiche os_delete_task
Beispiel
#include <rtx166t.h>
#include <stdio.h> /* fuer printf */
void new_task (void) _task_ 2
{
...
}
void tst_os_create_task (void) _task_ 0
{
...
if (os_create_task (2))
{
printf ("Task 2 konnte nicht gestartet werden\n");
}
...
}
µD
04EI
os_delete_task
19.3.2010 Embedded Systems Seite 19
os_delete_task
Prototyp int os_delete_task (int task_id);
Beschreibung Die Funktion os_delete_task unterbindet die weitere Ausführung der Task task_id und entfernt sie aus der Task-Liste.
Rückgabewert
0 falls die Task erfolgeich angehalten und entfernt werden konnte, -1 falls die Task nicht existiert oder noch nicht gestartet wurde.
Achtung: Ein Task-Switch wird sofort ausgeführt, wenn eine Task sich selbst suspendiert.
vergleiche os_create_task
Beispiel
#include <rtx166t.h>
#include <stdio.h> /* for printf */
void tst_os_delete_task (void) _task_ 0
{
...
if (os_delete_task (2))
{
printf ("Task 2 konnte nicht suspendiert werden\n");
}
...
}
µD
04EI
os_send_signal
19.3.2010 Embedded Systems Seite 20
os_send_signal
Prototyp int os_send_signal (int task_id); /* Signal an die Task */
Beschreibung
Die Funktion os_send_signal schickt ein Signal an die Task mit der Nummer task_id. Wartet die adressierte Task bereits auf ein Signal, so wird diese in den Zustand "READY" übergeführt, sie wird noch nicht gestartet. Ansonsten wird das Signal im Signal-Flag der Task gespeichert.
Rückgabewert 0 falls das Signal erfolgreich gesetzt wurde, 1 falls das Signal bereits gesetzt war, -1 falls die adressierte Task nicht existiert.
vergleiche isr_send_signal, os_clear_signal, os_wait, os_wait_signal
Beispiel
#include <rtx166t.h>
void signal_func (void) _task_ 2
{
...
os_send_signal (8); /* signal an task 8 */
...
}
void tst_os_send_signal (void) _task_ 8
{
...
os_send_signal (2); /* signal an task 2 */
...
}
µD
04EI
isr_send_signal
19.3.2010 Embedded Systems Seite 21
Prototyp int isr_send_signal (int task_id); Beschreibung Die Funktion isr_send_signal sendet ein Signal an die Task
task_id. Wartet die adressierte Task bereits auf ein Signal, so wird diese in den Zustand "READY" übergeführt, sie wird noch nicht gestartet. Ansonsten wird das Signal im Signal-Flag der Task gespeichert.
Achtung: Diese Funktion darf nur aus Interrupt-Service-Routinen aufgerufen werden!
Return Value Die Funktion isr_send_signal gibt folgenden Wert zurück:0 das Signal wurde erfolgreich gesetzt1 das Signal war bereits gesetzt -1 die adressierte Task existiert nicht.
See Also os_clear_signal, os_send_signal, os_wait, os_wait_signal,Example#include <rtx166t.h>void tst_isr_send_signal (void) interrupt MY_ISR{
isr_send_signal (8); /* Signal an Task 8 */}
µD
04EI
os_running_task_id
Prototyp int os_running_task_id (void);
Beschreibung Die Funktion os_running_task_id gibt die task_id der aktuell aktiven Task zurück.
Rückgabewert Nummer (task_id) der aktiven Task, der Wertebereich ist 0..31.
Beispiel
#include <rtx166t.h>
void tst_os_running_task (void) _task_ 3
{
int tid;
...
tid = os_running_task_id (); /* tid = 3 */
}
19.3.2010 Embedded Systems Seite 22
µD
04EI
os_wait
Prototyp int os_wait (
int event_sel, /* Ereignis, auf das gewartet wird */
unsigned int ticks, /* Anzahl Timerticks die zu warten sind */
int dummy); /* nicht benutzter Parameter */
Beschreibung:
Die Funktion os_wait hält die Ausführung der aktiven Task an und wartet auf ein oder mehrere Ereignisse. Diese können sein der Ablauf eines Intervalls, das Auftreten eines Time-Out oder das Signal aus einer anderen Task bzw. Interrupt-Service-Routine. Der Parameter event_sel legt das bzw. die Ereignisse fest, auf die zu warten ist. Eine beliebige Kombination der folgenden Konstanten ist dafür zulässig:
Ereignis Beschreibung
K_IVL Warten auf das Intervall, das durch ticks festgelegt wird.
K_SIG Warten auf ein Signal.
K_TMO Warten auf den Time-Out, der durch ticks festgelegt wird.
19.3.2010 Embedded Systems Seite 23
µD
04EI
os_wait -2
Ereignisse können durch ein logisches ODER ('|') verknüpft werden. Z.B. K_TMO | K_SIG bedeutet, dass die Task wartet bis entweder der Time-Out auftritt oder ein Signal eintrifft.
Der Parameter ticks legt die Anzahl Timer-Ticks fest, um ein Intervall zu definieren (K_IVL - Zeit seit letztem os_wait) oder den Time-Out (K_TMO - Zeit ab aktuellem Aufruf) zu fixieren.
Der Parameter dummy ist ein Platzhalter zur Kompatibilität von RTX166 Tiny mit der RTX166 Vollversion
Rückgabewert Tritt eines der spezifizierten Ereignisse auf, so wird die Task in den Zustand READY übergeführt. Sobald daraufhin die Task zur Ausführung kommt, liefert die Funktion einen der folgenden Werte zurück, der anzeigt welches Ereignis den Wartezustand beendet hat:
Ereignis Beschreibung
SIG_EVENT Ein Signal ist eingetroffen.
TMO_EVENT Der Time-Out oder das Intervall ist abgelaufen.
NOT_OK Der Aufrufparameter event_sel ist ungültig.
19.3.2010 Embedded Systems Seite 24
µD
04EI
os_wait_signal
Prototyp int os_wait_signal (void);
Beschreibung Die Funktion os_wait_signal stoppt die aktuelle Task und wartet auf das Signal aus einer anderen Task bzw. Interrupt-Service-Routine.
Rückgabewert Durch das Eintreffen eines Signals wird die Task in den Zustand READY übergeführt. Kommt daraufhin die Task zur Ausführung, liefert os_wait_signal den Wert SIG_EVENT zurück und zeigt damit an, dass ein Signal eingetroffen ist.
Beispiel:
#include <rtx166t.h>
void tst_os_wait_signal (void) _task_ 5
{
while (1) {
os_wait_signal (); /* Warte auf ein Signal */
}
}19.3.2010 Embedded Systems Seite 25
µD
04EI
os_delay_task
Prototyp int os_delay_task (unsigned int ticks);
Beschreibung Die Funktion os_delay_task hält die Ausführung der aktiven Task für die Dauer des angegebenen Zeitintervalles an. Der Parameter ticks gibt die Anzahl der Timer-Ticks an, die bis zum Time-Out Ereignis (K_TMO) vergehen sollen.
Rückgabewert Tritt der Time-Out auf, so tritt die Task in den Zustand "READY" ein. Sobald die Task wieder zur Ausführung kommt, gibt os_delay_task den Wert TMO_EVENT zurück und zeigt damit an, dass der Time_Out abgelaufen ist.
#include <rtx166t.h>
void tst_os_delay_task (void) _task_ 3 {
while (1) {
os_delay_task (100); /* Verzoegere um 100 Timerticks */
}
}
19.3.2010 Embedded Systems Seite 26
µD
04EI
27.9.2009 Embedded Systems Seite 1
164CL
XTAL
C166-Core
Port 5 Port 3
CPU
Dua
l Por
t
RAM
2 KByte
Interrupt Controller
Watchdog
Peripheral Data
External Instr./Data
Instr./Data
USART
ASC
BRG
GPT1
16
16
16
1632
PEC
64 KROM
(C164 CI-8RM)
orOTP
(C164CI-8EM)
Interrupt Bus
Data
Data
Port 8
BRG
SSC
Sync. Channel(SPI)
PLL-Oscillatorprog. Multiplier:
0.5; 1; 1.5; 2;2.5; 3; 4; 5
XB
US
(16-
bit N
ON
MU
X D
ata
/ A
ddre
sses
)
T2
T4
T3
13 ext. IRFull-CANInterfaceV2.0Bactive
RTC
10-BitADC
Tim
er 7
Tim
er 8
Port 1
Tim
er 1
3
1 Comp.Channel
3/6 CAPCOMChannels
CAPCOM6 Unit forPWM Generation
8 9 4 16
6
16
Port 4
8-Channels
External Bus8/16 bit
MUX only&
XBUSControl
CAPCOM 2
8-Channel
C164CI - Die Peripherie
P4.6/ CAN TxD
P4.5/ CANRxD
Por
t 0
µD
04EI
27.9.2009 Embedded Systems Seite 2
Überblick zu den I/O-Ports
• Die Port-Anschlüsse bilden die Verbindung zur Aussenwelt
– der C164CI besitzt 59 Pins für Port-Anschlüsse:• 4 8-Bit-Ports: PORT0 als P0H und P0L; PORT1 als P1H und P1L.• 1 9-Bit-Port: PORT3 als P3.• 1 6-Bit-Port: PORT4 als P4.• 1 4-Bit-Port: PORT8 als P8.• 1 8-Bit-Port. PORT5 als P5 nur als Eingang verwendbar.
• Alle Port-Anschlüsse können getrennt bitadressiert werden.
• Alle I/O-Leitungen sind unabhängig voneinander mittels eines Richtungsauswahlregisters als Ein- bzw. Ausgang programmierbar.
• Die Port-Anschlüsse sind mit einer oder mehreren alternativen Funktionen ausgestattet (Peripherie oder BUS).
• Jeder Port ist mittels schneller Dioden geschützt.• Einige Ports besitzen zusätzlich die Möglichkeit als gepufferter “Open-
Drain”-Ausgang konfiguriert zu werden (P3 und P8 beim C164CI).• Einige Ports ermöglichen neben der Qualifizierung der Eingangspegel
als TTL-Signal eine spezielle Schwellenbewertung als CMOS-Pegel (P3 und P8 beim C164CI).
µD
04EI
27.9.2009 Embedded Systems Seite 3
Überblick zur Portstruktur
DirectionRegister
AlternateOutput
AlternateEnable
Read
Clock
Alternate Input
Inte
rna
l B
us
Buffer
Mux
Mux
OutputLatch
Write
Buffer
InputLatch
Open DrainControl
VCC
Vss
Port Pin
� � � � � � � � � �
Ports Dave
µD
04EI
27.9.2009 Embedded Systems Seite 4
General Purpose Timer 1 (Kurzfassung)
• Drei 16-Bit Vor-/Rückwärts-Zähler:1 Core Timer(T3) und 2 Auxiliary Timers (T2,T4)
• Takteingangssignale:
– Timer Modus: Interner Takteingang mit Vorteiler bis zu 2.5 MHz / 400 ns; der Takt kann mit einem externen Signal verknüpft werden.
– Counter Modus:Externer Takt bis zu 1.25 MHz.
– Kaskadieren des Core-Timer mit jedem der Aux.-Timer (33-Bit timer).
– Zählrichtung kann mittels Eingangssignal gewechselt werden.
• Ausgangssignale
– Interrupt-Generierung und Signalwechsel durch den Core Timer T3.
– Interrupt-Generierung durch die Auxiliary Timer T2 und T4.
• Reload:Der Core Timer kann mit dem Inhalt eines beliebigen Auxiliary Timer geladen werden.
• Capture:Der Inhalt des Core Timer kann in jeden der Auxiliary Timer übernommen werden.
µD
04EI
27.9.2009 Embedded Systems Seite 5
T2 / T3 /T4 Over-/UnderflowClocka) Drei unabhängige 16 Bit-
Timer / Counter
T2 / T4Over/-Underflow
b) 32 oder 33 Bit-Timer/Counter T3Clock
T3 Outputtoggle latch
T2 / T4
T3 Over-/UnderflowClock
Capture-Trigger
T2 / T4
d) 16 bit Timer / Counterwith Capture -Register
T2 / T4c) 16 Bit-Timer / Countermit Reload-Register
T3 Over-/UnderflowClock
Reload-Trigger
Betriebsarten im Überblick
µD
04EI
GPT1-Unit in Timer Mode
Mit Hilfe der 16Bit-Timer 2, 3, 4 können unabhängig voneinanderfolgende Zeiten realisiert werden. Die maximale Auflösung der Timer ist 0.4µs, was einer Timer-Eingangsfrequenz von 2.5MHz (20MHz/8) entspricht.Folgende Werte können eingestellt werden (siehe auch Dave):
Prescaler resolution overrun
fcpu/8 0.4µs 26.21 ms
fcpu/16 0.8µs 52.42 ms
fcpu/32 1.6µs 104.85 ms
fcpu/64 3.2µs 209.71 ms
fcpu/128 6.4µs 419.43 ms
fcpu/256 12.8µs 838.86 ms
fcpu/512 25.6µs 1677.72 ms (1.6s)
fcpu/1024 51.2µs 3355.24 ms (3.35s)
27.9.2009 Embedded Systems Seite 6
µD
04EI
27.9.2009 Embedded Systems Seite 7
GPT 1 Funktionsprinzip (20 MHz)
CPUfCPU*2-n
CPUfCPU*2-n
mit: n = 3...10
GPT1 Dave
Gate
InputMode
ControlCore Timer T3
ToggleLatch
INTRFlag
INTRFlag
Gate
InputMode
ControlAux Timer T2 / T4
Capture
RunEnable
INTRFlag
INTRFlag
Gate
InputMode
ControlAux Timer T2 / T4
up / down
RunEnable
INTRFlag
INTRFlag
Reload Run
Enable CPUfCPU*2-n
33-Bit Kaskadierung
up / down
up / down
P5.7 / T4INP5.6 / T2IN
(max. 1.25 MHz)
P5.7 / T4INP5.6 / T2IN
(max. 1.25 MHz)
P3.6 / T3IN(max. 1.25 MHz)
P5.4/T2EUDP5.5/T4EUD
P5.4/T2EUDP5.5/T4EUD
P3.4/T3EUD to CAPCOM2Timer T7, T8
µD
04EI
27.9.2009 Embedded Systems Seite 8
Asynchrone / Synchrone Serielle Schnittstelle(USART-20MHz)
• Eigener Baudraten-Generator
• Asynchrone Betriebsart mit max 625 KBaud Übertragungsrate
– Vollduplex (gleichzeitiges Senden und Empfangen)
– Programmierbare Eigenschaften:• 1 oder 2 Stoppbits,
• 7 oder 8 Datenbits
• Ungerade bzw. gerade Parität
• Fehlererkennung (Parity, Overrun, Framing)
• Synchrone Betriebsart mit max. 2.5 MBit/sec Übertragungsrate.
– Halbduplex-Betrieb - nur Senden oder Empfangen möglich.
– Einfach erweiterbar durch externe Schieberegister.
– Overrun-Fehler werden erkannt.
µD
04EI
27.9.2009 Embedded Systems Seite 9
INTRFlag
TransmitS0TIR
INTRFlag
TransmitS0TIR
INTRFlag
ReceiveS0RIR
INTRFlag
ReceiveS0RIR
INTRFlag
ERROR
INTRFlag
ERROR
zum internen BUS
Control Register
Serial Port
Control
Sende-Schieberegister
Empfangs -Schieberegister
Empfangs-Puffer
vom internen BUS
Schiebe Takt
Asynchron/
Synchron
USART Blockdiagramm
P3.11 / RxD0
P3.10 / TxD0
Baudraten-GeneratorCPU
Clock
Sende-Puffer
Seri Dave
INTR FlagTransmitBufferS0TBIR
INTR FlagTransmitBufferS0TBIR
µD
04EI
27.9.2009 Embedded Systems Seite 10
USART Datenrahmen und Interrupts
StartBit
D0LSB
D1 D2 D3 D4 D5 D6 D7/Parity
(1tes)StopBit
2tesStopBit
8-Bit Datenrahmen der asynchronen Übertragung
SO
TIR
SO
TIR
SO
TIR
SO
RIR
SO
RIR
SO
RIR
SO
TB
IR
SO
TB
IR
SO
TB
IR
Sta
rt
Sta
rt
Sta
rt
Sto
p
Sto
p
Sto
p
Asynchrone Betriebsart
µD
04EI
Asynchrones Senden/Empfangen
Typisch ist in beiden Betriebsarten die Doppelpufferung (siehe Folie).Um ein Byte im Asynchron Mode zu senden wird es über den Datenbus in den Sende-Puffer (Transmit Buffer Register) übertragen. Sobald das Sende-Schieberegister (Transmit Shift Register) leer ist, wird der Inhalt des Send-Puffers in das Sende-Schieberegister übernommen. Dadurch wird das Transmit Buffer Interrupt Request Flag S0TBIR gesetzt. Das Transmit-Interrupt-Request-Flag S0TIR wird gesetzt, bevor das letzteBit des Frames (1. oder 2. Stop -Bit) aus dem Transmit-Shift-Register geschoben wird.
Wenn das letzte Stop-Bit empfangen wurde, wird der Inhalt des Empfangs – Schieberegisters (Receiver Shift Registers) in den Empfangspuffer (Receive Data Register) übertragen. Gleichzeitig wird das Receiver Interrupt Request-Flag S0RIR gesetzt.
Mit Hilfe dieser 3 Interrupt Flags kann das Senden und Empfangen im Polling Mode und Interrupt Mode realisiert werden. Siehe hierzu auch Vorlesungs-Beispiele. Beim Auftritt eines Fehlers (Framing,Parity, overrun) werden ebenfalls Interrupt-Flags gesetzt.
27.9.2009 Embedded Systems Seite 11
µD
04EI
2.3.2016 Embedded Systems Seite 12
Analog/Digital-Wandler (ADC - 20MHz)
• 10-Bit ADC Arbeitsweise ist die sukkzessive Approximation– 9.7 µs Wandlungsdauer (programmierbar)– Integrierter Sample & Hold-Schaltkreis (1.6 µs Sample-Zeit).– 8 gemultiplexte Eingangskanäle.– Automatische Selbstkalibrierung nach jeder Wandlung.
• Flexible Betriebsarten– Fixed Channel Single Conversion (FIXED)
Ein bestimmter Kanal wird einmal gewandelt
– Fixed Channel Continuous Conversion (FIXED_CONT)Ein bestimmter Kanal wird kontinuierlich gewandelt
– Auto Scan Single Conversion (SCAN)Eine Sequenz von Kanälen (beginnend mit dem höchsten biseinschließlich Kanal 0) wird einmal gewandelt
– Auto Scan Continuous Conversion (SCAN_CONT)Eine Sequenz von Kanälen wird kontinuierlich gewandelt
µD
04EI
Fixed Channel Conversion Modes
Es wird jeweils ein fix zugeordneter Eingangskanal (ADCH) gewandelt. Nach jeder Wandlung wird ein Interrupt Request generiert und das Wandlungsregister mit der zugehörigen Kanalnummer im Register ADDAT gespeichert.
• Im Single Conversion Mode wird der ADC nach einer Wandlung angehalten und die Bits ADC busy (ADBSY) und ADC Start (ADST) werden zurückgesetzt. Im Continuous Conversion Mode startet der ADC automatisch nach jeder Wandlung mit einem weiteren Zyklus.Dies kann dazu führen, dass ein Wandlungsergebnis überschrieben wird, wenn die CPU das Wandlungsergebnis nicht rechtzeitig ausliest. Um dies zu verhindern, kann der Wait for Read Control Modus
programmiert werden. Hierbei wird der ADC nach einer Wandlung solange angehalten, bis das letzte Wandlungsergebnis ausgelesen wurde.
27.9.2009 Embedded Systems Seite 13
µD
04EI
Auto Scan Conversion Modes
In dieser Betriebsart wird jedesmal eine ganze Sequenz von analogen Kanälen der Reihe nach analog-digital gewandelt. Im Bitfeld ADCH wird jener Kanal spezifiziert mit der die Wandlungs-Sequenz beginnt; sie endet mit Kanal Null. Nach jeder einzelnen Wandlung wird ein Interrupt Request generiert, der angibt, dass im ADDAT Register ein aktuelles Wandlungsergebnis steht. Auch in dieser Betriebsart wird zwischen einem Single und einem Continuous Conversion Mode unterschieden. Das Verhalten entspricht jenem bei der Fixed Channel Conversion mit dem Unterschied, dass hier jeweils eine Sequenz von Eingangskanälen gehandhabt wird.
Datentransfer mit PEC (Peripheral Event Controller)
Um möglichst schnell Daten aus dem AD-Wandler in ein Array zur späteren Verarbeitung zu speichern kann zum Datentransfer der PEC verwendet werden. Hierbei kann eine programmierbare Anzahl von Wandlungsergebnissen ohne CPU-Unterstützung transferiert werden.Der End-Of- Conversion-Interrupt wird in diesem Fall erst nach der Übertragung generiert. (Siehe hierzu auch Interrupt/PEC-Modus)
2.3.2016 Embedded Systems Seite 14
µD
04EI
27.9.2009 Embedded Systems Seite 15
Analog-Eingänge
Kanalauswahl und Betriebsartenregister
ReferenzSpannung
8KanalAnalogMUX
Sample
&
Hold
INTRFlag
INTRFlag
INTRFlag
INTRFlag
10-Bit A/D-Wandler - Blockschaltbild
10 BitA/D-Konverter
mit Sukkzessiver
Approximation
Kanal
Information
Kanal
SelektionResultat-Register
P5.0 / AN0...
P5.7 / AN7
Resultat-Register
bei Channel Injection Modus
VAREF
VAGND
Konversions-Kontrolle
Adcc2 Dave
µD
04EI
ADC Control Register (ADCON)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0ADCTC ADSTC AD
CRQADCIN
ADWR
ADBSY
ADST
- ADM - ADCH
r/w r/w r/w r/w r/w r r/w - r/w - r/w
27.9.2009 Embedded Systems Seite 16
ADCON (FFA0H), SFR, bit addressable, Reset Value 0000H
Bit 2
Bit 1
Bit 0
Analog Channel Input:
0 0 0 Channel 0, Port 5.00 0 1 Channel 1, Port 5.10 1 0 Channel 2, Port 5.20 1 1 Channel 3, Port 5.31 0 0 Channel 4, Port 5.41 0 1 Channel 5, Port 5.51 1 0 Channel 6, Port 5.61 1 1 Channel 7, Port 5.7
ADCH: ADC Analog Channel Input Selection: ADM:ADC Mode Selection
Bit 5 Bit 4 Conversion modes of the analog/digital converter:
0 0 Fixed Channel Single Conversion0 1 Fixed Channel Continuous
Conversion1 0 Auto Scan Single Conversion1 1 Auto Scan Continuous Conversion
µD
04EI
ADC Control Register (ADCON) -2
ADST: ADC Start Bit, starts the A/D-Conversion when it is set to logical "1" !
ADBSY: ADC Busy Flag, shows, if a conversion is in progress on (ADBSY = logical "1")!
ADWR: ADC Wait for Read Control, if this Bit is set, the next conversion is started not before the previous conversion result is read from result register. In this case no conversion results are lost by being overwritten with new conversion results!
ADCIN: ADC Channel Injection Enable, when this bit set, the Injection Mode is enabled. In injection mode the conversion can be started immediately independent of the currently set operation mode. The injection mode „inserts“ a conversion in the normal cycle, when e.g. the result of a channel is urgently needed. In injection mode also the ADWR-Bit has to be set. The channel to be converted is set in the ADDAT2 Register.
ADCRQ: ADC Channel Injection Request Flag, starts the injection conversion if it is set to "1"!
ADSTC: ADC Sample Time Control:
ADCTC: ADC Conversion Time Control:
27.9.2009 Embedded Systems Seite 17
µD
04EI
AD Datenregister (ADDAT)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
- CHNR - - ADRESr/w - - r/w
2.3.2016 Embedded Systems Seite 18
ADDAT (FEA0H / 50H), SFR, Reset Value 0000H
ADRES: A/D Conversion result, 10 bit result of the channel with number CHNR!
CHNR: Channel number, the number of the channel the 10 Bit conversion results ADRES belongs to!
Further registers of the Analog/Digital-Converter:
P5 (FFA2H), Reset Value 0000H Port 5 Data Register (only Input!) P5DIDIS (FFA4H), Reset Value 0000H, Port 5 Digital Input Control
ADCIC (FF98H, Reset Value 0000H A/D-Converter Interrupt Control Register (End of Conversion)
ADEIC (FF9AH Value 0000H A/D-Converter Interrupt Control Register(Overrun Error / Channel Injection)
µD
04EI
Capture / Compare Unit 2
Die Capture/Compare Unit 2 wird für die Zeitmessung bei digitalen Signalen und zur Pulsweitenmodulation verwendet.Die Capture/Compare Unit 2 besteht aus den zwei 16-Bit Timern T7 und T8, sowie den 8 Capture/Compare -Registern CC16 - CC24.
Für die Zeitmessung ist der Capture-Mode vorgesehen.
Capture bedeutet, dass der Wert des zugeordneten Timers aufgrund eines externen Signals (CCxIO) im Capture/(Compare) -Register gefangen wird.
Für die Erzeugung von PWM-Signalen ist der Compare-Mode vorgesehen.
Compare bedeutet, dass der im (Capture/)Compare Register gespeicherte Wert laufend mit dem zugeordneten Timer verglichen wird. Bei Gleichstand wird z.B. ein Signal am CCxIO – Ausgang generiert.
Um den diversen Anforderungen gerecht zu werden, stehen 4 verschiedene Modi zur Verfügung, auf die später noch genauer eingegangen wird.
2.3.2016 Embedded Systems Seite 19
µD
04EI
27.9.2009 Embedded Systems Seite 20
Capture / Compare Unit 2 -Details
• Zwei 16-Bit Timer (T7,T8), mit je einem 16-Bit Reload- Register.– Timer: Interner Takt mit Vorteiler bis zu 2.5 MHz (400ns).– Counter: Externer Takteingang an T7IN bis zu 1.25 MHz, das
T3-Ausgangssignal (GPT1) kann als Takteingang benutzt werden.
• Ein Registerfeld aus acht 8-Bit Capture/Compare Registern.– Einzeln programmierbar für die Capture- oder eine der
Compare-Betriebsarten.– Einzeln den Timern T7 oder T8 zuordenbar.
• Verschiedene Compare-Betriebsarten zur flexiblen Erzeugung pulsdauermodulierter Signale (Pulse Width Modulation - PWM).– Ausgangs-Pin verändert seinen Signalzustand bei positivem
Vergleich (Compare).– 1 oder 2 Compare-Register wirken auf einen Ausgangs-Pin.– 1 or mehrere Compare-Ereignisse können in einer Periode des
Timers auftreten.– Betriebsarten, die nur Interrupts auslösen, sind möglich.
• Capture-Betriebsarten mit wählbarer Eingangsflanke.
µD
04EI
Capture Mode
2.3.2016 Embedded Systems Page 21
InterruptRequestCCxIR
EdgeSelection
Capture Reg CCx
Timer TyClock Input
CCxIO
CCMODx InterruptRequestTyIR
Im Capture Mode wird bei Auftreten eines Flankenwechsels - wobei die Flankenart programmiert werden kann- der Inhalt des zugeordneten Timers Ty in das entsprechende Capture Register CCx kopiert.Hierbei wird zusätzlich ein Interrupt Request CCxIR generiert.
µD
04EI
Compare Modi
2.3.2009 Embedded Systems Page 22
Compare Reg CCx
Clock
reset
Comparator
Timer TyCCMODx Interrupt request
CCxIR
setPortLatch
CCxIO
In den Compare Modes werden laufend die Werte des Compare Register CCx und des zugeordneten Timers Ty verglichen. Bei Gleichheit werden je nach Modi verschiedene Aktionen ausgeführt werden. Im Mode 3 wird z.B. das Ausgangssignal CCxIO gesetzt und das zugehörige CCxIR-Bit gesetzt. Beim Uberlauf von Timer Ty wird das Signal CCxOI wieder zurückgesetzt.
(MOD3)
µD
04EI
27.9.2009 Embedded Systems Seite 23
Mode 0: nur die INTR Flags werden gesetzt
Mode 1:die INTR Flags werden gesetzt, der Zustand des Port-Pin wird invertiert
Co
mp
are
INT
R
Co
mp
are
INT
R
Port LevelP8.x
CAPCOM2: Compare Modi
• Modus 0 und 1: Mehrere Compare-Ereignisse sind in einer Timer-Periode möglich.
Neuer
Reload Wert
Compare Wert 2
Compare Wert 1
FFFF
Reload Wert
Wert 1 Wert 2
wird geändert zu
Compare Register X:
• Modus 2 und 3: Lediglich ein Compare-Ereignis findet innerhalb einer Timer-Periode statt.
Mode 2: nur die INTR Flags werden gesetzt
Mode 3:die INTR Flags werden gesetzt, der Zustand des Port-Pin wird gesetzt bei Compare und zurück-gesetzt bei Timer-Überlauf C
om
pa
reIN
TR
Tim
erIN
TR
Port Level P8.x
FFFF
Compare Wert 2
Compare Wert 1Reload Wert
Neuer
Reload Wert
wird geändert zu
Wert 1 Wert 2Compare Register X:
µD
04EI
27.9.2009 Embedded Systems Seite 24
CAPCOM2: Doppelregister - Compare
• Zwei Compare-Register wirken auf einen Port Pin.
• Die Betriebsart wird durch spezielle Kombination der beiden Modi 0 und 1 realisiert.
Wert Y
Compare Wert Y
Compare Wert X
FFFF
Reload Wert
Neuer
Reload WertWert XBank1 Compare Register X:
(programmiert für Modus 1)
und das zugeordnete
Bank2 Compare Register Y:(programmiert für Modus 0)
Timer INTR
Port Level P8.x
Compare INTR
Reg. YCompare INTR
Reg. X
Adcc2 Dave
µD
04EI
27.9.2009 Embedded Systems Seite 25
CAPCOM2 – Zusammenfassung
Flankenauswahlfür
Capture Input
InputMode
Control
T7 Reload T7 Reload
RunRunEnable
Clk max.Clk max.2.5 MHz
T8 Reload T8 Reload
Timer T8 Timer T8
Timer T7 Timer T7
Mode Control
INTRFlag
INTRFlag
INTRFlag
INTRFlag
INTRFlag
INTRFlag
INTRFlag
INTRFlag
T3-Overflow
InputMode
Control
Clk maxClk max2.5 MHz
Für die Kanäle24 bis 27 sind nurCapture-Eingangs-signale möglich
Kanal 27 kann “ADC Channel Injection” triggern
• Capture Mode• Compare Mode 0• Compare Mode 1• Compare Mode 2• Compare Mode 3• Double Register
Compare Mode 0
P1H.3 / T7IN
P8.0 / CC16IO
P8.1 / CC17IO
P8.2 / CC18IO
P8.3 / CC19IO
P1H.4 / CC24IO
P1H.5 / CC25IO
P1H.6 / CC26IO
P1H.7 / CC27IO
acht 16 Bit
Capture/CompareRegister
CC16-CC19
CC24-CC27
RunRunEnable
Für die Kanäle16 bis 19 sind
Capture-Eingangs-und Compare-
Ausgangs-signale möglich
T3-Overflow
µD
04EI
27.9.2009 Embedded Systems Seite 26
164CL
XTAL
C166-Core
Port 5 Port 3
CPU
Dua
l Por
t
RAM
2 KByte
Interrupt Controller
Watchdog
Peripheral Data
External Instr./Data
Instr./Data
USART
ASC
BRG
GPT1
16
16
16
1632
PEC
64 KROM
(C164 CI-8RM)
orOTP
(C164CI-8EM)
Interrupt Bus
Data
Data
Port 8
BRG
SSC
Sync. Channel(SPI)
PLL-Oscillatorprog. Multiplier:
0.5; 1; 1.5; 2;2.5; 3; 4; 5
XB
US
(16-
bit N
ON
MU
X D
ata
/ A
ddre
sses
)
T2
T4
T3
13 ext. IRFull-CANInterfaceV2.0Bactive
RTC
10-BitADC
Tim
er 7
Tim
er 8
Port 1
Tim
er 1
3
1 Comp.Channel
3/6 CAPCOMChannels
CAPCOM6 Unit forPWM Generation
8 9 4 16
6
16
Port 4
8-Channels
External Bus8/16 bit
MUX only&
XBUSControl
CAPCOM 2
8-Channel
C164CI - Taktverteilung
P4.6/ CAN TxD
P4.5/ CANRxD
Por
t 0
µD
04EI
27.9.2009 Embedded Systems Seite 27
Oszillator Eigenschaften
• Der Oszillator startet bei einer Versorgungsspannung von 3 V.
• Sicherer Betrieb bis zu einer Versorgungsspannung von 2.7 V.
• Minimale Leistungsaufnahme bei 3 V Versorgungsspannung.
• Quarz-Frequenzbereich: 3.5 MHz ≤ fosc ≤ 16 MHz.
• Frequenzbereich mit ext. Oszillator: 1 MHz ≤ foscillator ≤ 40 MHz.
• Phased Locked Loop (PLL) für niedrige Eingangsfrequenzen.
• Slow Down Divider für die Reduktion der Leistungsaufnahme.
• Getrennte Takttreiber für unterschiedliche Systembereiche.
µD
04EI
27.9.2009 Embedded Systems Seite 28
System-Taktversorgung
Software
Slow Down Divider (SDD)
2:1
fCPU
PLLprog. Multiplier
1, 1.5, 2, 2.5, 3, 4, 5
OWD
MUX
Hardware-Einstellung während Reset
MUX
Direct Drive
MUX
OscXTAL
5 Bit Vorteiler
32:1RTC
Interfaces
Peripherals
CPU
IdlePower-Down
PCDDIS
Power-Down
PDCON
µD
04EI
27.9.2009 Embedded Systems Seite 29
Verminderung der Leistungsaufnahme Überblick
• Design– Optimierte Oszillatorschaltung
– Optimierte Taktverteilung
• Power Management– Betriebsarten zur Verminderung der Leistungsaufnahme:
Idle, Power Down - eigene Maschinenbefehle
– Flexible Taktversorgung der Periphie
– “Slow Down”-Betriebsart
• Besonderheit– Real-Time Clock mit Interrupt zum zyklischen Aufwecken
µD
04EI
27.9.2009 Embedded Systems Seite 30
Power Management
RTC
PLL
EXIN
ASC
SSC
� � ��
fCPU
fPeripherieSlow Down Devider
System Clock Generation Peripherals
ADC
GPT1
CAPCOM2
CAN
� � � � � � � � �
� � � � � � � � � �
� � �
WDT
CAPCOM6
� � � Clock DriverRTC
Power Down
� � � InterfaceClock Driver
Clock DriverCPU
OscillatorOscillator
XTAL
� � �� � �
�
� � ��
� � ��
� � ��
� � ��
� � ��
� � �
PeripheralClock Driver
� � ��
� � ��
fSystem
fRTC
Interface Peripherals
Idle Mode
µD
04EI
27.9.2009 Embedded Systems Seite 31
Slow Down - Betrieb
• Slow Down Divider (SDD): 5-Bit Reload-Register für einen programmierbaren Vorteiler mit Faktoren 1 bis 32
– Erniedrigt die CPU-Frequenz (z.B. 16 MHz / 32 = 0.5 MHz)
• Ermöglicht eine deutliche Reduktion der Leistungsaufnahme
• Anmerkungen: – am Ausgang CLKOUT liegt ebenfalls das reduzierte
Frequenzsignal an
– der Oszillator-Watchdog läuft in dieser Betriebsart nicht - die PLL wird angehalten
• Um serielle Kommunikation im Slow-Down-Betrieb zu ermöglichen, ist eine geeignete Quarzfrequenz auszuwählen
µD
04EI
27.9.2009 Embedded Systems Seite 32
Flexible Freigabe der Peripherie
• Die Peripherie ist in Gruppen unterteilt, die über eigene Takttreiber verfügen:
– Interfaces: ASC0, SSC, Fast Ext. Interrupts und WDT (immer aktiv)
– PER: alle anderen peripheren Module und der Interrupt Controller
– RTC: Real Time Clock
• Der Takttreiber der Gruppe "PER" kann wahlweise aktiv oder inaktiv geschaltet werden, dies wirkt auf alle angeschlossenen Peripheriemodule.
• Jedes Peripheriemodul kann wahlweise per Software freigegeben oder gesperrt werden.
• Die Register der “stillgelegten” Peripherie können gelesen und beschrieben werden - Ausnahme: XBUS Peripherals.
• Die Peripherie setzt nach erneuter Freigabe ihren Betrieb fort.
• Deaktivieren ist sowohl im “aktiven Betrieb” als auch in der “Idle-Betriebsart” möglich.
SFR
µD
04EI
27.9.2009 Embedded Systems Seite 33
Zusammenfassung: Power Management
• Möglichkeiten im “Aktiven Betrieb”:– Freigabe/Sperren des Takttreibers der Gruppe "Peripherie” (PER)
ist möglich
– Freigabe/Sperren des Takttreibers einzelner Resourcen ist möglich
– “Slow Down”-Betrieb kann aufgenommen werden
• Eigenschaften im “Idle Mode”– Die CPU arbeitet nicht
– Die Möglichkeiten des “Aktiven Betriebs” können zuvor geeignet eingestellt werden.
• Eigenschaften des “Power Down Mode”– CPU, "Interface"- Gruppe und "Peripherie"-Gruppe sind außer
Betrieb
– RTC und Oszillator können wahlweise weiterbetrieben werden
– Die Port-Ausgangstreiber können wahlweise ihren Betrieb aufrechterhalten
µD
04EI
27.9.2009 Embedded Systems Seite 34
Power Consumption
Active Mode
Idle Mode
� � � � � � � � � � � � ! � � � " # $ % % & ' � ( $ ) � # $ % %
� � � � � � � � � � � � ! � � � " # $ * & ' � ( $ ) � # $ % %
� � � � � � � � � � � � ! � � � " # $ % % & ' � ( $ ) � # $ *
� � � � � � � � � � � � ! � � � " # $ * & ' � ( $ ) � # $ *
Active Mode and disabled "PER" group clock driver
Idle Mode and disabled "PER" group clock driver
Flexible Peripheral Management
Flexible Peripheral Management
Active or Idle Mode
Active or Idle Mode
S
L
O
W
D
O
W
N
Power Consumption
Geschätzte Leistungsaufnahme im Überblick
µD
04EI
27.9.2009 Embedded Systems Seite 35
164CL
XTAL
C166-Core
Port 5 Port 3
CPU
Dua
l Por
t
RAM
2 KByte
Interrupt Controller
Watchdog
Peripheral Data
External Instr./Data
Instr./Data
USART
ASC
BRG
GPT1
16
16
16
1632
PEC
64 KROM
(C164 CI-8RM)
orOTP
(C164CI-8EM)
Interrupt Bus
Data
Data
Port 8
BRG
SSC
Sync. Channel(SPI)
PLL-Oscillatorprog. Multiplier:
0.5; 1; 1.5; 2;2.5; 3; 4; 5
XB
US
(16-
bit N
ON
MU
X D
ata
/ A
ddre
sses
)
T2
T4
T3
13 ext. IRFull-CANInterfaceV2.0Bactive
RTC
10-BitADC
Tim
er 7
Tim
er 8
Port 1
Tim
er 1
3
1 Comp.Channel
3/6 CAPCOMChannels
CAPCOM6 Unit forPWM Generation
8 9 4 16
6
16
Port 4
8-Channels
External Bus8/16 bit
MUX only&
XBUSControl
CAPCOM 2
8-Channel
C164CI - Die Peripherie
P4.6/ CAN TxD
P4.5/ CANRxD
Por
t 0
µD
04EI
27.9.2009 Embedded Systems Seite 36
Real-Time Clock (RTC)
• Zählt Zeiteinheiten - Time Ticks
• Die Ticks werden, unabhängig vom CPU-Takt, durch die externe Quarzfrequenz und einen programmierbaren Vorteiler festgelegt
• Zyklischer zeitbasierender InterruptDie Zykluszeit kann über ein Reloadregister festgelegt werden
• Zusätzliche FunktionDas RTC-Register (32 Bit) und der programmierbare Vorteiler können zu einem 48-Bit Zeitgeber kaskadiert werden
µD
04EI
27.9.2009 Embedded Systems Seite 37
Quarz oderexterner
Oszillator
Zeitdauer zwischen zwei Interrupts
Oszillatorfrequenz Minimalzeit Maximalzeit Mögliche RTC-Zeitbasis
1 s4 MHz 0.064 ms 4.1 s5 MHz 0.052 ms 3.35 s 1 s8 MHz 0.032 ms 2 s 1 s
10 MHz 0.026 ms 1.6 s 1 s12 MHz 0.022 ms 1.3 s 1 s16 MHz 0.016 ms 1 s 1 s20 MHz 0.013 ms 0.8 s 0.1 s24 MHz 0.011 ms 0.6 s 0.1 s
externer Oszillator
RTC - Blockdiagramm
4:1 RTC
Takttreiber
8:1
VorteilerOszillator
XTAL
T14
16-bit Timer
T14-Reload
Trim-Register
Programmierbarer Vorteiler
INTRFlag
des RTC
INTRFlag
des RTC
+ , - . / 0 1+ , - 2 3 4
32-bit Timer
SFR
µD
04EI
27.9.2009 Embedded Systems Seite 38
RTC-basierender zyklischer Interrupt
Anwendung:
• Zeitgesteuertes Abwechseln von “Aktiven Betrieb” und “Idle Betrieb”
• Während des aktiven Betriebs bleiben alle ungenutzten Peripheriemodule gesperrt (Flexible Peripheral Management).
• Verlassen des “Idle-Betriebs” und Übergang zum aktiven Betrieb:
– durch Eintreffen des RTC-Interrupt
– durch Eintreffen eines “externen” Ereignisses (ASC, SSC, CAN, EXIN).
IDLE MODE
1 Zyklus
Aktiver Modus mit “FlexiblePeripheral Management”
Aktiver Modus mit “FlexiblePeripheral Management”
µD
04EI
27.9.2009 Embedded Systems Seite 39
Watchdog Timer (WDT) - 20 MHz
• Überlauf eines 16-Bit-Zählers führt zu:– Systemreset
– Aktivieren des Ausgangssignals RSTOUT
– Setzen des zugeordneten Kontrollbits
– WDT bleibt weiter aktiv
• Programmierbarer Eingangstakt abgeleitet vom Systemtakt
• 8-Bit-Reloadregister für das höherwertige Byte
• Zählperioden von 25.6µs bis zu 470ms
• Zurücksetzen des Zählregisters (Reload) erfolgt mittels speziellem Befehl
Der Watchdog wird verwendet, um ein System im Fall von Hardware-oder Software-Fehlern wieder in einen definierten Zustand zurückzu-führen. Dazu wird ein Zähler periodisch erhöht. Bei einem Überlauf wird automatisch ein Restart durchgeführt.
µD
04EI
27.9.2009 Embedded Systems Seite 40
WDTRefresh
8-BitReload-Register Null
RSTOUT
Reset
16-bit Timer
high Byte low Byte
WDT control
CPU CLK / 2
Watchdog Timer - Blockdiagramm
CPU CLK / 128
WDT
µD
04EI
27.9.2009 Embedded Systems Seite 41
Synchrone Serielle Schnittstelle (SSC - 20 MHz)
• Vollduplex-Betrieb
• Eigener Baudraten-Generator für hohe Übertragungsraten – Bis zu 5 MBit/sec Transferrate
• Kompatibel zu SPI (Industriestandard)
• Master- (Takt ist Ausgang) oder Slave-Betriebsart (Takt ist Eingang)
• Programmierbare Varianten für unterschiedlichste Erfordernisse der synchronen seriellen Kommunikation– MSB oder LSB zu erst
– Länge des Datenrahmens von 2 bis 16 Bits
– Taktpolarität und -phase
µD
04EI
27.9.2009 Embedded Systems Seite 42
SSC - Blockschaltbild
Baud RateGenerator
ClockControl
Control Unitwith Controland StatusRegisters
Shift Registerprogrammable from 2 - 16-bit
MSB- / LSB-First Selection
Receive Buffer
Transmit Buffer
Internal Bus
InterruptRequest
Slave Mode
Master ModeCPU
ClockMaster / Slave
Selection
P3.13 / SCLK
P3.8 / MRST
P3.9 / MTSR
SFR
µD
04EI
27.9.2009 Embedded Systems Seite 43
System Reset
Der C164 unterscheidet die folgenden Reset-Ursachen
• Hardware Reset
• Software Reset
• Watchdog Timer Reset
Einfache Reset-Schaltung für Power-Up• 22µF Kondensator zwischen dem Pin RESIN# und Masse
Systemdefinition beim Start-Up• Bestimmte Eigenschaften des C164CI müssen bereits vor der
Ausführung des ersten Befehls fixiert sein (BUS-Konfiguration, CS#-Signale, internes/externes ROM ...)
• EA# - Pin legt externen/internen Programmspeicher fest• Um weitere Festlegungen durchzuführen werden die an Port0 und dem
Pin RD# anliegenden Pegel während des Reset verwendet. ( 1 = HIGH = unbeschaltet
0 = LOW = Pull-Down-Widerstand RPD ≤ 8k2 )
Bootstrap-Modus beim Start-Up• ermöglicht Programmieren eines Flash-EPROM‘s
µD
04EI
27.9.2009 Embedded Systems Seite 44
System Startkonfiguration
Pin EA# (External Access) = '1' � Programmstart aus internem ROM= '0' � Programmstart aus externem ROM
Pin RD# (Read) = '1' � Oszillator Watchdog disable= ‘0' � Oszillator Watchdog enable
SFR
Resetzustand des Port0 P0H, P0L
H7 H6 H5 H4 H3 H2 H1 H0 L7 L6 L5 L4 L3 L2 L1 L0
Port P0 SALSEL CSSEL WRC BUSTYP ADP EMU
CLKCFG SALSEL CSSEL WRCRP0H
ClockGenerator
Port 4Logic
Port 4Logic
Zu interner Kontrolllogiknur bei HW-Reset
SYSCON BUSCON 0
CLKCFG
RD#
SMOD
EA#
µD
04EI
2.3.2016 Embedded Systems Seite 45
Bootstrap Loader
Der built-in bootstrap loader des C164 stellt einen Mechanismus zur Verfügungum das startup Programm, das nach einem Reset ausgeführt wird, mit Hilfe der Seriellen Schnittstelle zu laden. Der C164 startet den BSL-Mode, falls am Endedes Hardware Resets der Pin P0L.4 low (SMOD = 1011, siehe oben ) ist.
Folgende Schritte werden durchgeführt:
• ASC0 erwartet ein Null-Byte
• Aus der Dauer des Null-Bytes wird automatisch die nötige Baudrate ermittelt.
• C164 sendet einen Identifier mit dieser Baudrate zurück.
• Genau 32 Bytes werden von der seriellen Schnittstelle im internen RAM bei 0xFA40 - 0xFA5F deponiert und damit die serielle Schnittstelle in Betrieb genommen.
• Anschließend erfolgt Programmstart bei Adresse 0xFA40.
CodeBeispiel
µD
04EI
23.9.2009 Embedded Systems Seite 1
164CL
XTAL
C166-Core
Port 5 Port 3
CPU
Dua
l Por
t
RAM
2 KByte
Interrupt Controller
Watchdog
Peripheral Data
External Instr./Data
Instr./Data
USART
ASC
BRG
GPT1
16
16
16
1632
PEC
64 KROM
(C164 CI-8RM)
orOTP
(C164CI-8EM)
Interrupt Bus
Data
Data
Port 8
BRG
SSC
Sync. Channel(SPI)
PLL-Oscillatorprog. Multiplier:
0.5; 1; 1.5; 2;2.5; 3; 4; 5
XB
US
(16-
bit N
ON
MU
X D
ata
/ A
ddre
sses
)
T2
T4
T3
13 ext. IRFull-CANInterfaceV2.0Bactive
RTC
10-BitADC
Tim
er 7
Tim
er 8
Port 1
Tim
er 1
3
1 Comp.Channel
3/6 CAPCOMChannels
CAPCOM6 Unit forPWM Generation
8 9 4 16
6
16
Port 4
8-Channels
External Bus8/16 bit
MUX only&
XBUSControl
CAPCOM 2
8-Channel
C164CI - CAN-Schnittstelle
P4.6/ CAN TxD
P4.5/ CANRxD
Por
t 0
µD
04EI
23.9.2009 Embedded Systems Seite 2
Controller Area Network - CAN
• CAN ist ein Bussystem für die serielle Kommunikation, das verteilte Echtzeit-Aufgaben mit sehr hohen Zuverlässigkeitsanforderungen effektiv unterstützt.
• Es wird hauptsächlich in der Automobilindustrie eingesetzt, um mehrere Steuergeräte zu verbinden
µD
04EI
CAN-BUS TOPOLOGY
23.9.2009 Embedded Systems Seite 3
µD
04EI
Spannungspegel im CAN Bus
23.9.2009 Embedded Systems Seite 4
µD
04EI
Frame Aufbau
23.9.2009 Embedded Systems Seite 5
Frame Typen:- Daten-Frame zur Übertragung von Daten- Remote-Frames zur Anforderung von Daten- Error-Frame zur Signalisierung von Fehlern- Overload-Frame dient zur Zwangspause
µD
04EI
CAN SpezifikationIn der CAN Spezifikation sind folgende Eigenschaften für den CAN Bus festgelegt:
• Systemart: Multimaster
• Topologie: Bus
• Leitungslänge: 1 km bei einer Übertragungsrate von 50 kBit/s;
40 m bei einer Übertragungsrate von 1 MBit/s
• Übertragungsmedium: (verdrillte) Zweidrahtleitung, Lichtwellenleiter
• Buszugriffsverfahren: CSMA/CD (collision detection)
• Bitcodierung: NRZ
• Data format Standard Format:
1 Start, 11 Identifier, 1 RTR, 6 Control, 0-64 Daten,
15 CRC und 1 CRC Delimiter, 2 Acknowledge und 7 End of Frame Bits
• Nutzdaten: 0-64 Bit
• Overheaddaten: 44-64 Bit; zwischen den Paketen sind zumindest
3-Bit Interframe Space
• Knotenanzahl n: typisch 30
23.9.2009 Embedded Systems Seite 6
µD
04EI
23.9.2009 Embedded Systems Seite 7
• Asynchroner serieller BUS mit linearer BUS-Struktur und identischen Knoten (Multi-Master-BUS)
• Es werden nicht Knoten adressiert - die Adressen sind Teile der Message und beziehen sich auf diese, genauso ist die Priorität eine Eigenschaft der Message
• Zwei BUS-Zustände: dominant und rezessiv– die BUS-Anschaltung erfolgt nach dem "Wired-AND”-Mechanismus:
dominante Bits (logisch 0) überschreiben rezessive Bits (logisch 1)
• BUS-Zugriff mittels CSMA/CD mit NDA (Carrier Sense Multiple Access/ Collision Detection mit Non-Destructive Arbitration):– vor dem Senden wird getestet, ob der BUS frei ist
– jeder Sender testet, ob der BUS-Pegel seinem Sendepegel entspricht
– bei Widerspruch wird das Senden eingestellt und in den Empfangsmodus geschaltet
Prinzipielle Eigenschaften von CAN
µD
04EI
23.9.2009 Embedded Systems Seite 8
CAN - Merkmale
• Geringe Kosten– Serieller BUS für 2-Draht-Leitungen– Hohe Stückzahlen der CAN-Bausteine im Kraftfahrzeug- (Automotive-)
Sektor und in der Industrieelektronik.
• Zuverlässigkeit– Ausgefeilte Mechanismen zur Fehlererkennung und -behandlung
führen zu hoher Zuverlässigkeit der Übertragung. Beispiel: • 500 kbit/s, 25% BUS-Auslastung, 2000 Betriebsstunden pro Jahr.
Resultat: 1 nicht entdeckter Fehler in 1000 Jahren! – Fehlerbehaftete Meldungen werden erkannt und wiederholt.– Jeder BUS-Knoten wird über einen Fehler informiert.– Geringe Empfindlichkeit gegenüber elektromagnetischen
Einstreuungen.
• Flexibilität– Knoten können sehr einfach ergänzt oder entfernt werden (plug & play).– Die Anzahl der Knoten ist durch das Protokoll nicht begrenzt.
µD
04EI
23.9.2009 Embedded Systems Seite 9
• Gute Echtzeit-Eigenschaften– Kurze Meldungen (messages): 0 bis 8 Bytes Daten / Message.
– Kurze Latenzzeit zwischen Anforderung einer Übertragung und Start der Übertragung.
– Priorisierung von Meldungen (Arbitration on Message Priority - AMP)
– Multi Master Protokoll mit CSMA/CR. (Collision resolving)
CAN - Merkmale
• Multi-Master-Operationen– Jeder Knoten kann den BUS erhalten
– Die BUS-Kommunikation wird durch fehlerhafte Knoten nicht verhindert
– Fehlerhafte Knoten trennen sich selbst vom BUS ab.
• Geschwindigkeit– maximale Datenrate beträgt 1 MBit/s bei 40m BUS-Länge und immer noch
etwa 40 kBit/s bei 1000m BUS-Länge.
• Flexible Adressierungsmechanismen– Meldungen können an einen oder mehere Knoten gesendet werden.
– Alle Knoten empfangen simultan öffentliche Daten.
µD
04EI
23.9.2009 Embedded Systems Seite 10
CAN: Typische Anwendung
µD
04EI
23.9.2009 Embedded Systems Seite 11
Application Layer
Physical Signalling(Bit –coding, -timing, -synchron.)Physical Medium Attachment(Transmitter/Receiver-Spec.)Medium Dependent Interface(Cable, Plug...)
PhysicalLayer
Logical Link ControlError detection, error handling;Control of data-flow;Acceptance filtering.
Medium Access ControlBit-Stuffing, Framing, Arbitration
DataLink
Layer
Man
agem
ent
Process-Application
Layer
7
2
1
Protokollschichten des CAN
CAN(ISO
11898)Bosch
DeviceNet
CAL, CANopen (CiA)
SDS (Honeywell)etc ...
µD
04EI
Protokollschichten des CAN
23.9.2009 Embedded Systems Seite 12
• Die Physica Layer definiert wie Signale übertragen werden.
• Der Data Link Layer bildet das Kernstück des CAN Protokolls. Diese Schicht ist zuständig für das Bit-Timing, die Synchronisation, das Paketieren von Nachrichten, die Arbitration, das Acknowledgement von Nachrichten und die Detektion von Fehlern.
• Der Application Layer ist für die jeweilige Anwendung reserviert.
µD
04EI
BUS-Arbitrierung
Die Buszuteilung erfolgt durch das Verfahren CSMA/CD Carrier Sense Multiple Access/ Collision Detection
Wollen nun zwei oder mehrere Busteilnehmer zum selben Zeitpunkt den Bus belegen (Multiple Access), wird eine drohende Kollision der Botschaften mit Hilfe des Wired-AND Prinzips („dominant überschreibt rezessiv”) und des Identifiers durch bitweise Arbitrierung vermieden. Jeder Knoten gibt Bit für Bit den Identifier seiner Nachricht auf den Bus und beobachtet den Buspegel. Eine Station, die ein rezessives Bit sendet, jedoch ein dominantes Bit zurückliest, verliert in diesem Moment den Wettstreit um den Bus und geht auf Empfang (siehe nachfolgende Abbildung), da der Identifier eines konkurrierenden Teilnehmers niedriger und damit die Priorität von dessen Nachricht höher ist.
23.9.2009 Embedded Systems Seite 13
µD
04EI
23.9.2009 Embedded Systems Seite 14
NODE A
NODE B
rezessiv
dominant
rezessiv
dominant
bus idle
CAN BUS
rezessiv
dominant
Knoten B sendet rezessiven Pegelliest aber dominanten Pegel zurück
Knoten B verliert die Arbitrierungund schaltet sich auf Empfang
BUS-Arbitrierung - 2
µD
04EI
23.9.2009 Embedded Systems Seite 15
CAN_H
CAN_L
z.B.SAE81C90
CAN-Transceiver
CAN-BUS
CAN-Controller
Host-Controller
Application
z.B.80C166
z.B.ABS
z.B.C164CR
oderC515C
z.B.EMS
Node A Node B
(weitere Knoten)
UDiff
CAN
Typische Struktur von CAN-Knoten
µD
04EI
23.9.2009 Embedded Systems Seite 16
Identifier CRC-FieldData Field (0..8 Bytes)
• Es gibt zwei Situationen der Kommunikation:– Ein Knoten sendet (’talker’),
alle anderen Knoten empfangen (’listener’)– Knoten A fordert (von einem Knoten) etwas an und erhält die Antwort.
• Im ’Talk’-Modus benutzten CAN-Knoten Datenrahmen.– Datenrahmen bestehen aus:
• einem Identifier• den Daten, die übertragen werden sollen• und einer CRC-Prüfsumme.
CAN Datenrahmen (data frames)
– Der Identifier spezifiziert den Inhalt der Nachricht (‘Fahrzeug-geschwindigkeit, ‘Öltemperatur’, usw.) und die Priorität der Nachricht.
– Das Datenfeld enthält den zugehörigen Wert (’36 m/s’, ’110°C’, usw.).– Der Cyclic Redundancy Check ermöglicht es Übertragungsfehler zu
erkennen.– Alle Knoten empfangen den Datenrahmen, jene die die Information
nicht benötigen verwerfen sie.
µD
04EI
23.9.2009 Embedded Systems Seite 17
• Um Informationen abzufragen benutzt CAN “Remote Frames”– Ein Remote Frame besteht aus dem Identifier und der CRC-
Prüfsumme, er enthält keine Daten.
CAN Remote Frames
Identifier CRC-Field
– Der Identifier verweist auf die Information, die abgefragt werden soll (’Fahrzeuggeschwindigkeit', ’Öltemperatur', usw.) und die Priorität der Nachricht.
– Jener Knoten, der über die angeforderte Information verfügt (z.B. der Sensor für die Öltemperatur) reagiert mit dem Senden des zugeordneten ‘Data Frame’ (gleicher Identifier, das Datenfeld enthält die gewünschte Information).
Data Frame; Identifier ’Oel_temp';enthält angeforderte Information
~~~~~~~~~~
Remote Frame; Identifier ’Oel_temp'Node A
Node B
(Öltemp.-Sensor)
Wie heiß ist das Öl?
115°C115 °C !
µD
04EI
23.9.2009 Embedded Systems Seite 18
Full-CAN Controller
Message Object 2
CAN Bus
Host CPU
Message Object n CPU load
low high
Message Object 1
.
.
Accep-tance
Filtering
MessageManage-
ment
☺
CAN-Controller
• CAN-Controller führen autark die Verwaltung der Messages und ihre Qualifizierung (acceptance filtering) durch:
• Full-CAN-Controller– Es existieren mehrere Message-Objekte mit jeweils eigenem Identifier.
– Nur wenn eine Message mit einem der vorgegebenen Identifiern empfangen wird, wird diese gespeichert und die Programmausführung der CPU unterbrochen.
– Auf diese Weise läßt sich die Auslastung der CPU gering halten.
µD
04EI
23.9.2009 Embedded Systems Seite 19
Eigenschaften des CAN-Moduls des C164CI
• Maximale CAN-Transferrate von 1 MBit/s
• Full CAN Device:– 15 Message-Objekte mit eigenem Identifier
und eigenen Status- und Control-Bits
– Jedes Message-Objekt kann als Sende-oder Empfangsobjekt definiert werden.
µD
04EI
23.9.2009 Embedded Systems Seite 20
• Programmierbares Masken-Register für Acceptance-Filterung– Globale Maske für eintreffende Messages (Full-CAN-Objekte)
– Zusätzliche Maske für Message-Objekt 15(Basis-CAN-Eigenschaft)
• Basis-CAN-Eigenschaft (Message-Objekt 15)– Zwei Empfangspuffer
– Eigenes globales Masken-Register zur Acceptance-Filterung
• Verbindung zur CPU (C166-Core)– Das Modul wird über den chip-internen XBUS angeschlossen
(16-Bit BUS-Breite)
– Interrupts direkt zur CPU mit allen Möglichkeiten der Interruptbehandlung.
• Zur Anbindung an den CAN-BUS ist lediglich die physikalische Pegelkonversion über einen Standard-CAN-Transceiver nötig (siehe nachfolgende Folie).
Eigenschaften des CAN-Moduls des C164CI
µD
04EI
23.9.2009 Embedded Systems Seite 21
CAN-BusTransceiver
Receive
Transmit
CAN_H
CAN_L
P4.5
P4.6
CAN_L
z.B. P8.0
Pa.b
Pc.d
C164CI
CAN_H CAN_RxD
CAN_TxD
R(opt)
(Standby)
Verbindungzur
Applikation
Verbindung des C164CI zum CAN-BUS
• Das CAN-Modul benutzt 2 Anschlüsse des Port 4 als Schnittstelle zu einen BUS-Transceiver (P4.5 - CAN_RxD, P4.6 - CAN_TxD).
µD
04EI
23.9.2009 Embedded Systems Seite 22
CAN MESSAGES
ACCEPTANCE FILTERING
CAN CONTROLLER
Global Mask (Teil derGeneral Registers)
Arbitration Register(LAR, Teil desMessage Object)
11 1 1 1 1 1 1 1 00
11 0 0 1 0 0 1 1 10
ResultierendeGültige Identfier "d" = don't care
11 0 0 1 0 0 1 1 dd
a) 11 0 0 1 0 0 1 1 10
b)
c)
d)
11 0 0 1 0 0 1 1 00
11 0 0 1 0 0 1 1 01
11 0 0 1 0 0 1 1 11
Wegen der "don't care"-Bits werden auch Messages mit den Identifiern b)..d) akzeptiert.
µD
04EI
3.3.2016 Embedded Systems Seite 23
ACCEPTANCE FILTERING -2
Um zu entscheiden, ob eine Message vom Empfänger akzeptiert wird, wird die ID einer ankommenden Message mit dem Inhalt (ID) des Arbitration-Registers des im Controller hinterlegten Empfangsobjektes verglichen. Für diesen Vergleich sind nur die Bits von Bedeutung, die im Globalen Masken-Register eine Eins besitzen. Enthält das Globale Masken-Register z.B. lauter Einser (11-Bit Wert: 0x7FF), so muss die ID des Messages-Objektes identisch sein mit der ID der ankommenden Nachricht (Message a). Da im obigen Beispiel das Global Mask Register 2 Nullen enthält, werden diese beiden Bits bei der Identitätsprüfung nicht ausgewertet. Es werden somit auch die Messages b, c und d vom Empfänger akzeptiert.Anmerkung:
Ein Controller besitzt in der Regel mehrere Empfangs-Objekte. Werden Messages von mehr als einem Empfangs-Objekt akzeptiert, so erfolgt die Speicherung in dem Objekt mit der niedrigsten Nummer. Falls „remote frames“ von mehr als einem Message Objekt akzeptiert werden, so werden die Daten des Objekts mit der niedrigsten Nummer gesendet.
µD
04EI
23.9.2009 Embedded Systems Seite 24
Bit-Timing
TSeg1 TSeg2Sync-Segm.
Sync-Segm.
Sample-Zeitpunkt
Sende-Zeitpunkt
Bitdauer
1 Zeit-einheit
Das Bit-Timing wird vom Systemtakt fPERIPHERAL abgeleitet und istprogrammierbar bis zu einer Datenrate von 1 MBaud (@ f CPU 16 MHz). Für Synchronisationszwecke wird die Dauer eines Bits, die Bit-Zeit, in vier Abschnitte unterteilt die ihrerseits jeweils aus einer fixen Anzahl aus sogenannten Zeitquanten
bestehen, siehe Abbildung. Die Dauer einer einzelnen Bit-Zeit kann im Bereich von 8 bis 25 Zeitquanten programmiert werden und hängt von der Länge des Buses und der benutzten Übertragungsrate ab .
SFRcan
µD
04EI
23.9.2009 Embedded Systems Seite 25
Register des CAN-Controllers EF00H
General Registers
Control/Status Register EF00H
EF10H Message Object 1
Interrupt Register
EF02H
EF20H Message Object 2
Bit Timing Register
EF04H
EF30H Message Object 3
Global Mask Short
EF06H
EF40H Message Object 4
Global Mask Long
EF08H
EF50H Message Object 5
EF0AH
EF60H Message Object 6
Mask of last Message
EF0CH
EF70H Message Object 7
EF0EH
EF80H Message Object 8
EF90H Message Object 9
EFA0H Message Object 10
EFB0H Message Object 11
EFC0H Message Object 12
EFD0H Message Object 13
EFE0H Message Object 14
EFF0H Message Object 15
SFRcan
µD
04EI
23.9.2009 Embedded Systems Seite 26
Message Object
Message Control +0 Objekt Startadresse
+2
Arbitration +4
Data 0 Message Config. +6
Data 2 Data 1 +8
Data 4 Data 3 +A
Data 6 Data 5 +C
reserviert Data 7 +E
SFRcan
CAN-SW
µD
04EI
Register des CAN-Controllers -2
3.3.2016 Embedded Systems Seite 27
Das im C164 implementierte CAN Modul besteht aus 15 Message
Objects, wobei jedes mit einem eigenen Satz an Registern ausgestattet ist. Über jedes dieser Subsysteme können Nachrichten verschicktoder empfangen werden. Neben diesen einzelnen Message Objects gibt es einen Satz an allgemeinen Registern über die eine globale Konfiguration des CAN Moduls vorgenommen wird.Letzteres besteht aus den Mask Registern, einem Bit-Timing Register, dem Interrupt Register und einem allgemeinen Control/Status Register (vgl. Abbildung ). Jedes einzelne Message Object wiederum enthält, ihm zugeordnet eigene Register zur Steuerung der Nachrichten. Über diese werden festgelegt, ob die zugeordneten Nachrichten verschickt oder empfangen werden und wie viele Datenbytes benötigt werden. Für alle Message Objects wird die Bitrate in den globalen Registern des CAN Moduls festgelegt. Diese muss mit der Bitrate aller anderen Knoten am Bus übereinstimmen. Weiters gibt es zwei globale Masken Register, die es erlauben ankommende Nachrichten zu filtern.
Hochschule München Fakultät Elektrotechnik und Informationstechnik Technische Informatik P - ES - A2/1 - 00 – Kr - 00
ES_pv2.doc / 15.02.15 - 1 - C164CI – Praktikum
Einführung zum Embedded Systems II. Softwareentwicklung - Hinweise zur Software-Erstellung mittels μVision und Dave: 1) Im Verzeichnis C164PRJ sind alle Ihre Praktikumsversuche zu realisieren. Legen Sie für
jeden neuen Versuch ein (oder mehrere) neue Projekte in eigenen Unterverzeichnissen an!
2) Dave ist ein Sourcecode-Generator, er erzeugt also Programmquellcode basierend auf
Tabelleneingaben, die Sie tätigen. Die generierten Quelltexte trennen eindeutig zwischen dem automatisch erzeugten Code und dem für die Applikation vom Benutzer einzuge-benden Code. Bitte halten Sie sich stets an die durch Dave vorgegebenen Schablonen im Quellcode!
3) μVision ist eine integrierte Entwicklungsumgebung, ähnlich wie sie aus Programmieren
1 und 2 hinlänglich bekannt ist. Für das spezielle Entwicklungsziel – Erzeugen des ab-lauffähigen Programmes für einen Mikrocontroller – sind geeignete Erweiterungen vor-handen.
4) Vorgehensweise beim Erstellen eines komplett neuen Projektes:
a) Erzeugen des Arbeitsverzeichnis als Unterverzeichnis von C164PRJ (Explorer!). b) Starten von Dave und Erzeugen der Standardeinstellungen (HW-Vorgaben für das
C164-Board – siehe Anhang 1). Abschließend ist der Code zu erzeugen: File /Generate Code.
c) Starten von μVision und festlegen des Projektes (C164CI): Project/Open Project... Angabe des von Dave erzeugten Datei namens xxxx.dpt. Da-raus erstellt μVision sein neues Projekt, das bereits die nötigen Dave-Dateien über-nimmt.
d) Festlegung der Schaltungseigenschaften: Project/Options for Target 'Target 1' : Einstellungen siehe Anhang 1
e) Applikation in den Dave-Quelldateien oder in eigenen Dateien in das Projekt einbrin-gen.
5) Erstellen eines Folgeprojektes – von Dave erzeugte und von Ihnen ergänzte Quelldatei-
en sollen weiter genutzt werden: a) Erzeugen des Arbeitsverzeichnis als Unterverzeichnis von C164PRJ (Explorer!). b) Kopieren aller von Dave erzeugten C-Dateien (*.c) und Header-Dateien (*.h), sowie
der Dave-Projektdatei (*.dav – u.U. umbenennen). c) Kopieren aller eigenen weiterhin benötigten C-Dateien (*.c) und Header-Dateien
(*.h). d) Modifizieren der Dave-Einstellungen und Code erzeugen. e) Fortsetzung wie unter 4c).
Hochschule München Fakultät Elektrotechnik und Informationstechnik Technische Informatik P - ES - A2/2 - 00 – Kr - 00
ES_pv2.doc / 15.02.15 - 2 - C164CI – Praktikum
Anhang 1
Vision Options for Target Fenster
Target
Output Bei FLASH Fill Byte nichts eintragen, sonst dauert der Download sehr lang.(Alle nicht benutzten Speicherstel-len werden mit dem Fill Byte belegt.)
Hochschule München Fakultät Elektrotechnik und Informationstechnik Technische Informatik P - ES - A2/3 - 00 – Kr - 00
ES_pv2.doc / 15.02.15 - 3 - C164CI – Praktikum
C166 Compiler
Dave - Project Settings
04EI
Version 1.0 Seite 1Praktikum
Einführung zum Praktikum Embedded Systems
Praktikumsarbeitsplatz basierend auf Phytec kitCon-164:
Display mit 4 Zeilen zu
je 20 Zeichen
LOAD / RUN
Schalter
Temperatur-
Sensor
4 Eingabe-
Tasten
DC-Motor
Gabel-
Lichtschranke
Waage mit 3
druckempfindlichen
Widerständen
Reset-Taste
CAN-
Schnittstelle
LED's
04EI
Version 1.0 Seite 2Praktikum
Blockschaltbild:
I/O-Ports
A-BUS
D-BUS
Micro-
Controller
C164
Flash-
EPROM256kByte
RAM64kByte
Adreß
Latch
Waage
mit Druck-
Sensoren
DC-Motor
Licht-
schranke
Tasten
LED's
Temperatur
Sensor
RS232
Treiber
CAN-
TransceiverRTC
5MHz
Einführung zum Praktikum Embedded Systems
04EI
Version 1.0 Seite 3Praktikum
Verwendung der Ports des C164
Funktion Pin Port Einstellungen Bemerkungen
Eingabetasten 65 P1H.4 Special Threshold möglich Taste 1(ganz links)
66 P1H.5 Low aktiv (Taste gedrückt) Taste 2
67 P1H.6 Taste 3
68 P1H.7 Taste 4 (ganz rechts)
LEDs 51 P1L.4 Low aktiv (LED leuchtet) D11
52 P1L.5 D12
57 P1L.6 D13
58 P1L.7 D14
Waage 76 P5.1
A/D-In 0
z.B. Auto scan continuous
conversion, converter clock
0.8µs, sample time 6.4µs
Die Werte von drei
druckkempfindlichen
Widerständen werden
aufsummiert
77 P5.2
A/D-In 1
78 P5.3
A/D-In 2
Temperaturmessung 74 P8.2 z.B. Capture bei pos. Flanke an
CC18 (P8.2)
Timer 7 mit 0.4µs Auflösung
Temp.Sensor hat ca.
200µs Periode,
Temperatur wird aus
Tastverhältnis berechnet
75 P8.3 z.B. Capture bei neg.. Flanke,
CC19 (P8.3), u.U. Interrupt
Timer 7 mit 0.4µs Auflösung
PWM Out
Motorsteuerung
47 P1L.0 z.B. Timer 12 periode register
(T12P) = C34FH (=5ms), Startwert CC60 =61A8H(50%
Tastverhältnis)
Es ergibt sich ein
Einstellbereich von 0 bis T12P für CC60
Messung der
Drehzahl
73 P8.1 z.B. Interrupt bei pos. Flanke,
CC17 übernimmt Wert von Timer 8, 51.2µs Auflösung
VSoll=400D=190H,
51.2µs*400=10480µs =10.48ms, 30 Schlitze
=>30
Impulse/Umdrehung
Einführung zum Praktikum Embedded Systems
04EI
Version 1.0 Seite 4Praktikum
Der Adressraum des Praktikumsystems:
0F:A000-0F:FFFF unbenutzt
0F:9FFF unbenutzt ....
09:0000 08:FFFF RAM 08:0000 07:FFFF unbenutzt
.... 04:0000 03:FFFF Flash
.... 00:0000
Einführung zum Praktikum Embedded Systems
04EI
Version 1.0 Seite 5Praktikum
II. Softwareentwicklung - Hinweise zur Software-Erstellung mittels �Vision und Dave:
Dave
�Vision
1)Im Verzeichnis C164PRJ sind alle Ihre Praktikumsversuche zu realisieren. Legen Sie für
jeden neuen Versuch ein (oder mehrere) neue Projekte in eigenen Unterverzeichnissen
an!
2)Dave ist ein Sourcecode-Generator, er erzeugt also Programmquellcode basierend auf
Tabelleneingaben, die Sie tätigen. Die generierten Quelltexte trennen eindeutig zwischen
dem automatisch erzeugten Code und dem für die Applikation vom Benutzer
einzugebenden Code. Bitte halten Sie sich stets an die durch Dave vorgegebenen
Schablonen im Quellcode!
3)�Vision ist eine integrierte Entwicklungsumgebung, ähnlich wie sie aus Programmieren 1
und 2 hinlänglich bekannt ist. Für das spezielle Entwicklungsziel – Erzeugen des
ablauffähigen Programmes für einen Mikrocontroller – sind geeignete Erweiterungen
vorhanden.
�������
��������
Einführung zum Praktikum Embedded Systems
04EI
Version 1.0 Seite 6Praktikum
4)Vorgehensweise beim Erstellen eines komplett neuen Projektes:
a)Erzeugen des Arbeitsverzeichnis als Unterverzeichnis von C164PRJ (Explorer!).
b)Starten von Dave und Erzeugen der Standardeinstellungen (HW-Vorgaben für das
C164-Board – siehe Anhang 1). Abschließend ist der Code zu erzeugen:
File /Generate Code.
c) Starten von �Vision und Festlegen des Projektes (C164CI):
Project/Open Project... Angabe der von Dave erzeugten Datei namens xxxx.dpt.
Daraus erstellt �Vision sein neues Projekt, das bereits die nötigen Dave-Dateien
übernimmt.
d)Festlegung der Schaltungseigenschaften:
Project/Options for Target 'Target 1': Einstellungen siehe Anhang 1
e)Applikation in den Dave-Quelldateien oder in eigenen Dateien in das Projekt
einbringen.
II. Softwareentwicklung - Hinweise zur Software-Erstellung mittels �Vision und Dave:
5)Erstellen eines Folgeprojektes – von Dave erzeugte und von Ihnen ergänzte Quelldateien sollen weiter genutzt werden:
a)Erzeugen des Arbeitsverzeichnis als Unterverzeichnis von C164PRJ (Explorer!).
b)Kopieren aller von Dave erzeugten C-Dateien (*.c) und Header-Dateien (*.h), sowie
der Dave-Projektdatei (*.dav – u.U. umbenennen).
c) Kopieren aller eigenen weiterhin benötigten C-Dateien (*.c) und Header-Dateien (*.h).
d)Modifizieren der Dave-Einstellungen und Code erzeugen.e)Fortsetzung wie unter 4c). Übung
Einführung zum Praktikum Embedded Systems
04EI
Arbeiten mit RTX166_TINY
Version 1.0 Seite 7Praktikum
Schritte zur Anwendung von RTX
1. Festlegen des zu verwendenden Timers.
Einer der Timer 2,3,4,7,8 muss für RTX zur Verfügung stehen. Diese Festlegung ist in der Datei
"CPUTIMER.INC " im Unterverzeichnis "Rtx_Tiny" der Entwicklungsumgebung zu tätigen. Der
Defaultwert ist T0 (dieser existiert in C164CI nicht!).
Wird "CPUTIMER.INC " modifiziert, so sind die Libraries von RTX neu zu erzeugen. Dazu ist das
Projekt "Rtx_Tiny.uv2" (Unterverzeichnis "C166\Rtx_Tiny") neu zu kompilieren und die dadurch
generierte Datei "RTX166TS.LIB" in das Unterverzeichnis "C166\lib" der Entwicklungsumgebung zu
kopieren. Vor der Compellierung ist sicher zu stellen, dass unter ‚Select device‘ Small, Compact,
HCompact eingestellt ist.
2. RTX-Eigenschaften festlegen.
Timer-Tick ist die Zeiteinheit des RTX, mit der Wartezeiten und Taskwechsel im Round Robin Verfahren
festgelegt werden. Die Variable "INT_CLOCK" ist mit 2500 voreingestellt und legt ein Intervall von
1msec fest (fCPU / 8 / 2500).
–Die Zeitscheibe für das Round-Robin-Verfahren wird durch die Variable "TIMESHARING" fixiert und
gibt die Anzahl der Timer-Ticks an, nach denen ein Taskwechsel erfolgt (ist mit 5msec voreingestellt).
Diese Variable ist mit dem Wert 0 zu belegen, wenn kooperatives Scheduling durchgeführt werden soll.
–
–Die geeignete Einstellung der Variablen erfolgt in der Datei "CONF_TNY.A66", die als Kopie aus dem
Unterverzeichnis "C166\Rtx_Tiny" in den eigenen Projektordner zu übernehmen ist. Diese Datei muss
zusätzlich in das Projekt eingefügt werden.
–
04EI
Arbeiten mit RTX166_Tiny
Version 1.0 Seite 8Praktikum
3.Projekteinstellungen
Um ein RTX-Projekt zu realisieren, ist unter µVision 4 in "Options for Target" als
Operating System "RTX-166 Tiny" zu wählen.
4. Quellcode
Nach Ausführen des Startup-Codes startet RTX automatisch die Task mit der Nummer 0.
Diese muss also existieren!
Eine Funktion "main()" darf im Projekt nicht enthalten sein, "main()" ist Teil von RTX.
–
5. RTX und DAVE
DAVE generiert stets die Funktion "main()". Um ein RTX-Projekt zu erstellen ist deshalb
folgende Vorgehensweise zweckmäßig:
-die Einstellung aller Peripheriefunktionen erfolgt wie gehabt.
Ausnahme ist der RTX-Timer, dessen Initialisierung durch DAVE ist auszukommentieren.
- das durch DAVE erstellte main() ist auszukommentieren und (innerhalb der USER-
Klammern) durch Task 0 zu ersetzen.
- Wird DAVE erneut aufgerufen, so sind zuvor obige Maßnahmen zurückzunehmen!
top related