04EI C164CI Blockschaltbild C166-Core Data (C164 CI-8RM) CPU Instr./Data or OTP 32 Data 16 Dual Port 16 64 K ROM RAM 2 KByte (C164CI-8EM) Watchdog 0.5; 1; 1.5; 2; 2.5; 3; 4; 5 PEC 16 Port 0 P4.6/ CAN TxD Interrupt Controller RTC 13 ext. IR 16 Interrupt Bus Peripheral Data 16 External Bus 8/16 bit MUX only & XBUS Control Port 4 10-Bit USART Sync. GPT1 CAPCOM 2 CAPCOM6 Unit for PWM Generation Channel ADC T2 (SPI) 8-Channels 8-Channel ASC SSC T3 BRG BRG T4 Port 3 Port 5 Timer 13 Full-CAN Interface V2.0B active Timer 8 P4.5/ CAN RxD XBUS (16-bit NON MUX Data / Addresses) External Instr./Data Timer 7 XTAL PLL-Oscillator prog. Multiplier: 1 Comp. Channel Port 8 3/6 CAPCOM Channels Port 1 164 CL 6 8 Embedded Systems 9 25.9.2009 4 16 Seite 1 04EI CPU - Blockschaltbild STK UV CPU STK OV Exec. Unit MDH SP Instr. Ptr. MDL STK OV Instr. Reg. 32 4-Stage Pipeline On-Chip (EP)ROM PSW SYSCON Mul./Div.-HW 16 STK UV On-Chip Static RAM Bit-Mask Gen. ALU R15 R15 16-bit Barrel-Shifter General BUSCON 0 BUSCON 1 ADDRSEL 1 BUSCON 2 ADDRSEL 2 BUSCON 3 ADDRSEL 3 BUSCON 4 ADDRSEL 4 Data Page Pointer Context Ptr. Purpose Registers 16 R0 R0 Code Seg.Ptr SFR Embedded Systems 25.9.2009 Seite 2 04EI Vierstufige Befehls-Pipeline Fetch Decode 1. Instr. 2. Instr. 3. Instr. 4. Instr. Execute Time Write Back 1 Machine Cycle = 100 ns at 20 MHz CPU clock 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 Embedded Systems 25.9.2009 Seite 3 04EI Arithmetic Logic Unit A B Logic Operations: Cout Cin ALU flags op Z Shift / Rotate: Arithmetic Operations: add sub inc dec neg Embedded Systems and nand or nor exor exnor not sll sla rol srl sra ror s/ro : shift/rotate l/r : left/right l/a : logic (unsigned)/arithmetic (signed) 25.9.2009 Seite 4 04EI Barrel Shifter D0 D1 D2 D3 D15 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 S0 Embedded Systems S1 25.9.2009 Q0 Q1 Q2 Q3 Q15 S14 Seite 5 04EI General Purpose Register (GPR) 16 GPRs bilden eine Registerbank bestehend 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. Embedded Systems 25.9.2009 Seite 6 04EI 2 kByte internes RAM - Plazierung der Registerbänke und des Stack RH7 RH6 RH5 RH4 RH3 RH2 RH1 RH0 Stackpointer Underflow Stackpointer Stackpointer Overflow RL7 RL6 RL5 RL4 RL3 RL2 RL1 RL0 R15 R14 R13 R12 R11 R10 R9 R8 R7 R6 R5 R4 R3 R2 R1 R0 2KBytes internal RAM 0FDFE R15 R0 Context pointer 0FC00 STKUV STKUV SP STKOV 0F600 STKOV Embedded Systems 25.9.2009 Seite 7 04EI Adressraum Gesamter Adressraum: – 64 kByte nicht-segmentierter Adressraum – bis zu 4(16) 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 BUSKontrollsignale helfen externe Logik zu vermeiden. Embedded Systems 25.9.2009 Seite 8 04EI Interner und externer Adressplan des C164CI Segment 0 beinhaltet den internen Speicher 7 0.5k 0 512 Bytes SFR’s Internes RAM 2k Internes RAM Reserviert 0.5k 512 Bytes ESFR’s Full -CAN Reserviert 0x010000 Code Segmente Daten Pages 0x040000 0x00FE00 15 14 0x00FA00 3 0x030000 0x00F600 0x00F200 13 12 11 2 10 9 0x00F000 0x020000 8 7 0x00E800 1 Bit-adressierbarer Bereich X-Bus Peripheral Bis zu 4 MBytes 6 5 Externer Speicher 0x010000 4 Internal ROM/ FLAS H 2*32k 3 0x008000 32k Internes ROM / Flash E²PROM (kann auf Segm. 1 liegen) Embedded Systems 0 2 1 0x000000 25.9.2009 0x000000 0 Seite 9 04EI 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 bdata als Speichertyp vereinbart werden. Embedded Systems 25.9.2009 Seite 10 04EI 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 Registermaske, 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, xhuge Datentypen: bit, sfr, sbit Funktionen: interrupt, _task_, using Embedded Systems 25.9.2009 Seite 11 04EI Die Programmiersprache C für den Mikrocontroller C164 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. Embedded Systems 25.9.2009 Seite 12 04EI Die Programmiersprache C für den Mikrocontroller C164 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 Speichermodell Variable Funktionen Segmentierung Codeumfang TINY SMALL COMPACT HCOMPACT MEDIUM LARGE HLARGE near near far huge near far huge near near near near far far far nein ja ja ja ja ja ja 64k 64k 64k 64k unbegrenzt unbegrenzt unbegrenzt Embedded Systems 25.9.2009 Seite 13 04EI Die Programmiersprache C für den Mikrocontroller C164 Datentypen: Speicherumfang und Wertebereich Datentyp Speicherumfang Wertebereich bit # signed char unsigned char signed int unsigned int signed long unsigned long float double pointer 1 Bit 1 Byte 1 Byte 2 Bytes 2 Bytes 4 Bytes 4 Bytes 4 Bytes 8 Bytes 2/4 Bytes 0 oder 1 -128 bis +127 0 bis 255 -32768 to + 32767 0 bis 65535 -2147483648 bis +2147483642 0 bis 4294967295 1.176E-38 bis 3.40E+38 1.7E-308 bis 1.7E+308 Adresse des Objects Datentypen für den Zugriff auf Special Function Registers (SFR) sbit # sfr # 1 Bit 2 Bytes 0 or 1 0 to 65535 # spezielle Datentypen in C166, die in ANSI-C nicht definiert sind. Embedded Systems 25.9.2009 Seite 14 04EI Integrierte Entwicklungsumgebung – µVision2 Editor / Project Management MacroAssembler ANSI C Compiler CLibrary RTX Tiny Library Real Time Operating System Manager Linker / Locater – Debugger – Simulator Emulator & PROM Programmer CPU & Peripheral Simulator Embedded Systems Monitor Target Debugging 25.9.2009 Ab ins Praktikum Seite 15 04EI Code-Adressierung mittels Segmentierung im 4 MByte Adressraum Code Segment Pointer (CSP) zur Code-Adressierung 15 14 13 8 7 6 0 5 Code Seg. Pointer 15 14 13 8 7 0 16-Bit Instr. Pointer 6-Bit Segmentnummer 16-Bit 22-Bit physikalische Code-Adresse (C164) 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. Embedded Systems 25.9.2009 Seite 16 04EI Adressierung von Daten mittels Seitenauswahl (Paging) innerhalb des 4 MByte Adressraumes Daten-Adressierung über Data Page Pointer (DPP) 15 14 13 16-bit Adresse 0 Auswahl eines Data Page Pointer DPP3 DPP2 DPP1 DPP0 10-bit 14-bit Seitennummer Physikalische 24-Bit Daten-Adresse (bis zu 22 aussen verfügbar beim C164) SFR Embedded Systems 25.9.2009 Seite 17 04EI External Bus Controller Ermöglicht variables Timing von CPU-Steuersignalen mittels Software Realisiert bis zu 4 Chip-Select-Signale Auswahl von 4 Adressbereichen möglich Special Function Register BUSCON0..4 Programmierbare Zeiten. Festlegung von CS# - Signalen. Auswahl der Breite des Daten-BUS 8 / 16 Bit. Special Function Register ADDRSEL1..4 Programmierbare Ausschnitte aus dem Adressraum für den Zugriff auf externe Komponenten mit den Eigenschaften der zugeordneten BUSCONx- Register. Embedded Systems 25.9.2009 Seite 18 04EI Gemultiplexter Adress- und Daten-BUS Verlängern des AdressSetups Speicherzugriffszeit A16..A21 Tri-State - Zeit Address ALE CS# A0..A15 D0..D15 (7) Address Data RD# RD-Delay A0..15 D0..15 (7) Address Data WR# WR-Delay Embedded Systems 25.9.2009 SFR Seite 19 04EI Integrierte Chip Select - Signale CS0# CS1# CS2# CS3# P6.0 P6.1 P6.2 P6.3 BUSCON0 BUSCON1 BUSCON2 BUSCON3 Aktiv für jenen Adressraum der nicht durch CS1#..CS3# abgedeckt wird. ADDRSEL1 ADDRSEL2 ADDRSEL3 Die Basisadresse ist stets ein Vielfaches des Adressbereiches. (d.h. der Chip Select mit einem Adressbereich von 128kByte beginnt an einer 128kByte Grenze) C164 A21 A20 A19 C B A CS3# CS2# CS1# G CS11 CS10 CS9 CS8 CS7 CS6 CS5 CS4 0xB80000 0xB00000 0xA80000 0xA00000 0x980000 0x900000 0x880000 0x800000 74ACT138 C164 P3.9 P3.8 P3.6 C B A CS3# CS2# CS1# G CS11 CS10 CS9 CS8 CS7 CS6 CS5 CS4 0xF00000 0xE00000 0xD00000 0xC00000 0xB00000 0xA00000 0x900000 0x800000 74ACT138 Extra Memory-Mapped Chip-Selects Extra IO-Mapped Chip-Selects Alle mit gleichem Bus-Mode, Waitstates, usw. Embedded Systems 25.9.2009 Seite 20 04EI Anschluß von externen Speicherbausteinen mit 8 Bit- Organisation RAM RAM WE# OE# CE# D0-7 A0-16 C164 [20 MHz] MT5LC128K8D4 WE# OE# CE# D0-7 A0-16 MT5LC128K8D4 MT5LC128K8D4 Fa. Micron SRAM 128k x 8 Zugriffszeit 25 ns ADDRSEL1 = 0x0406 BUSCON1 = 0x04CF WRL# WRH# RD# D0-15 A16-19 EN OE# CS# D0-7 A0-18 ALE A1-15 15-Bit D-Latch Embedded Systems OE# CS# D0-7 A0-18 CS1# CS0# ROM ROM AM27C040 Fa. AMD Eprom 512k x 8 Zugriffszeit 120 ns BUSCON0 = 0x04CE AM27C040 AM27C040 25.9.2009 Seite 21 04EI Anschluß von externen Speicherbausteinen mit 16 Bit- Organisation IDT71016 WE# BLE# BHE# OE# CE# D0-15 A0-15 RAM C164 [20 MHz] WR# IDT71016 Fa. IDT (Integrated Device Technology) SRAM 64k x 16 Zugriffszeit 20 ns ADDRSEL1 = 0x0405 BUSCON1 = 0x04CF BHE# RD# D0-15 A16-17 OE# CS# D0-15 A0-16 EN CS1# CS0# ALE A0 A1-15 ROM 16-Bit D-Latch Embedded Systems M27C202 Fa. ST Microelectronics ST Eprom 128k x 16 Zugriffszeit 100 ns BUSCON0 = 0x04CE M27C202 25.9.2009 Seite 22 04EI Sich überdeckende Adressbereiche Inaktiver Bereich Höchste Priorität Aktiver Bereich XBCON0 Überlappen nicht zulässig BUSCON4 BUSCON2 BUSCON1 BUSCON3 BUSCON0 0xFFFFFF 0x000000 Embedded Systems 25.9.2009 Seite 23 04EI Interrupt System Interrupt Controller – Kurze Interrupt-Reaktionszeiten: Min. 250ns, typisch 400ns (@20 MHz) – Geringer Overhead für ISR’s – Leistungsfähige Priorisierung in 15 Prioritätsstufen, zu je 4 Gruppen – Hardware Traps detektieren Laufzeitfehler – Software Traps Peripheral Events Controller (PEC) – Entlastet die CPU von einfachen und häufig auftretenden ISR’s – Interruptgesteuerter “DMA-ähnlicher” Datentransfer ohne CPUEingriff – Reaktionszeiten: Min. 150ns, typisch 300ns mit einer CPU-Belastung von 100ns (@20 MHz) Embedded Systems 25.9.2009 Seite 24 04EI Interrupts und PEC - Priorisierung PEC 7 PEC 6 group 3 group 2 PEC 5 group 1 Level 15 PEC 4 Group group 0 3 2 1 0 PEC 3 PEC 2 group 2 Level 14 group 3 group 2 Level 1-13 group 3 (Level 0) Embedded Systems group 2 PEC 1 group 0 group 1 group 0 group 1 PEC 0 group 1 Level group 3 group 0 25.9.2009 15 64 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1 Seite 25 04EI Interrupt Processing INTR Service: Interrupt Control Register des auslösenden Peripherie-Elementes Retten: PSW, CSP, IP INTR Flag ist gesetzt Periph. Interrupt Prioritäts-Check Periph. Interrupt Vergleich der Interruptpriorität mit der Laufzeit-Priorität der CPU falls höhere Priorität Gruppen Check Neue CPU-Prio. im PSW. CSP und IP aus Peripherie-Vector oder Trap-Nummer Lösche INTR Flag Periph. Interrupt Externer Interrupt* Periph. Interrupt External Interrupt* PEC Service 16 Prioritäts-Stufen 4 Gruppen * Externe Interrupts sind z.B. statt des “Capture” Eingangs möglich 32 Peripherie Interrupts 13 ext. Interrupts (+ NMI) einschließlich 4 “schnelle” Interrupts Vektoren Embedded Systems 25.9.2009 SFR Dave Seite 26 04EI Peripheral Events Controller (PEC) Interrupt hat den Prioritäs- und Gruppen-Check erfüllt Interrupt Priorität 14 oder 15 und Data Counter > 0 Interrupt Priorität < 14 Interrupt Service PEC Service Memory Segment 0 0xFFFF Peripheral Events Contoller Contr. Reg. INTR Service: 8 PEC Kanäle Retten: PSW, CSP, IP Neue CPU-Prio. im PSW. CSP und IP aus Peripherie-Vector oder Trap-Nummer Prioritäts- & GruppenCheck Data Counter Byte bzw. Word Transfer SRC Pointer DEST Pointer 0x0000 Interrupt falls Data Counter = 0 SFR Embedded Systems 25.9.2009 Seite 27