VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 1 Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Wouter van Ooijen Mail: Sheets en info: Onderwerp: Programmeren van een Embedded Systeem Literatuur:ARM system on chip architecture S.B. Furber Addison Wesley Longman
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 2 instructie aan de hand van sheets boek als ondersteuning opgaves, in de les of thuis maken ARM V3.2 bordje aanschaffen (€ 60), wordt in volgende vak(ken) weer gebruikt tentamen
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 3 inleiding embedded/real-time/microcontrollers eerste uitleg ARM assembly language oefeningen ARM assembler met de simulator
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 4 steeds meer transistoren op een chip... losse transistor logica analoge ICs programmeerbare logica klant-specifieke logica micro processor micro controller ‘super’ microprocessor uC als IP
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 5 meestal: ‘computer-achtig’ ding geschikt voor real-time geschikt voor embedded gebruik combinatie van processor, ROM, RAM, I/O,... compact goedkoop zuinig
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 6 ergens in, deel van een geheel vaste functie, dus niet vrij programmeerbaar
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 7 niet: snel zo snel mogelijk interactief, batch wel: op tijd!
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 8 responstijd nut
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 9 ultra-goedkoop chinees, inclusief de documentatie lastig verkrijgbaar general-purpose PIC, Atmel, 8051, 68HC high-end ARM, PowerPC special purpose DSP, ethernet, USB, analoog,...
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 10 IP kale chip chip in behuizing module PCB box (bv PLC)
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 11 bijna altijd cross-development: jij werkt op een PC daar draait je editor, compiler, assembler, linker assembler, linker loader of programmer om te laden evt. In-Circuit Debugger luxer: ICE primitiever: burn and crash
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 12 C (of een andere HLL): grof makkelijk en snel reduceert de ontwikkelkosten Assembler: nauwkeurig moeilijker, specifiek, meer werk reduceert de hardware kosten
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 13 vaak het meeste in C kritische delen soms in assembler kennis van assembler is nuttig voor efficient gebruik van een controller, ook in C ! het zal je maar gebeuren: een bug in je compiler...
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 14 CISC doe zo veel mogelijk per instructie codeer instructies compact RISC voer zoveel mogelijk instructies uit codeer instructies simpel
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 15 1983 : een opvolger voor the BEEP uit pure noodzaak: RISC, klein Acorn RISC Machine zuinig (veel MIPS per Watt) krachtig beschikbaar als chip, maar ook als IP interne of externe bus MAC
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 16 ARM Advanced RISC Machines load store architecture fixed length 32-bit instructions 3-address instruction formats many instructions execute in one cycle instructions are conditionally executed
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 17 registers en geheugen R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen ARM processor chip
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 18 ARM User Programming model r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 (PC) CPSR 31 0 N Z C V r13: stack pointer r14: link register 31 0 Status register
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 19 Data Movement – load a constant value LDR destination, =value Examples: –LDRr0, =10 –LDRr1, =’a’ –LDRr2, =buffer Let op: het boek gebruikt ADR R2, buffer Geen # betekent: er volgt een label Dit is geen ‘echte’ ARM instructie Destination moet een register zijn
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 20 LDR R0, =value R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 21 Data Movement – load from a register MOV destination, source Examples: –MOVr0, r1 –MOVr1, r2 –MOVr2, r3
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 22 MOV R0, R1 R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 23 Data Movement – load from memory LDR destination, [ source_pointer ] Examples: –LDRr1, [ r3 ]
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 24 LDR R0, [ R1 ] R0 R R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 25 Data Movement – save to memory STR destination, [ destination_pointer ] Examples: –STRr1, [ r3 ]
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 26 STR R0, [ R1 ] R0 R1FFFF FFFC R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 27 Data processing Instructions Largest group of instructions, all sharing the same instruction format. Contains: –Arithmetic operations –Comparisons (no results - just set condition codes) –Logical operations –Data movement between registers Remember, this is a load / store architecture NOT –These instruction only work on registers, NOT memory. They each perform a specific operation on one or two operands. –First operand always a register - Rn
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 28 Arithmetic Operations Operations are: –ADDoperand1 + operand2 –ADCoperand1 + operand2 + carry –SUBoperand1 - operand2 –SBCoperand1 - operand2 + carry -1 –RSBoperand2 - operand1 –RSCoperand2 - operand1 + carry - 1 Syntax: – Rd, Rn, Operand2 Examples –ADD r0, r1, r2 –SUBGT r3, r3, #1 –RSBLES r4, r5, #5
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 29 Logical Operations Operations are: –ANDoperand1 AND operand2 –EORoperand1 EOR operand2 –ORRoperand1 OR operand2 –BICoperand1 AND NOT operand2 [ie bit clear] Syntax: – Rd, Rn, Operand2 Examples: –ANDr0, r1, r2 –BICEQr2, r3, #7 –EORSr1,r3,r0
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 30 ADD R3, R1, R2 R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen +
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 31 copieer de files uit empty.zip in een lege directory let op: geen spaties in de pathname dubbel-klik op de.ppr file edit je main.s build (ctrl-F9) start debugger (F9)
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 32.global main LABEL1:.word 10 LABEL2:.word 11 X:.word 12 Y:.word 13 Z:.word begin main hier komt je einde main klaar: b klaar
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 33 na starten van de debugger zet je onder file > target settings: Target = Simulator (als je netjes afsluit blijft zou dit moeten blijven staan)
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 34 (evt. kan je breakpoints zetten of verwijderen) run als het goed is kom je nu op een breakpoint aan het begin van main
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 35 Loop nu instructie voor instructie door je programma heen (step) Let op wat er veranderd in de regsiters en (uiteindelijk) in het geheugen
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 36 Maak de registers en een stuk geheugen zichtbaar
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 37
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 38 -Doe twee stappen, -kijk in R1 waar in het geheugen getal_1 terecht is gekomen -Laat je geheugen venster daarheen wijzen
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 39 Doen – thuis lezen lees 3.1 t/m blz t/m blz 58 halverwege
VPEMSY1, D3ECPT2, DU1EMSY1 : ARM Assemblerhttp:// Hogeschool Utrecht / Electrical Engineering & Design 40 Doen - hier oefenen 1.Schrijf en test een programma dat de waarden in R0 en R1 verwisselt. Je hebt een extra register nodig. 2.Schrijf en test een programma dat de waarden in de geheugenlocaties X en Y optelt, en het resultaat in geheugenlocatie Z zet. 3.Schrijf en test een programma dat de waarden in de geheugenlocaties LABEL1 en LABEL2 verwisselt. Let goed op het verschil tussen een label en de inhoud van het geheugen op de plek van dat label.