EMBEDDED SYSTEMS DESIGN USING THE RABBIT 3000 MICROPROCESSOR
CONTENTS CHAPTER 1: INTRODUCTION 1 1 EMBEDDED SYSTEMS AND EMBEDDED CONTROLLERS 1 2 EMBEDDED SYSTEMS—CASE STUDIES 1 3 AVAILABLE OFF-THE-SHELF SOLUTIONS 1 4 SOFTWARE DEVELOPMENT TOOLS 1 5 DESIGN TRADE-OFFS 1 6 MIGRATION TO HIGHER VOLUME PRODUCTION CHAPTER 2: THE BASICS 2 1 EVALUATING CONTROLLERS 2 2 DE?NING THE PROBLEM 2 3 A SURVEY OF SOLUTIONS 2 4 A RABBIT’S ROOTS 2 5 RABBIT IN DETAIL 2 6 IN SUMMARY CHAPTER 3: STARTING OUT 3 1 INTRODUCTION TO THE RCM3200 RABBIT CORE 3 2 INTRODUCTION TO THE DYNAMIC C DEVELOPMENT ENVIRONMENT 3 3 BRIEF INTRODUCTION TO DYNAMIC C LIBRARIES 3 4 MEMORY SPACES IN DYNAMIC C 3 5 HOW CODE IS COMPILED AND RUN 3 6 SETTING UP A PC AS AN RCM3200 DEVELOPMENT SYSTEM 3 7 TIME TO START WRITING CODE! 3 8 WHAT’S NEXT? CHAPTER 4: DEBUGGING 4 1 THE ZEN OF EMBEDDED SYSTEMS DEVELOPMENT AND TROUBLESHOOTING CONTENTS 4 2 AVOID DEBUGGING ALTOGETHER—CODE SMART 4 3 COMMON PROBLEMS 4 4 DYNAMIC C DEBUGGING TOOLS 4 5 ISOLATING THE PROBLEM 4 6 RUN-TIME ERRORS 4 7 MISCELLANEOUS ADVANCED TECHNIQUES 4 8 FINAL THOUGHTS CHAPTER 5: INTERFACING TO THE EXTERNAL WORLD 5 1 INTRODUCTION 5 2 DIGITAL INTERFACING 5 3 HIGH CURRENT OUTPUTS 5 4 CPLDS AND FPGAS 5 5 ANALOG INTERFACING—AN OVERVIEW 5 6 CONCLUSION CHAPTER 6: INTRODUCTION TO RABBIT ASSEMBLY LANGUAGE 6 1 INTRODUCTION TO THE RABBIT 3000 INSTRUCTION SET 6 2 SOME UNIQUE RABBIT INSTRUCTIONS 6 3 STARTING TO CODE ASSEMBLY WITH DYNAMIC C 6 4 PASSING PARAMETERS BETWEEN C AND ASSEMBLY 6 5 PROJECT 1: CREATING A DELAY ROUTINE 6 6 PROJECT 2: BLINKING AN LED 6 7 PROJECT 3: DEBOUNCING A SWITCH 6 8 PROJECT 4: DRIVING A MULTIPLEXED LED DISPLAY 6 9 PROJECT 5: SETTING UP A REAL-TIME CLOCK CHAPTER 7: INTERRUPTS OVERVIEW 7 1 INTERRUPT DETAILS 7 2 WRITING AN INTERRUPT SERVICE ROUTINE 7 3 PROJECT 1: POLLED VS INTERRUPT-DRIVEN SERIAL COMMUNICATION 7 4 PROJECT 2: USING TIMER INTERRUPTS 7 5 PROJECT 3: USING THE WATCHDOG TIMER 7 6 PROJECT 4: SETTING UP A REAL-TIME CLOCK CHAPTER 8: MULTITASKING OVERVIEW 8 1 WHY USE MULTITASKING? 8 2 SOME MORE DE?NITIONS 8 3 COOPERATIVE MULTITASKING 8 4 PREEMPTIVE MULTITASKING 8 5 WHAT TO BE CAREFUL ABOUT IN MULTITASKING 8 6 BEGINNING TO MULTITASK WITH DYNAMIC C 8 7 DYNAMIC C’S IMPLEMENTATION OF COOPERATIVE MULTITASKING 8 8 DYNAMIC C’S IMPLEMENTATION OF PREEMPTIVE MULTITASKING 8 9 PROJECT 2: FLASHING LEDS WITH MULTITASKING CONTENTS 8 10 PROJECT 3: USING LINUX TO DISPLAY REAL TIME DATA 8 11 PROJECT 4: DESIGNING AN ANALOG SENSOR TASK 8 12 BACK TO THE STATE MACHINE FROM PROJECT 1 8 13 FINAL THOUGHT CHAPTER 9: NETWORKING 9 1 DYNAMIC C SUPPORT FOR NETWORKING PROTOCOLS 9 2 TYPICAL NETWORK SETUP 9 3 SETTING UP A CORE MODULE’S NETWORK CON?GURATION 9 4 PROJECT 1: BRINGING UP A RABBIT CORE MODULE FOR NETWORKING 9 5 THE CLIENT SERVER PARADIGM 9 6 THE BERKELEY SOCKETS INTERFACE 9 7 USING TCP VS UDP IN AN EMBEDDED APPLICATION 9 8 IMPORTANT DYNAMIC C LIBRARY FUNCTIONS FOR SOCKET PROGRAMMING 9 9 PROJECT 2: IMPLEMENTING A RABBIT TCP/IP SERVER 9 10 PROJECT 3: IMPLEMENTING A RABBIT TCP/IP CLIENT 9 11 PROJECT 4: IMPLEMENTING A RABBIT UDP SERVER 9 12 PROJECT 5: WEB ENABLING THE SENSOR ROUTINE 9 13 PROJECT 6: BUILDING AN ETHERNET-CONNECTED SPRINKLER CONTROLLER 9 14 SOME USEFUL (AND FREE!) NETWORKING UTILITIES 9 15 FINAL THOUGHT CHAPTER 10: SOFTOOLS—THE THIRD PARTY TOOL 10 1 WHO IS SOFTOOLS? 10 2 THE RABBIT WINIDE 10 3 SCRABBIT OPTIMIZER 10 4 SCRABBIT SEGMENTS 10 5 SCRABBIT #PRAGMAS 10 6 NEAR AND FAR FUNCTIONS 10 7 INLINE ASSEMBLY 10 8 LIBRARY SUPPORT 10 9 WINIDE’S SLINK LINKER 10 10 DEBUGGING IN THE WINIDE 10 11 MEMORY LAYOUT 10 12 REAL TIME OPERATING SYSTEMS 10 13 ETHERNET AND TCP/IP 10 14 WINIDE AND THE BOOK’S EXAMPLE PROGRAMS 10 15 CONCLUSION