
Embedded in Embedded
Description
Alles über E-Books | Antworten auf Fragen rund um E-Books, Kopierschutz und Dateiformate finden Sie in unserem Info- & Hilfebereich.
Hobbyists can mash together amazing functional systems using platforms like Arduino or Raspberry Pi, but it is imperative that engineers and product designers understand the foundational knowledge of embedded design. There are very few resources available that describe the thinking, strategies, and processes to take an idea through hardware design and low-level driver development, and successfully build a complete embedded system. Many engineers end up learning the hard way, or never really learn at all.
ARM processors are essentially ubiquitous in embedded systems. Design engineers building novel devices must understand the fundamentals of these systems and be able to break down large, complicated ideas into manageable pieces. Successful product development means traversing a huge amount of documentation to understand how to accomplish what you need, then put everything together to create a robust system that will reliably operate and be maintainable for years to come.
This book is a case study in embedded design including discussion of the hardware, processor initialization, low-level driver development, and application interface design for a product. Though we describe this through a specific application of a Cortex-M3 development board, our mission is to help the reader build foundational skills critical to being an excellent product developer. The completed development board is available to maximize the impact of this book, and the working platform that you create can then be used as a base for further development and learning.
The Embedded in Embedded program is about teaching fundamental skill sets to help engineers build a solid foundation of knowledge that can be applied in any design environment. With nearly 20 years of experience in the industry, the author communicates the critical skill development that is demanded by companies and essential to successful design. This book is as much about building a great design process, critical thinking, and even social considerations important to developers as it is about technical hardware and firmware design.
All prices
More details
Other editions
Additional editions

Person
Content
- Intro
- Dedication
- Acknowledgements
- Table of Contents
- Preface
- Chapter 1 Getting started
- 1.1 A Micro what?
- 1.2 The 32-bit Processor
- 1.3 Microcontroller Programs
- 1.4 The Clock
- 1.5 The Fundamentals
- 1.5.1 Number Systems
- 1.5.2 Ohm's Law
- 1.6 Switches
- 1.7 Light Emitting Diodes (LEDs)
- 1.8 Transistors
- 1.9 Power Supplies
- 1.9.1 Linear Regulators
- 1.9.2 Switching Power Supplies
- 1.10 Development Board Hardware
- 1.11 Block Diagram
- 1.12 Power Input
- 1.13 Main processor, JTAG, clocks, and connections
- 1.14 ANT 2.4GHz Transceiver
- 1.15 User IO: LCD, LEDs, Buttons, Beeper
- 1.16 J-Link On-Board
- 1.17 Summary
- Chapter 2 Development Environment & Version Control
- 2.1 IAR Integrated Development Environment
- 2.2 IAR Installation
- 2.3 Setting Up a New Project
- 2.4 Files in a New Project
- 2.5 IAR Simulator and Debugger
- 2.6 Other Development Tools
- 2.6.1 Tera Term
- 2.6.2 GitHub Desktop
- 2.6.3 ANTware II
- 2.6.4 nRFgo Studio
- 2.6.5 Windows Settings
- 2.7 Version control with Git
- Chapter 3 ARM Cortex-M3 Assembly Language
- 3.1 Core Registers
- 3.2 Instructions
- 3.3 Assembly Language Syntax
- 3.4 Load and Store Instructions
- 3.5 Hello World in Assembly
- Chapter 4 Embedded C
- 4.1 Documentation
- 4.2 Doxygen
- 4.2.1 Documenting the "right information"
- 4.2.2 Create a Configuration File
- 4.2.3 Special Comment Blocks
- 4.2.4 Doxygen tags in code
- 4.2.5 Doxygen Example
- 4.4 C project file overview
- 4.4.1 Accessing Registers
- 4.3 Coding Conventions
- 4.3.1 Type Definitions
- 4.3.2 Hungarian Notation
- 4.3.3 Preprocessor Symbol Definitions
- 4.3.4 Braces { }
- 4.3.5 Switch statements
- 4.3.6 White Space
- 4.3.7 Global Variables
- 4.3.8 Doxygen Tags
- 4.3.9 Function Declarations
- 4.3.10 State Declarations
- 4.3.11 Tabs and Indenting
- 4.3.12 Operator Precedence
- 4.5 How A Processor Starts Up
- 4.5.1 Watchdog Timer
- 4.5.2 Clock and Power Initialization
- 4.5.3 Implementing the clock setup
- 4.6 GPIO Initialization
- 4.7 Program Structures
- 4.7.1 The Infinite Loop
- 4.7.2 Operating Systems
- 4.7.3 State Machine Super Loop
- 4.8 Implementing the SM Super Loop
- 4.8.1 Initialization
- 4.8.2 State Machine Super loop
- 4.9 helloworld.c
- 4.10 Next Steps
- Chapter 5 GPIO & LED Driver
- 5.1 SAM3U2 General Purpose Input Output
- 5.2 External Hardware
- 5.2.1 Pin Allocation
- 5.3 The PIO Peripheral
- 5.4 PIO Internal Hardware
- 5.4.1 Logic Block Diagram
- 5.5 PIO Registers
- 5.6 Adding a New Task
- 5.7 The LED Driver
- 5.8 Driver Implementation
- 5.9 Blinking
- 5.9.1 Map File
- 5.10 Chapter Exercise
- Chapter 6 Interrupts & Button Drivers
- 6.1 Interrupts
- 6.2 Interrupts on the SAM3U2
- 6.2.1 Interrupts depend on hardware
- 6.2.2 Interrupts need to be configured by firmware
- 6.2.3 Interrupts can be enabled and disabled globally
- 6.2.4 An interrupt forces the processor to run an Interrupt Service Routine
- 6.2.5 Interrupts have priorities
- 6.2.6 Interrupts can (and will) occur anytime, anywhere
- 6.2.7 Interrupts require context preservation
- 6.2.8 Interrupts set flags that need to be cleared
- 6.2.9 ISRs should be short and fast
- 6.3 Interrupt User Guide Resources
- 6.4 Interrupts and C
- 6.4.1 Vector Table
- 6.4.2 Priorities
- 6.4.3 Enabling and Disabling Peripheral Interrupt Sources
- 6.5 Peripheral Interrupts
- 6.5.1 GPIO Interrupts
- 6.5.2 Timer / Counter Interrupts
- 6.5.3 Communication Peripheral Interrupts
- 6.5.4 Other Peripheral Interrupts
- 6.6 Button Driver Overview and Setup
- 6.6.1 Debouncing
- 6.6.2 Button history or edge detection
- 6.6.3 Button held
- 6.7 Button Operation
- 6.7.1 Button Typedefs
- 6.8 PIO Interrupts
- 6.9 Button API
- 6.10 Chapter Exercise
- Chapter 7 Sleep, System Tick and Timer Peripheral
- 7.1 Sleep
- 7.2 System Tick Configuration
- 7.2.1 Tick Time and CTRL INIT value
- 7.3 Timer Peripheral
- 7.4 Timer Counter Highlights
- 7.5 Timer Counter Registers
- 7.6 Timer Driver
- 7.7 Timer API
- 7.8 Chapter Exercise
- Chapter 8 Pulse Width Modulation
- 8.1 PWM Concepts
- 8.2 PWM the Easy Way: SAM3U2 PWM Peripheral
- 8.3 Peripheral Highlights
- 8.4 PWM and Audio
- 8.5 EiE Audio Hardware
- 8.6 PWM Registers
- 8.7 Development Board Audio Driver
- 8.7.1 Audio function initialization
- 8.7.2 Audio API Functions
- 8.7.3 PWMAudioOn() and PWMAudioOff()
- 8.8 PWM the Hard Way: Bit Bashing
- 8.9 LED PWM Design
- 8.10 Audio Bits
- 8.11 Multiple User Tasks
- 8.12 Chapter Exercise
- Chapter 9 DMA and Messaging
- 9.1 Data Transmission
- 9.2 Resource Conflicts
- 9.3 Direct Memory Access - DMA
- 9.3.1 PDC Registers
- 9.3.2 PDC Interrupts
- 9.3.3 Transmitting with DMA
- 9.3.4 Receiving with DMA
- 9.4 Linked Lists
- 9.5 Hard Faults
- 9.6 EiE Messaging Task
- 9.6.1 Message Task Data Structures
- 9.6.2 Message Task Protected Functions
- 9.7 Messaging Public Functions
- 9.7.1 QueryMessageStatus()
- 9.8 Messaging State Machine
- 9.9 Chapter Exercise
- Chapter 10 Serial and Bugs for Breakfast
- 10.1 RS-232 Overview
- 10.1.1 Clocking
- 10.1.2 Signaling
- 10.2 Data Errors
- 10.3 ASCII
- 10.4 Storing and Displaying Characters
- 10.5 SAM3U2 UART Peripheral
- 10.5.1 Peripheral Highlights
- 10.5.2 Baud Rate Generator
- 10.6 UART Registers
- 10.6.1 EiE UART Driver
- 10.6.2 UART Task Data Structures
- 10.6.3 UART Driver Functions
- 10.7 UART Interrupts
- 10.8 UART Driver Design
- 10.8.1 Data Transmit
- 10.8.2 Data Receive
- 10.9 Dynamic Memory Allocation
- 10.10 Debug Task
- 10.11 Debug API
- 10.11.1 DebugPrintf()
- 10.11.2 DebugPrintNumber()
- 10.12 Reading Character Input
- 10.12.1 DebugInitialize()
- 10.12.2 DebugRxCallback()
- 10.13 Debug Programmer Access
- 10.14 Terminal Control Codes
- 10.15 Chapter Exercise
- Chapter 11 I SPI with my I2C
- 11.1 SPI Signaling
- 11.2 SPI Hardware
- 11.3 SPI Registers
- 11.4 EiE SPI Driver
- 11.5 Master Transmit
- 11.6 Master Receive
- 11.7 Slave Transmit
- 11.8 Slave Receive
- 11.9 Slave Transmit with Flow Control
- 11.10 Slave Receive with Flow Control
- 11.11 Chip Select
- 11.12 SPI Data Structures
- 11.13 SPI Driver Functions in Common with UART
- 11.14 New SPI Driver Functions
- 11.14.1 SspRequest()
- 11.14.2 SspRelease()
- 11.14.3 SspAssertCS() / SspDeassertCS()
- 11.14.4 SspReadByte() / SspReadData()
- 11.14.5 SspQueryReceiveStatus()
- 11.14.6 SspGenericHandler()
- 11.15 Ssp State Machine
- 11.16 Blade Daughter Board Interface
- 11.17 Blade Example Project
- 11.17.1 Blade Firmware Configuration Defaults and Interface
- 11.17.2 UserApp1Initialize()
- 11.17.3 UserApp1SM
- 11.18 Chapter Exercise
- Chapter 12 I2C & ASCII LCD
- 12.1 Inter-Integrated Circuit (I²C) Communication
- 12.2 I²C Hardware
- 12.3 I²C Signaling
- 12.4 EiE TWI Hardware
- 12.5 I²C (TWI) on SAM3U2
- 12.6 TWI and PDC
- 12.7 TWI Registers
- 12.8 TWI Driver
- 12.8.1 TWI Data Structures
- 12.8.2 TWI Driver Functions
- 12.9 TWI State Machine and ISR
- 12.9.1 TWI Transmit
- 12.10 TWI Receive
- 12.10.1 NACK and Errors
- 12.11 ASCII LCD
- 12.11.1 LCD Hardware
- 12.11.2 LCD Controllers
- 12.11.3 LCD Interface
- 12.12 Character and Control Data
- 12.13 Using the LCD Controller
- 12.14 Control byte with Co and Rs
- 12.14.1 Character RAM Addresses
- 12.14.2 LCD Command Set
- 12.14.3 LCD Initialization
- 12.15 LCD Application
- 12.15.1 LcdCommand()
- 12.15.2 LcdMessage()
- 12.15.3 LcdClearChars()
- 12.16 Chapter Exercise
- Chapter 13 Analog to Digital Conversion
- 13.1 ADC background
- 13.1.1 Quantization
- 13.1.2 Sampling
- 13.1.3 Bandwidth and Aliasing
- 13.1.4 Nyquist Frequency
- 13.1.5 Resolution
- 13.1.6 Clipping
- 13.2 Characteristics of ADCs
- 13.2.1 Precision, Error, and ENOB
- 13.2.2 Missing codes
- 13.2.3 Reference Voltages
- 13.2.4 Noise
- 13.2.5 Single vs. Differential Measurement
- 13.2.6 Signal Conditioning
- 13.3 EiE ADC Hardware
- 13.4 SAM3U2 12-bit ADC Peripheral
- 13.4.1 ADC Registers
- 13.5 EiE ADC Driver
- 13.5.1 ADC Initialization
- 13.5.2 ADC Interrupt
- 13.5.3 ADC State Machine
- 13.6 EiE ADC API
- 13.6.1 void Adc12AssignCallback( )
- 13.6.2 bool Adc12StartConversion()
- 13.7 Chapter Exercise
- Chapter 14 ANT Radio System
- 14.1 ANT Wireless Radio
- 14.2 Building the ANT Stack
- 14.2.1 ANT Physical Layer
- 14.3 ANT Message Protocol and Usage
- 14.3.1 ANT Protocol: Sections 1 thru 4
- 14.3.2 ANT Protocol Section 5: Channel Parameters
- 14.3.3 ANT Channel ID
- 14.3.4 Transmit Data Types
- 14.3.5 ANT Protocol Section 6: Pairing
- 14.3.6 ANT Protocol Section 7: ANT Interface
- 14.3.7 ANT Protocol Sections 8 and 9: Examples and Appendix
- 14.4 Message Handling
- 14.4.1 Messaging with Channel Closed
- 14.4.2 Messages When Channel is Open
- 14.5 Debugging an ANT System
- 14.6 Programming the ANT Sub-System
- 14.6.1 Firmware Design ant.c and ant_api.c
- 14.6.2 Data Structures
- 14.6.3 Serial Drivers and ANT hardware interface
- 14.6.4 Task access to send and receive
- 14.6.5 ANT_TICK and ANT_DATA
- 14.7 ANT State Machine
- 14.7.1 Initializing the ANT SM
- 14.8 Implementing the ANT State Machine
- 14.9 API Summary
- 14.9.1 ANT Configuration and Status Message
- 14.9.2 ANT Data Messages
- 14.10 Chapter Exercise
- 14.11 Conclusion
- Glossary
- Index
System requirements
File format: PDF
Copy-Protection: Adobe-DRM (Digital Rights Management)
System requirements:
- Computer (Windows; MacOS X; Linux): Install the free reader Adobe Digital Editions prior to download (see eBook Help).
- Tablet/smartphone (Android; iOS): Install the free app Adobe Digital Editions or the app PocketBook before downloading (see eBook Help).
- E-reader: Bookeen, Kobo, Pocketbook, Sony, Tolino and many more (only limited: Kindle).
The file format PDF always displays a book page identically on any hardware. This makes PDF suitable for complex layouts such as those used in textbooks and reference books (images, tables, columns, footnotes). Unfortunately, on the small screens of e-readers or smartphones, PDFs are rather annoying, requiring too much scrolling.
This eBook uses Adobe-DRM, a „hard” copy protection. If the necessary requirements are not met, unfortunately you will not be able to open the eBook. You will therefore need to prepare your reading hardware before downloading.
Please note: We strongly recommend that you authorise using your personal Adobe ID after installation of any reading software.
For more information, see our eBook Help page.
File format: PDF
Copy protection: Watermark-DRM (Digital Rights Management)
System requirements:
- Computer (Windows; MacOS X; Linux): Use the free software Adobe Reader, Adobe Digital Editions, or any other PDF viewer of your choice (see eBook Help).
- Tablet/Smartphone (Android; iOS): Install the free app Adobe Digital Editions or another reading app for eBooks, e.g., PocketBook (see eBook Help).
- E-reader: Bookeen, Kobo, Pocketbook, Sony, Tolino and many more (only limited: Kindle).
The file format PDF always displays a book page identically on any hardware. This makes PDF suitable for complex layouts such as those used in textbooks and reference books (images, tables, columns, footnotes). Unfortunately, on the small screens of e-readers or smartphones, PDFs are rather annoying, requiring too much scrolling.
This eBook uses Watermark-DRM, a „soft” copy protection. This means that there are no technical restrictions to prevent illegal distribution. However, there is a personalised watermark embedded in the eBook that can be used to identify the purchaser of the eBook in the event of misuse and to provide evidence for legal purposes.
For more information, see our eBook Help page.