O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

ARM Cortex-M3 Mikrocontroller

Book Description

  • Aufbau eines Entwicklungssystems mit Eclipse und der GNU Toolchain
  • Fehlersuche mit dem GNU-Debugger und weiteren Hilfsmitteln
  • Korrekte Dimensionierung elektronischer Komponenten
  • Typische Programmiertechniken

Dieses Buch behandelt den Einsatz und die Programmierung von ARM Cortex-M3-Mikrocontrollern. Am Beispiel des AT91SAM3S4B von ATMEL lernen Sie alle wichtigen Aspekte im Umgang mit modernen Mikrocontrollern kennen. Viele praktische Anwendungen und zahlreiche Tabellen erleichtern das Verständnis. Der praxisnahe Einsatz von Datenblättern hilft zudem beim Einsatz anderer Mikrocontroller und Bauelemente.
Zunächst erstellt der Autor ein kostenloses Entwicklungssystem auf der Basis von Eclipse, dem CDT und der GNU Toolchain. Alternativen dazu werden ebenfalls vorgestellt.
Im weiteren Verlauf werden sämtliche internen Komponenten der AT91SAM3S-Familie erläutert. Die Entwicklung wiederverwendbarer Software unter Einsatz gängiger Bauelemente zeigt Lösungen für Anforderungen der täglichen Praxis. Die Beispiele in diesem Buch befassen sich mit der Ansteuerung von Displays, der Erfassung analoger Größen (z.B. Temperaturen), der Digital-/Analog-Umsetzung und der seriellen Datenübertragung unter Einsatz von SD-Karten. Die korrekte Dimensionierung externer Komponenten wird anhand einfacher Berechnungen erläutert und geübt.
Dieses Buch wendet sich an Ingenieure, Studenten technischer Fachrichtungen und Hobby-Elektroniker, die sich erstmals mit der Programmierung von Mikrocontrollern befassen. Es werden dabei durchschnittliche Kenntnisse der Programmiersprache C vorausgesetzt.

    Aus dem Inhalt:
  • Digitale Aus- und Eingänge (PIO, Parallel Input/Output Controller)
  • LC-Displays und 7-Segment-Anzeigen
  • Wichtige Systemkomponenten (NVIC, PMC, Supply Controller, etc.)
  • Timer, Counter, Real Time Clock
  • Peripheral DMA Controller (PDC)
  • PWM – Pulsweitenmodulation
  • Analog-/Digital-Wandlung und Digital-/Analog-Umsetzung
  • Serielle Kommunikation (z.B. mit SD-Karten)

Table of Contents

  1. Impressum
  2. Einleitung
  3. Teil I: Grundlagen
  4. Kapitel 1: Orientierung
    1. 1.1 Kommerzielle IDEs
      1. 1.1.1 Keil µVision
      2. 1.1.2 IAR Workbench
      3. 1.1.3 Sourcery Codebench
      4. 1.1.4 Atollic TrueSTUDIO
      5. 1.1.5 CrossWorks for ARM
    2. 1.2 Herstellergebundene IDEs
      1. 1.2.1 ATMEL Studio 6
      2. 1.2.2 Texas Instruments StellarisWare
      3. 1.2.3 STMicroelectronics STVD
    3. 1.3 Freie IDEs
      1. 1.3.1 CooCox CoIDE
      2. 1.3.2 NetBeans for C Developers
      3. 1.3.3 Code::Blocks
      4. 1.3.4 emIDE
      5. 1.3.5 Eclipse für C/C++-Entwickler
    4. 1.4 Vorbereitende Arbeiten
      1. 1.4.1 Hardware
      2. 1.4.2 Software
  5. Kapitel 2: ARM und CMSIS
    1. 2.1 Einige Hintergrundinformationen
      1. 2.1.1 Die Firma ARM Holdings PLC
      2. 2.1.2 Das Geschäftsmodell
    2. 2.2 CMSIS
      1. 2.2.1 Implementierungen
    3. 2.3 Erzeugung der Bibliotheken
      1. 2.3.1 libboard: Die Bibliothek für das Entwicklungsboard
      2. 2.3.2 libchip: Die Bibliothek für den Mikrocontroller-Chip
    4. 2.4 Weitere Software installieren
      1. 2.4.1 SAM-BA
      2. 2.4.2 SEGGER J-Link GDB Server via JTAG
  6. Kapitel 3: Das erste Eclipse-Projekt
    1. 3.1 Erstellen einer Projektschablone
      1. 3.1.1 Workspace einrichten
      2. 3.1.2 Anlegen eines neuen Projekts
      3. 3.1.3 Projektspezifische Einstellungen
      4. 3.1.4 C/C++ Build: Settings
    2. 3.2 Weitere erforderliche Dateien
      1. 3.2.1 board_cstartup_gnu.c und syscalls.c
      2. 3.2.2 Linkerscriptdateien
    3. 3.3 Konfiguration des Debuggers
    4. 3.4 Fertigstellen des Templates
      1. 3.4.1 Anwendung der Erweiterung
  7. Kapitel 4: Hello World!
    1. 4.1 Grundlegende Hinweise
    2. 4.2 Erstellen des Projekts 04_01_Blinky
      1. 4.2.1 Importieren der Schablone
      2. 4.2.2 Der Sourcecode von Blinky
    3. 4.3 Blinky im Debugger ausführen
    4. 4.4 Debugging light
      1. 4.4.1 Was Sie benötigen
      2. 4.4.2 Konfiguration der Schnittstelle
      3. 4.4.3 Programm laden und ausführen
      4. 4.4.4 Vorteile und Nachteile dieser Methode
  8. Teil II: Einfache Grundlagen der Elektronik
  9. Kapitel 5: Der ATMEL SAM3S4B
    1. 5.1 Die ATMEL-SAM3S-Familie
      1. 5.1.1 Übersicht
    2. 5.2 Das Datenblatt DOC 6500
      1. 5.2.1 Der Aufbau von DOC 6500
      2. 5.2.2 Mikrocontroller anderer Hersteller
    3. 5.3 Elektrische ​Daten des ​SAM3S4
      1. 5.3.1 Minimum- und Maximumwerte
      2. 5.3.2 Elektrische Versorgungsspannungen
      3. 5.3.3 Gleichstromwerte
    4. 5.4 System Controller
    5. 5.5 CHIP_ID
      1. 5.5.1 Das Projekt 05_01_CHIPID
      2. 5.5.2 Erläuterungen
    6. 5.6 Weiterführende Literatur
  10. Kapitel 6: Elektronik
    1. 6.1 Digitale Ausgänge
      1. 6.1.1 Ports A, B und C im Reset-Zustan​d
    2. 6.2 Schalten kleiner Ströme
      1. 6.2.1 Current Sourcing
      2. 6.2.2 Current Sinking
      3. 6.2.3 Dimensionierung bei Current Sourcing und Current Sinking
      4. 6.2.4 Vor- und Nachteile beider Betriebsarten
    3. 6.3 Schalten größerer Ströme
      1. 6.3.1 Bipolare Transistoren
      2. 6.3.2 Feldeffekt-Transistoren (FETs)
      3. 6.3.3 Schalten mit Optokopplern
      4. 6.3.4 Schalten von Leistungstransistoren
      5. 6.3.5 Schalten induktiver Lasten (Relais, Elektromagnete, Motoren)
    4. 6.4 Digitale Eingänge
      1. 6.4.1 Grundlegende Betrachtungen
      2. 6.4.2 Einfachste Form der Beschaltung
      3. 6.4.3 Bessere Form der Beschaltung
      4. 6.4.4 Erfassen größerer Spannungen I
      5. 6.4.5 Erfassen größerer Spannungen II
    5. 6.5 Allgemeine Anmerkungen
  11. Kapitel 7: Anwendungen
    1. 7.1 LC-Displays
      1. 7.1.1 Die Hardware
      2. 7.1.2 Projekt 07_01_LCD
    2. 7.2 7-Segment-Anzeigen
      1. 7.2.1 Kein Datenblatt verfügbar?
      2. 7.2.2 Eine Möglichkeit der Ansteuerung
  12. Teil III: Basiskomponenten
  13. Kapitel 8: NVIC, PMC, Clock Generator und SUPC
    1. 8.1 Allgemeines zu Interrupts
      1. 8.1.1 Asynchrone Ereignisse
      2. 8.1.2 Der NVIC – Nested Vector Interrupt Controller
      3. 8.1.3 Zuordnung der Interrupt-Quellen
      4. 8.1.4 Tail Chaining
      5. 8.1.5 CMSIS-Funktionen für den NVIC
      6. 8.1.6 (Kein) Beispiel
      7. 8.1.7 Software-Interrupts
      8. 8.1.8 Tipps und Empfehlungen
    2. 8.2 Der Clock Generator / Taktgenerator
      1. 8.2.1 Funktionen des Clock Generators
    3. 8.3 Der PMC – Power Management Controller
      1. 8.3.1 Aufgaben des PMC
      2. 8.3.2 Die Taktsignale des PMC
      3. 8.3.3 Weitere Informationen zum PMC
      4. 8.3.4 Ausgewählte Register des PMC
    4. 8.4 Der SUPC – Supply Controller
  14. Kapitel 9: Parallel Input/Output Controller
    1. 9.1 Port-Register und -Betriebsarten
      1. 9.1.1 PIOA, PIOB und PIOC
      2. 9.1.2 Die Register von PIOA, PIOB und PIOC
    2. 9.2 Input-Ports in der Praxis
      1. 9.2.1 Das Projekt 09_01_INPUT_SAMPLE
      2. 9.2.2 Das Ergebnis
  15. Kapitel 10: Timer und Counter, Teil 1
    1. 10.1 Real-time Timer RTT
      1. 10.1.1 Projekt 10_01_RTT
      2. 10.1.2 Die Register des RTT
    2. 10.2 RTC – Die Echtzeituhr
      1. 10.2.1 Das Projekt 10_02_RTC
      2. 10.2.2 Projekt 10_02_RTC_Advanced
      3. 10.2.3 Die Register der RTC
    3. 10.3 Der Watchdog-Timer WDT
      1. 10.3.1 Projekt 10_03_WDT
      2. 10.3.2 Register des WDT
    4. 10.4 Der System-Timer SysTick
      1. 10.4.1 Grundlegende Funktion
      2. 10.4.2 Anwendung von SysTick
      3. 10.4.3 Konfiguration des SysTick
      4. 10.4.4 Register des System-Timers SysTick
      5. 10.4.5 SysTick-Interrupt
    5. 10.5 Abschlussbetrachtung
  16. Kapitel 11: Timer und Counter, Teil 2
    1. 11.1 Timer/Counter, Grundlagen
      1. 11.1.1 Einsatzgebiete von Timern und Countern
      2. 11.1.2 Grundlegende Betrachtungen
      3. 11.1.3 Triggern der Counter
    2. 11.2 Timer/Counter programmieren
      1. 11.2.1 PIO-Controller konfigurieren
      2. 11.2.2 PMC konfigurieren
      3. 11.2.3 NVIC konfigurieren
    3. 11.3 Die Register der Timer/Counter
      1. 11.3.1 TC- und TC-Channel-Register
    4. 11.4 Projekt 11_01_TIMER_COUNTER
      1. 11.4.1 global.h
      2. 11.4.2 tcWave.h und tcWave.c
      3. 11.4.3 tcCapture.h und tcCapture.c
      4. 11.4.4 main.c
  17. Teil IV: Weiterführende Komponenten
  18. Kapitel 12: Peripheral DMA Controller (PDC)
    1. 12.1 Prinzipieller Aufbau
      1. 12.1.1 Voll-Duplex-fähige Peripherie
      2. 12.1.2 Halb-Duplex-fähige Peripherie
      3. 12.1.3 Monodirektionale Peripherie
      4. 12.1.4 Voll-Duplex- und Halb-Duplex-Kanäle
      5. 12.1.5 Monodirektionale Kanäle
    2. 12.2 PDC-Register
      1. 12.2.1 Receive Pointer Register (PERIPH_RPR)
      2. 12.2.2 Receive Counter Register (PERIPH_RCR)
      3. 12.2.3 Transmit Pointer Register (PERIPH_TPR)
      4. 12.2.4 Transmit Counter Register (P_TCR)
      5. 12.2.5 Weitere Receive- und Transmit-Register
      6. 12.2.6 Transfer Control Register (PERIPH_PTCR)
      7. 12.2.7 Transfer Status Register (PERIPH_PTSR)
    3. 12.3 Schlussbetrachtung
  19. Kapitel 13: PWM – Pulsweitenmodulation
    1. 13.1 Was ist Pulsweitenmodulation?
    2. 13.2 Pulsweitenmodulation – aber wozu?
    3. 13.3 Der PWMC der AT91SAM3S-Familie
      1. 13.3.1 Abhängigkeiten des PWMC
      2. 13.3.2 Die CMSIS-Funktion des PWMC
      3. 13.3.3 Zuordnung der PWM-Anschlüsse
    4. 13.4 Projekt 13_01_PWM
      1. 13.4.1 board_olimex.h
      2. 13.4.2 pulsewidthmod.h
      3. 13.4.3 pulsewidthmod.c
      4. 13.4.4 terminal.c
      5. 13.4.5 main.c
    5. 13.5 Drehzahlregelung eines DC-Motors
      1. 13.5.1 Dimensionierung der Schaltung
      2. 13.5.2 Drehrichtungswechsel
  20. Kapitel 14: Analoge und digitale Größen
    1. 14.1 Vereinfachte Grundlagen
    2. 14.2 DACC – Digital-to-Analog Converter Controller
      1. 14.2.1 DACC-Register
      2. 14.2.2 CMSIS-Funktionen zum DACC
      3. 14.2.3 14_01_DACC_SIGNAL_GENERATOR_WITH_INTERRUPT
      4. 14.2.4 Hilfsprogramm: 14_02_TABLE_GENERATOR
    3. 14.3 ACC – Analog Comparator Controller
      1. 14.3.1 Die Register des ACC
      2. 14.3.2 CMSIS-Funktionen zum ACC
      3. 14.3.3 Projekt 14_03_ACC
    4. 14.4 ADC – Analog-to-Digital Converter
      1. 14.4.1 Eigenschaften des ADC
      2. 14.4.2 Die ADC-Register
      3. 14.4.3 CMSIS-Funktionen des ADC
      4. 14.4.4 Projekt 14_06_ADC_TS_UND_POTI
  21. Teil V: Serielle Kommunikation
  22. Kapitel 15: Serielle Schnittstellen I
    1. 15.1 Hardware
      1. 15.1.1 RS-232 (EIA 232)
      2. 15.1.2 RS-485
      3. 15.1.3 TWI (I2C)
      4. 15.1.4 Serial Peripheral Interface (SPI)
      5. 15.1.5 Synchronous Serial Controller (SSC)
    2. 15.2 Serielle Schnittstellen der AT91SAM3S-Familie
      1. 15.2.1 Grundlegende Begriffe
    3. 15.3 Universal Asynchronous Receiver Transceiver (UART)
      1. 15.3.1 UART-Eigenschaften beim AT91SAM3S
      2. 15.3.2 UARTs auf dem Olimex SAM3-P256
      3. 15.3.3 UART-Register
      4. 15.3.4 RS232_0 und Retargeting
    4. 15.4 Universal Synchronous Asynchronous Receiver Transceiver (USART)
      1. 15.4.1 USART-Eigenschaften beim AT91SAM3S
      2. 15.4.2 USARTs auf dem Olimex SAM3-P256
      3. 15.4.3 USART-Register
    5. 15.5 Two-wire Interface (TWI)
      1. 15.5.1 TWI-Eigenschaften beim AT91SAM3S
      2. 15.5.2 TWI auf dem Olimex SAM3-P256
      3. 15.5.3 TWI-Register
  23. Kapitel 16: Serielle Schnittstellen II
    1. 16.1 SD Card (stark vereinfacht)
      1. 16.1.1 Ausführungsformen und Anschlüsse
      2. 16.1.2 Versorgung und Stromaufnahme
      3. 16.1.3 Speicherkapazitäten und Zugriffsraten
    2. 16.2 SD-Karten im SPI-Modus
      1. 16.2.1 Grundlagen zum SPI
      2. 16.2.2 Initialisierung des SPI
      3. 16.2.3 Lesen und Schreiben von Rohdaten
    3. 16.3 High Speed MultiMedia Card Interface (HSMCI)
      1. 16.3.1 Merkmale des HSMCI
      2. 16.3.2 Informationen zu den Protokollen
      3. 16.3.3 Anschluss eines SD-Kartenslots
      4. 16.3.4 Die HSMCI-Register
      5. 16.3.5 Hinweis zur Nutzung des HSMCI
    4. 16.4 Synchronous Serial Controller (SSC)
      1. 16.4.1 Merkmale des SSC
      2. 16.4.2 Die wichtigsten Register des SSC
  24. Anhang A: Glossar
    1. A.1 Architektur
    2. A.2 ARM
    3. A.3 ARM-Befehlssatz
    4. A.4 Big.LITTLE-Konzept
    5. A.5 BSS
    6. A.6 CMSIS
    7. A.7 Cortex
    8. A.8 Debugging
    9. A.9 Echtzeit-Betriebssysteme
    10. A.10 Embedded Linux
    11. A.11 FIFO
    12. A.12 Firmware
    13. A.13 Heap
    14. A.14 JTAG
    15. A.15 LIFO
    16. A.16 OCD
    17. A.17 SAM-BA
    18. A.18 Stack
    19. A.19 SWD
    20. A.20 TDMI
    21. A.21 Text-Segment
    22. A.22 Thumb-Befehlssatz
  25. Anhang B: Ressourcen
    1. B.1 Hardware
      1. B.1.1 Das Olimex-Board SAM3-P256
      2. B.1.2 In-Circuit-Emulatoren
      3. B.1.3 Andere Elektronik-Komponenten
    2. B.2 Software
  26. Anhang C: Literatur
    1. C.1 Literatur (Buchversion)
    2. C.2 Literatur (Online-Version)
    3. C.3 Weitere allgemeine Quellen
  27. Anhang D: Erfahrungen
    1. D.1 Wechsel der Toolchain
    2. D.2 GNU Tools for ARM Embedded Processors
    3. D.3 Nochmals: Verwendung der Nano-Libs
    4. D.4 Updates von Eclipse und dem CDT
    5. D.5 Andere Probleme mit Eclipse und dem CDT
    6. D.6 Debugger
    7. D.7 Versionsverwaltung