LPCXpresso Workshop B. Vasu Dev vasu@easyarm.com Enabling the ARM Learning in INDIA AGENDA ARM Introduction Development Tools Setup Hardware Detail and Schematics ARM Cortex Programming Using CMSIS ( Create New Projects for Cortex ) Application Development Enabling the ARM Learning in INDIA ARM INTRODUCTION Enabling the ARM Learning in INDIA What is ARM? The ARM is a 32-bit reduced instruction set computer (RISC) instruction set architecture (ISA) developed by ARM Holdings. ARM also known as Advance RISC Machine Enabling the ARM Learning in INDIA Why ARM? Simplicity is the key philosophy behind the ARM design RISC machine with small instruction set and consequently a small gate count. High Performance Low power consumption Small amount of silicon die area. Open Source Development Tools Enabling the ARM Learning in INDIA Where is ARM? Enabling the ARM Learning in INDIA History Founded in November 1990 Spun out of Acorn Computers Designs the ARM range of RISC processor cores Licenses ARM core designs to semiconductor partners who fabricate and sell to their customers. ARM does not fabricate silicon itself Also develop technologies to assist with the design-in of the ARM architecture Software tools, boards, debug hardware, application software, bus architectures, peripherals etc Enabling the ARM Learning in INDIA ARM Core Family Application Cores Embedded Cores Secure Cores ARM720T ARM7EJ-S SecureCore SC100 ARM920T ARM7TDMI SecureCore SC110 ARM922T ARM7TDMI-S SecurCore SC200 ARM926EJ-S ARM946E-S SecurCore SC210 ARM1020E ARM966E-S ARM1022 ARM968E-S ARM1026EJ-S ARM996HS ARM11 MPCore ARM1026EJ-S ARM1136J(F)-S ARM1156T2(F)-S ARM1176JZ(F)-S ARM Cortex-M0 ARM Cortex-A8 ARM Cortex-M1 Enabling the ARM Learning in INDIA ARM Core Family T: Thumb D: On-chip debug support M: Enhanced multiplier I: Embedded ICE hardware T2: Thumb-2 S: Synthesizable code E: Enhanced DSP instruction set J: JAVA support, Jazelle Z: Should be TrustZone? F: Floating point unit H: Handshake, clockless design for synchronous or asynchronous design Enabling the ARM Learning in INDIA ARM Core Family ARM processor core + cache + MMU = ARM CPU cores ARM6 → ARM7 – 3-stage pipeline – Keep its instructions and data in the same memory system – Thumb 16-bit compressed instruction set – On-chip Debug support, enabling the processor to halt in response to a debug request – Enhanced Multiplier, 64-bit result – Embedded ICE hardware, give on-chip breakpoint and watchpoint support Enabling the ARM Learning in INDIA ARM Core Family ARM8 → ARM9 → ARM10 ARM9 – 5-stage pipeline (130 MHz or 200MHz) – Using separate instruction and data memory ports ARM 10 (1998. Oct.) – High performance, 300 MHz – Multimedia digital consumer applications – Optional vector floating-point unit ARM11 (2002 Q4) –8-stage pipeline – Addresses a broad range of applications in the wireless, consumer, networking and automotive segments –Support media accelerating extension instructions –Can achieve 1GHz & Support AXI Enabling the ARM Learning in INDIA ARM Architecture Versions Version 1 – The first ARM processor, developed at Acorn Computers Limited 1983-1985 – 26-bit address, no multiply or coprocessor support Version 2 – Sold in volume in the Acorn Archimedes and A3000 products – 26-bit addressing, including 32-bit result multiply and coprocessor Version 2a – Coprocessor 15 as the system control coprocessor to manageCache – Add the atomic load store (SWP) instruction Version 3 – First ARM processor designed by ARM Limited (1990) – ARM6 (macro cell), ARM60 (stand-alone processor) ARM600 (an integrated CPU with on-chip cache, MMU, write buffer) ARM610 (used in Apple Newton) – 32-bit addressing, separate CPSR and SPSRs – Add the undefined and abort modes to allow coprocessor emulation and virtual memory support in supervisor mode Enabling the ARM Learning in INDIA ARM Architecture Versions Version 3M – Introduce the signed and unsigned multiply and multiplyaccumulate instructions that generate the full 64-bit result Version 4 – Add the signed, unsigned half-word and signed byte load and store instructions – Reserve some of SWI space for architecturally defined operation – System mode is introduced Version 4T – 16-bit Thumb compressed form of the instruction set is introduced Version 5T – Introduced recently, a superset of version 4T adding the BLX, CLZ and BRK instructions Version 5TE Add the signal processing instruction set extension Enabling the ARM Learning in INDIA ARM Architecture Versions Version 6 – Media processing extensions (SIMD) • 2x faster MPEG4 encode/decode • 2x faster audio DSP – Improved cache architecture • Physically addressed caches • Reduction in cache flush/refill • Reduced overhead in context switches – Improved exception and interrupt handling • Important for improving performance in real-time tasks – Unaligned and mixed-endian data support • Simpler data sharing, application porting and saves memory Enabling the ARM Learning in INDIA ARM Architecture Versions Version7 Enabling the ARM Learning in INDIA Development of the ARM Architecture 1 2 Halfword and signed halfword / byte support System mode 4 SA-110 3 Early ARM architectures ARM7TDMI ARM720T 5T E CLZ SA-1110 Thumb instruction set Improved ARM/Thumb Interworking Saturated maths DSP multiplyaccumulate instructions ARM1020E 4T ARM9TDMI ARM940T Jazelle 5T EJ Java bytecode execution ARM9EJ-S ARM926EJ-S ARM7EJ-S ARM1026EJ-S SIMD Instructions 6 Multi-processing XScale ARM9E-S ARM966E-S V6 Memory architecture (VMSA) Unaligned data support ARM1136EJ-S Enabling the ARM Learning in INDIA ARM Cores & Arch Ver Enabling the ARM Learning in INDIA ARM CORTEX The ARM Cortex family includes processors based on the three distinct profiles of the ARMv7 architecture. The A profile for sophisticated, high-end applications running open and complex operating systems The R profile for real-time systems The M profile optimized for cost-sensitive and microcontroller applications Enabling the ARM Learning in INDIA Why ARM Cortex ? 1. Developed for embedded systems 2. High performance with low dynamic power Harvard Architecture 30% performance improvement over ARM7TDMI Single-cycle multiply and hardware division Atomic Bit manipulation Best code density Thumb-2 brings 32-bit performance with 16-bit code density Deterministic Interrupt controller inside the core, 6-cycle latency 6 CPU cycles wake up time from Low Power Mode Improved debug features Serial Wire debug and JTAG 2 data watchpoints, 8 hardware breakpoints Enabling the ARM Learning in INDIA ARM Cortex PipeLine Cortex CPU executes instruction in single cycle. And this is achieved with the three stage pipeline. - One instruction being executed the next is being deecoded and the third is being fetch from the memory. - Speculative fetch is performed for the branch instruction so both conditional instructions are available for execution without any performance hit.. - The worst case is the indirect branch where the speculative fetch can not be made and need to flush the pipeline. Pipeline is the key to the overall performance of the Cortex CPU. Enabling the ARM Learning in INDIA Three Stage Pipeline The pipeline is used to overcome the delay caused by instruction fetching and decoding before execution. Enabling the ARM Learning in INDIA Three Stage Pipeline Fetch – The instruction is fetched from memory and placed in the instruction pipeline Decode – The instruction is decoded and the data path control signals prepared for the next cycle Execute – The register bank is read, an operand shifted, the ALU result generated and written back into destination register The three stage pipeline has hardware independent stages that execute one instruction while decoding a second and fetching a third. PC runs 8 bytes ahead of current execution instruction since it holds the address of the fetching instruction but not the current execution instruction. 0x4000 LDR PC,[PC,#4] results PC => 0x400C not 0x4004 Enabling the ARM Learning in INDIA Processor Modes Register R13-R15 having special function within the Cortex CPU. Register R13 allows the CPU to operates in Two Operating modes[Thread & Handler]. Each mode having it's own stack and space. Two stack is called Main stack and process stack. Enabling the ARM Learning in INDIA Registers Enabling the ARM Learning in INDIA Exception Handling When an exception occurs, the ARM: Copies CPSR into SPSR_<mode> Sets appropriate CPSR bits Change to ARM state Change to exception mode Disable interrupts (if appropriate) Stores the return address in LR_<mode> Sets PC to vector address To return, exception handler needs to: Restore CPSR from SPSR_<mode> Restore PC from LR_<mode> Enabling the ARM Learning in INDIA Exception Handling The NVIC supports nesting (stacking) of interrupts, allowing an interrupt to be serviced earlier by exerting higher priority. It also supports dynamic reprioritisation of interrupts. Priority levels can be changed by software during run time. Enabling the ARM Learning in INDIA Instruction Set Enabling the ARM Learning in INDIA Instruction Set ARM’s implement two types of instruction sets 32-bit ARM Instruction Set 16-bit Thumb Instruction Set Enabling the ARM Learning in INDIA ARM (32bit) IS Enabling the ARM Learning in INDIA ARM (32bit) IS Every ARM (32 bit) instruction is conditionally executed. The top four bits are ANDed with the CPSR condition codes, If they do not matched the instruction is executed as NOP The AL condition is used to execute the instruction irrespective of the value of the condition code flags. By default, data processing instructions do not affect the condition code flags but the flags can be optionally set by using “S”. Ex: SUBS r1,r1,#1 Conditional Execution improves code density and performance by reducing the number of forward branch instructions. Normal CMP r3,#0 BEQ skip ADD r0,r1,r2 skip Conditional CMP r3,#0 ADDNE r0,r1,r2 Enabling the ARM Learning in INDIA Condition Codes Each ARM (32bit) Instruction can be prefixed with any of the following conditional code. Enabling the ARM Learning in INDIA Condition Codes Examples: Set the flags, then use various condition codes if (a==0) x=0; if (a>0) x=1; CMP r0,#0 MOVEQ r1,#0 MOVGT r1,#1 Enabling the ARM Learning in INDIA Branch instructions B Basic branch instruction used to jump forward or backward of up to 32 MB. BL Branch and Link instruction jumps to the destination and stores a return address in R14 (Link Register). BX, BLX Branch, Brach Link and Exchange. This swaps the instruction sets from ARM to THUMB and vice versa while jumping. BXJ Branch and change to Jazelle state. Enabling the ARM Learning in INDIA Data Processing Inst. Arithmetic: ADD Logical: Comparisons: Data movement: ADC AND CMP MOV SUB SBC RSB RSC ORR EOR BIC CMN TST TEQ MVN Enabling the ARM Learning in INDIA Multiply Instructions MUL, MLA MULL, MLAL Enabling the ARM Learning in INDIA Data Transfer Inst. Simple Data Transfer Inst. LDR STR LDRB STRB LDRH STRH LDRSB LDRSH Word Byte Halfword Signed byte load Signed halfword load Load / Store Multiple Registers LDM STM Enabling the ARM Learning in INDIA Swap Instruction Are also called as semaphore instructions SWP R12, R10, [R9] ; load R12 from address R9 and ; store R10 to address R9 SWPB R3, R4, [R8] ; load byte to R3 from address R8 and ; store byte from R4 to address R8 SWP R1, R1, [R2] ; Exchange value in R1 and address in R2 Enabling the ARM Learning in INDIA Miscellaneous Inst. Software Interrupt Causes an exception trap to the SWI hardware vector The SWI handler can examine the SWI number to decide what operation has been requested. By using the SWI mechanism, an operating system can implement a set of privileged operations which applications running in user mode can request. Ex. SWI #3 PSR Transfer Instructions MRS and MSR allow contents of CPSR / SPSR to be transferred to / from a general purpose register. MRS{<cond>} Rd,<psr> ; Rd = <psr> MSR{<cond>} <psr[_fields]>,Rm ; <psr[_fields]> = Rm Enabling the ARM Learning in INDIA 2. Development Tools Set Up Enabling the ARM Learning in INDIA Development Tools Used. LPCXpresso is development platform from NXP. Eclipse based IDE, A GNU C Compiler, A Linker and Libraries and GDB debugger. Emulator. Enabling the ARM Learning in INDIA LPCExpresso setup Enabling the ARM Learning in INDIA LPCExpresso setup Enabling the ARM Learning in INDIA LPCExpresso setup Enabling the ARM Learning in INDIA Eclipse IDE Eclipse IDE Enabling the ARM Learning in INDIA Work Space Options used for Project Development Source Code Debug Mode Debug and Programming 1. Hardware and Schematics Enabling the ARM Learning in INDIA LPC1343 Enabling the ARM Learning in INDIA NGX Base Board Enabling the ARM Learning in INDIA NGX Base Board Enabling the ARM Learning in INDIA H/W- NGX_NXP Enabling the ARM Learning in INDIA Hardware Details - Base Board Hardware Features - 2x16 LCD with Contrast control and back light. - SD card connector. - Power Jack. - Reset Button. - ISP Button. - External Interrupt Button. - Buzzer, Audio Jack. - Ethernet Connector Enabling the ARM Learning in INDIA Hardware Details - Base Board - 20 Pin JTAG Connector - PS/2 - VGA - Serial Connector 0 - Serial Connector 1 - Preset for ADC - EEPROM. Enabling the ARM Learning in INDIA LPC1343 and Peripheral registers LPC1343 Features: - ARM Cortex Processor Running up to 72 MHz. - 32Kb on chip flash programming memory. - 8Kb SRAM - Selectable boot up : UART or USB - On chip drivers for MSC( Mass Storage Device) and HID( Human Interface Device). - I2C, SPI, UART, WDT, 32 bit Counter/Timer, USB. Enabling the ARM Learning in INDIA LPC1343 Block Diagram Enabling the ARM Learning in INDIA LPC1343 GPIO Peripherals - LPC1343's GPIOs GPIO_PORT0 → GPIO0_0 to GPIO0_11 GPIO_PORT1 → GPIO1_0 to GPIO1_11 GPIO_PORT2 → GPIO2_0 to GPIO2_11 GPIO_PORT3 → GPIO3_0 to GPIO3_3 Enabling the ARM Learning in INDIA LPC1343 GPIO Features - LPC1343 GPIOs - GPIO pin can be configured as input or output by the software. - Each individual Pin can serve as an edge or level sensitive interrupt request. - Interrupt can be configured on single falling or rising edges. - Level sensitive interrupt Pin can be HIGH or LOW active. - All GPIO Pins inputs by default. - Reading or writing of data registers are masked by address bit 13:2 . Enabling the ARM Learning in INDIA LPC1343 GPIO Features Name Access Description Address 0x0000 to GPIOnData R/W Portn data address masking register 0x3FF8 GPIOnData R/W Portn data address masking register 0x3FFC GPIOnDIR R/W Data direction register for port n 0x8000 GPIOnIS R/W Interrupt Sense register for port n 0x8004 GPIOnIBE R/W Interrupt both edges register for port n 0x8008 GPIOnIEV R/W Interrupt event register for Port n 0x800C GPIOnIE R/W Interrupt mask register for Port n 0x8010 GPIOnRIS R Raw interrupt status register for Port n 0x8014 GPIOnMIS R Masked Interrupt status register for Port n 0x8018 Enabling the ARM Learning in INDIA LPC1343 GPIO Features - GPIOnDIR : Pin 0 to 11, 12-31 reserved 0 – configured as input, 1- configured as Output - GPIOnIS : Pin 0 to 11,12-31 reserved 0 – interrupt on Pin edge sensitive. 1 – interrupt on Pin Level sensitive - GPIOnIBE : Pin 0 to 11, 12-31 reserved 0 – Interrupt on Pin is controlled through register GPIOnIEV 1 – Both edges on Pin triggerEnabling as interrupt. the ARM Learning in INDIA LPC1343 GPIO Features - GPIOnIEV : Pin 0 to 11, 12-31 reserved 0 – falling edges or low level on pin trigger as interrupt. 1 – rising edges or high level on pin trigger as interrupt. - GPIOnIE : Pin 0 to 11,12-31 reserved 0 – disables interrupt on that pin 1 – Enable interrupt on that pin. - GPIOnRIS : Pin 0 to 11, 12-31 reserved 0 – No interrupt on Pin. 1 – Interrupt requirement met on Pin. Enabling the ARM Learning in INDIA LPC1343 GPIO Features - GPIOnMIS : Pin 0 to 11, 12-31 reserved 0 – No interrupt or interrupt mask on Pin 1 – .interrupt on Pin - GPIOnIC : Pin 0 to 11,12-31 reserved 0 – No effect 1 – Clear edge detection logic for Pin Enabling the ARM Learning in INDIA LPC1343 GPIO Programming Step1: Configure pin as gpio( ) Step2: Configure the direction of pin(out)( ) ==>DIR 1 == >OUT 0 == > INPUT Default[input] Step3: Make the pin High( ) ==>DATA Step4: Make the pin Low( ) ==>DATA Enabling the ARM Learning in INDIA LPC1343 Timer/Counter There are two 16-bit Timers and two 32-bit Timers. Features : • Counter or timer operation. • Two 16-bit counter/timers with a programmable 16-bit prescaler. • One 16-bit capture channel that can take a snapshot of the timer value when an input signal transitions. A capture event may also optionally generate an interrupt. Enabling the ARM Learning in INDIA LPC1343 Timer/Counter Registers Name Access Description Address TMR16B0IR R/W The IR can be written to Clear Interrupts. 0x0000 TMR16B0TCR R/W The TCR is used for Timer/Counter function 0x0004 TMR16B0TC R/W TC can be controlled through the TCR 0x0008 TMR16B0PR R/W Prescale register. 0x000C TMR16B0PC R/W Prescale Counter 0x0010 TMR16B0MCR R/W Match Control Register 0x0014 TMR16B0MR0 R/W Match Register 0 0x0018 TMR16B0MR1 R/W Match Register 1 0x001C TMR16B0MR2 R/W Match Register 2 0x0020 Enabling the ARM Learning in INDIA LPC1343 Timer/Counter Registers Name Access Description Address TMR16B0CCR R/W Capture Control Register. 0x0028 TMR16B0CR0 RO Capture Register 0 0x002C TMR16B0EMR R/W External Match Register 0x003C TMR16B0CTCR R/W Count Control Register. 0x0070 TMR16B0PWMC R/W PWM Control Register 0x0074 Enabling the ARM Learning in INDIA LPC1343 Timer Programming 1) Initialize the Timer. timer16Init() LPC_TMR32B0->MR0 = TimerInterval; LPC_TMR32B0->MCR = 3; /* Interrupt and Reset on MR0 */ 2) Enable the Timer. timer16Enable() LPC_TMR32B0->TCR = 1; 2) Produce the appropriate delay. timer16DelayTicks() or timer16DelayUS() LPC_TMR32B0->TCR = 0x02; /* reset timer */ LPC_TMR32B0->PR = 0x00; /* set prescaler to zero */ LPC_TMR32B0->MR0 = delayInMs * ((SystemFrequency/LPC_SYSCON->SYSAHBCLKDIV) / 1000); LPC_TMR32B0->IR = 0xff; /* reset all interrrupts */ LPC_TMR32B0->MCR = 0x04; /* stop timer on match */ LPC_TMR32B0->TCR = 0x01; /* start timer */ /* wait until delay time has elapsed */ while (LPC_TMR32B0->TCR & 0x01); } 4) 4) Disable the Timer. timer16Disable() LPC_TMR32B0->TCR = 0; Reset the Timer. timer16Reset() regVal = LPC_TMR32B0->TCR; regVal |= 0x02; LPC_TMR32B0->TCR = regVal; Enabling the ARM Learning in INDIA LPC1343 UART Registers Address Name Access Description Offset U0RBR RO Receive Buffer Register. Contain Next receive char 0x0000 U0THR WO Transmit holding register ( next char transmit ) 0x0000 U0DLL R/W Divisor Latch LSB 0x0000 U0DLM R/W Divisor Latch MSB 0x0004 U0IER R/W Interrupt Enable Register 0x0004 U0IIR RO Interrupt ID Register 0x0008 U0FCR WO FIFO Control Register 0x0008 U0LCR W/R Line Control Register 0x000C U0MCR W/R Modem Control Register 0x0010 Enabling the ARM Learning in INDIA LPC1343 UART Registers Address Name Access Description Offset U0MSR RO Modem Status Register 0x0018 U0SCR R/W Scratch Pad Register 0x001C U0ACR R/W Auto Baud Control Register 0x0020 U0FDR R/W Fractional Divisor Register 0x0028 U0TER R/W Transmit Enable Register 0x0030 U0RS485CTRL R/W RS485 Control Mode 0x004C U0ADRMATCH R/W RS485 Address Match 0x0050 U0RS485DLY R/W RS485 Direction Control Delay 0x0054 Enabling the ARM Learning in INDIA LPC1343 I2C Features • Standard I2C-compliant bus interfaces may be configured as Master, Slave, or Master/Slave. • Arbitration is handled between simultaneously transmitting masters without corruption of serial data on the bus. • Programmable clock allows adjustment of I2C transfer rates. • Data transfer is bidirectional between masters and slaves. • Serial clock synchronization allows devices with different bit rates to communicate via one serial bus. • Serial clock synchronization is used as a handshake mechanism to suspend and resume serial transfer. • Supports Fast-mode Plus. • Optional recognition of up to four distinct slave addresses. • Monitor mode allows observing all I2C-bus traffic, regardless of slave address. • I2C-bus can be used for test and diagnostic purposes. • The I2C-bus contains a standard I2C-compliant bus interface with two pins. Enabling the ARM Learning in INDIA LPC1343 I2C Registers Address Name Access Description Offset I2C0CONSET R/W I2C Control Set Register 0x0000 I2C0STAT RO I2C status Register 0x0004 I2C0DAT R/W I2C Data Register 0x0008 I2C0ADR0 R/W I2C Slave Address Register 0 0x000C I2C0SCLH R/W SCH Duty Cycle Register High Half Word 0x0010 I2C0SCLL R/W SCL Duty Cycle Register Low Half Word 0x0014 I2C0CONCLR WO I2C Control Clear Register 0x0018 I2C0MMCTRL R/W Monitor Mode Control Register 0x001C I2C0ADR1 R/W I2C Slave Address Register 1 0x0020 Enabling the ARM Learning in INDIA LPC1343 I2C Registers Address Name Access Description Offset I2C0ADR3 R/W I2C Slave Address Register 3 0x0028 I2C0DATA_BUFFER RO I2C Data Buffer Register 0x002C I2C0MASK0 R/W I2C Slave Address Mask Register 0 0x0030 I2C0MASK1 R/W I2C Slave Address Mask Register 1 0x0034 I2C0MASK2 R/W I2C Slave Address Mask Register 2 0x0038 I2C0MASK3 R/W I2C Slave Address Mask Register 3 0x003C Enabling the ARM Learning in INDIA LPC1343 ADC Features I2C Control Set register Enabling the ARM Learning in INDIA LPC1343 ADC Features • Input multiplexing among 8 pins. • 10-bit successive approximation Analog-to-Digital Converter (ADC). • Power-down mode. • Measurement range 0 to 3.6 V. Do not exceed the VDD voltage level. • 10-bit conversion time ≥ 2.44 μs. • Burst conversion mode for single or multiple inputs. • Optional conversion on transition on input pin or Timer Match signal. • Individual result registers for each A/D channel to reduce interrupt overhead. Enabling the ARM Learning in INDIA LPC1343 ADC Registers Address Name Access Description Offset AD0CR R/W A/D Control Register 0x0000 AD0GDR R/W A/D Global Data Register 0x0004 AD0INTEN R/W A/D Interrupt Enable Register 0x000C AD0DR0 R/W A/D Channel 0 Data Register 0x0010 AD0DR1 R/W A/D Channel 1 Data Register 0x0014 AD0DR2 R/W A/D Channel 2 Data Register 0x0018 AD0DR3 R/W A/D Channel 3 Data Register 0x001C AD0DR4 R/W A/D Channel 4 Data Register 0x0020 AD0DR5 R/W AD0DR6 R/W A/D Channel 5 Data Register 0x0024 Enabling the ARM Learning in INDIA A/D Channel 6 Data Register 0x0028 LPC1343 ADC Registers Address Name Access Description Offset AD0DR7 R/W A/D Channel 7 Data Register 0x002C AD0STAT RO A/D Status Register 0x0030 Enabling the ARM LearningAD0INTEN in INDIA LPC1343 ADC Programming Initialize the ADC. adcInit() /* Disable Power down bit to the ADC block. */ LPC_SYSCON->PDRUNCFG &= ~(0x1<<4); /* Enable AHB clock to the ADC. */ LPC_SYSCON->SYSAHBCLKCTRL |= (1<<13) LPC_ADC->CR = ((SystemCoreClock/LPC_SYSCON>SYSAHBCLKDIV)/ADC_Clk-1)<<8; Read the particular ADC channel. adcRead() LPC_ADC->CR |= (1 << 24) | (1 << channelNum); /* switch channel,start A/D convert */ Store the result in a variable or buffer. Variable = LPC_ADC-> DR5 Enabling the ARM Learning in INDIA LPC1343 USB Registers Address Name Access Description Offset USBDevIntSt RO USB Device interrupt Status 0x0000 USBDevIntEn R/W USB Device Interrupt Enable 0x0004 USBDevIntClr WO USB Device Interrupt Clear 0x0008 USBDevIntSet WO USB Device Interrupt Set. 0x000C USBCmdCode WO USB Command Code 0x0010 USBCmdData RO USB Command Data 0x0014 USBRxData RO USB Receive Data 0x0018 USBTxData WO USB Transmit Data 0x001C USBRxPLen RO USB Receive Packet Length 0x0020 Enabling the ARM Learning in INDIA LPC1343 USB Registers Address Name Access Description Offset USBCtrl R/W USB Control 0x0028 USBDevFIQSel WO USB Device FIQ Select 0x002C Enabling the ARM Learning in INDIA LPC1343 SSP Features • Compatible with Motorola SPI, 4-wire TI SSI, and National Semiconductor Microwire buses. • Synchronous Serial Communication. • Supports master or slave operation. • Eight frame FIFOs for both transmit and receive. • 4-bit to 16-bit frame. Enabling the ARM Learning in INDIA LPC1343 SSP Registers Address Name Access Description Offset SSP0CR0 R/W Control Register 0 0x0000 SSP0CR1 R/W Control Register 1 0x0004 SSP0DR R/W Data Register 0x0008 SSP0SR RO Status Register 0x000C SSP0CPSR R/W Clock Prescale Register 0x0010 SSP0IMSC R/W Interrupt Mask Set and Clear Register 0x0014 SSP0RIS RO Raw Interrupt Status Register 0x0018 SSP0MIS RO Mask Interrupt Status Register 0x001C SSP0ICR WO SSPICR Interrupt Clear Register 0x0020 Enabling the ARM Learning in INDIA