RP2040 assembly language programming ARM Cortex-M0+ on the Raspberry Pi Pico

"Learn to program the Raspberry Pi Pico's dual ARM Cortex M0+ CPUs in Assembly Language. The Pico contains a customer System on a Chip (SoC) called the RP2040, making it the Foundation's first entry into the low-cost microcontroller market. The RP2040 contains a wealth of coprocessors...

Descripción completa

Detalles Bibliográficos
Otros Autores: Smith, Stephen, 1953- author (author)
Formato: Libro electrónico
Idioma:Inglés
Publicado: New York : Apress [2022]
Materias:
Ver en Biblioteca Universitat Ramon Llull:https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009635712406719
Tabla de Contenidos:
  • Intro
  • Table of Contents
  • About the Author
  • About the Technical Reviewer
  • Acknowledgments
  • Introduction
  • Chapter 1: How to Set Up the Development Environment
  • About the Raspberry Pi Pico
  • About the Host Computer
  • How to Solder and Wire
  • How to Install Software
  • A Simple Program to Ensure Things Are Working
  • Create Some Helper Script Files
  • Summary
  • Chapter 2: Our First Assembly Language Program
  • 10 Reasons to Use Assembly Language
  • Computers and Numbers
  • ARM Assembly Instructions
  • CPU Registers
  • ARM Instruction Format
  • RP2040 Memory
  • About the GCC Assembler
  • Hello World
  • Our First Assembly Language File
  • About the Starting Comment
  • Where to Start
  • Assembly Instructions
  • Data
  • Program Logic
  • Reverse Engineering Our Program
  • Summary
  • Exercises
  • Chapter 3: How to Build and Debug Programs
  • CMake
  • GNU Make
  • Print Statements
  • GDB
  • Preparing to Debug
  • Beginning GDB
  • Summary
  • Exercises
  • Chapter 4: How to Load and Add
  • About Negative Numbers
  • About Two's Complement
  • About Raspberry Pi OS Calculator
  • About One's Complement
  • Big- vs. Little-Endian
  • About Bi-Endian
  • Pros of Little-Endian
  • Cons of Little-Endian
  • How to Shift and Rotate Registers
  • About Carry Flag
  • Basics of Shifting and Rotating
  • Logical Shift Left
  • Logical Shift Right
  • Arithmetic Shift Right
  • Rotate Right
  • Rotate Right Extend
  • How to Use MOV
  • Move Immediate
  • Moving Data from One Register to Another Using Register MOV
  • ADD/ADC
  • Add with Carry
  • SUB/SBC
  • Shifting and Rotating
  • Loading All 32 Bits of a Register
  • MOV/ADD/Shift Example
  • Summary
  • Exercises
  • Chapter 5: How to Control Program Flow
  • Unconditional Branch
  • About the CPSR
  • Branch on Condition
  • About the CMP Instruction
  • Loops
  • FOR Loops
  • While Loops
  • If/Then/Else
  • Logical Operators.
  • AND
  • EOR
  • ORR
  • BIC
  • MVN
  • TST
  • Design Patterns
  • Converting Integers to ASCII
  • Using Expressions in Immediate Constants
  • Storing a Register to Memory
  • Why Not Print in Decimal?
  • Performance of Branch Instructions
  • Summary
  • Exercises
  • Chapter 6: Thanks for the Memories
  • How to Define Memory Contents
  • How to Align Data
  • How to Load a Register
  • How to Load a Register with an Address
  • How to Build the Address Directly
  • PC Relative Addressing
  • How to Load Data from Memory
  • Optimizing Small Read-Only Data Access
  • Indexing Through Memory
  • How to Store a Register
  • How to Convert to Uppercase
  • How to Load and Store Multiple Registers
  • Summary
  • Exercises
  • Chapter 7: How to Call Functions and Use the Stack
  • About Stacks on the RP2040
  • How to Branch with Link
  • About Nesting Function Calls
  • About Function Parameters and Return Values
  • How to Manage the Registers
  • Summary of the Function Call Algorithm
  • More on the Branch Instructions
  • About the X Factor
  • Uppercase Revisited
  • About Stack Frames
  • Stack Frame Example
  • How to Define Symbols
  • How to Create Macros
  • About Include Directive
  • How to Define a Macro
  • About Labels
  • Why Macros?
  • Summary
  • Exercises
  • Chapter 8: Interacting with C and the SDK
  • How to Wire Flashing LEDs
  • How to Flash LEDs with the SDK
  • How to Call Assembly Routines from C
  • How to Embed Assembly Code Inside C Code
  • Summary
  • Exercises
  • Chapter 9: How to Program the Built-in Hardware
  • About the RP2040 Memory Map
  • About C Header Files
  • About the Raspberry Pi Pico Pins
  • How to Set a Pin Function
  • About Hardware Registers and Concurrency
  • About Programming the Pads
  • How to Initialize SIO
  • How to Turn a Pin On/Off
  • The Complete Program
  • Summary
  • Exercises
  • Chapter 10: How to Initialize and Interact with Programmable I/O.
  • About PIO Architecture
  • About the PIO Instructions
  • Flashing the LEDs with PIO
  • PIO Instruction Details and Examples
  • JMP
  • WAIT
  • IN
  • OUT
  • PUSH
  • PULL
  • MOV
  • IRQ
  • SET
  • About Controlling Timing
  • About the Clock Divider
  • About the Delay Operand
  • About Side-Set
  • More Configurable Options
  • Summary
  • Exercises
  • Chapter 11: How to Set and Catch Interrupts
  • Overview of the RP2040's Interrupts
  • About the RP2040's Interrupts
  • About the Interrupt Vector Table
  • About Saving Processor State
  • About Interrupt Priorities
  • Flashing LEDs with Timer Interrupts
  • About the RP2040 Alarm Timer
  • Setting the Interrupt Handler and Enabling IRQ0
  • The Complete Program
  • About the SVCall Interrupt
  • Using the SDK
  • Summary
  • Exercises
  • Chapter 12: Multiplication, Division, and Floating Point
  • Multiplication
  • Division
  • About Division and Interrupts
  • Interpolation
  • Adding an Array of Integers
  • Interpolating Between Numbers
  • Floating Point
  • About the Structure of the Boot ROM
  • Sample Floating-Point Program
  • Some Notes on C and printf
  • Summary
  • Exercises
  • Chapter 13: Multiprocessing
  • About Saving Power
  • About Interprocessor Mailboxes
  • How to Run Code on the Second CPU
  • A Multiprocessing Example
  • About Fibonacci Numbers
  • About Factorials
  • The Complete Program
  • About Spinlocks
  • Regulating Access to a Memory Table
  • A Word on the SDK
  • Summary
  • Exercises
  • Chapter 14: How to Connect Pico to IoT
  • About the RP2040's Built-in Temperature Sensor
  • About Home-Brewed Communication Protocol
  • About the Server Side of the Protocol
  • About the RP2040's UART
  • Mastering Math Routines
  • Viewing the Main Program
  • About IoT, Wi-Fi, Bluetooth, and Serial Communications
  • Summary
  • Exercises
  • Appendix A: ASCII Character Set
  • Appendix B: Assembler Directives
  • Appendix C: Binary Formats
  • Integers
  • Floating Point
  • Addresses
  • Appendix D: The ARM Instruction Set
  • Answers to Exercises
  • Chapter 2
  • Chapter 4
  • Chapter 6
  • Chapter 9
  • Chapter 10
  • Index.