PEMSY1http:// 1 Herhaling: - ACPS - set status, conditioneel uitvoeren - indexed addressing Nieuw: - CMP, CMN - half-word and byte instructions - format 2 nd argument (operand 2) direct aansturen van I/O pinnen (programmed I/O) oefening: taa-tuu taa-tuu taa-tuu
PEMSY1http:// 2 ACPS = ARM Procedure Call Standard R0 – R3 : function arguments R0 (R1, R2, R3) : function result R4 - R8 : local scratch R9 : afblijven R10-11 : local scratch R13 : SP R14 : LR R15 : PC R0 – R3 are *not* preserved R4-R8, R10-R11 *are* preserved (boek p )
PEMSY1http:// 3 ADDR0, R1, tel op ADDS R0, R1, en zet status ADDEQ R0, R1, doe alleen als ‘EQ’ ADDSEQ R0, R1, combinatie
PEMSY1http:// 4 LDR R0, [ R1 ] LDR R0, [ R1 ], #4 LDR R0, [ R1, #4 ] LDR R0, [ R1, #4 ] !
PEMSY1http:// 5 (herhaling) 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
PEMSY1http:// 6 (herhaling) LDR R0, [ R1 ], #4 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
PEMSY1http:// 7 (herhaling) LDRH R0, [ R1, #4 ] 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
PEMSY1http:// 8 (herhaling) LDRH R0, [ R1, #4 ] ! 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
PEMSY1http:// 9 CMP R1, R2 CMP R1, #15 CMN R1, R2 CMN R1, #10 boek p52 bovenaan + 5.7
PEMSY1http:// 10 CMP R2, 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 - flags
PEMSY1http:// 11 CMN R1, #15 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 - flags -
PEMSY1http:// 12 Variaties op LDR R0, [ R1 ]: LDR R0, [ R1 word (32 bit) LDRH R0, [ R1 half-word (16 bit) LDRB R0, [ R1 byte (8 bit) - H of B komt achteraan, dus: LDREQB - Let op de alignment van het geheugen adres! - Kan net zo bij STR
PEMSY1http:// 13 MOV R0, R1 ADD R0, R1, #2 SUBC R0, R1, R2, LSL #5 ADDS R1, R2, R3, ASR R4 boek p
PEMSY1http:// 14
PEMSY1http:// 15 LPC2148 architectuur I/O pin function selection I/O pin direction selection I/O pin manipulation
PEMSY1http:// 16
PEMSY1http:// 17 User Manual P.7
PEMSY1http:// 18 User Manual P.8
PEMSY1http:// 19 User Manual P.26 LDR R0,=0 LDR R1,=SCS STR R0,[R1]
PEMSY1http:// 20 User Manual P.75
PEMSY1http:// 21 User Manual P.76
PEMSY1http:// 22 User Manual P.82
PEMSY1http:// 23 User Manual P.82
PEMSY1http:// 24 /* General Purpose IO 0 */ IO0PIN = 0xe IO0SET = 0xe IO0DIR = 0xe IO0CLR = 0xe002800c /* General Purpose IO 1 */ IO1PIN = 0xe IO1SET = 0xe IO1DIR = 0xe IO1CLR = 0xe002801c /* Pin Connect Block */ PINSEL0 = 0xe002c000 PINSEL1 = 0xe002c004 File (part of): lpc214x.inc Use: #include ”lpc214x.inc”
PEMSY1http:// 25 /* General Purpose IO 0 */ #define IO0PIN (*(volatile unsigned int *)(0xe )) #define IO0SET (*(volatile unsigned int *)(0xe )) #define IO0DIR (*(volatile unsigned int *)(0xe )) #define IO0CLR (*(volatile unsigned int *)(0xe002800c)) /* General Purpose IO 1 */ #define IO1PIN (*(volatile unsigned int *)(0xe )) #define IO1SET (*(volatile unsigned int *)(0xe )) #define IO1DIR (*(volatile unsigned int *)(0xe )) #define IO1CLR (*(volatile unsigned int *)(0xe002801c)) /* Pin Connect Block */ #define PINSEL0 (*(volatile unsigned int *)(0xe002c000)) #define PINSEL1 (*(volatile unsigned int *)(0xe002c004)) File (part of): lpc214x.h
PEMSY1http:// 26 (dit is code voor een LPC2106)
PEMSY1http:// 27 (dit is code voor een LPC2106)
PEMSY1http:// 28 Schrijf de subroutines (hou je aan de APCS!): LspInit - geen parameters - maakt de LSP pin een GPIO en output - blijft van de andere pinnen af! LspHigh - geen parameters - neemt aan dat LspInit al is aangeroepen - maakt de LSP pin hoog LspLow - geen parameters - neemt aan dat LspInit al is aangeroepen - maakt de LSP pin laag
PEMSY1http:// 29 Schrijf de subroutines (hou je aan de APCS!): LspBeep - R0 = duur van 1 periode in µs - R1 = aantal perioden - gebruikt LspHigh en LspLow Test deze functies door programma te schrijven dat (in een eeuwigdurende lus) het volgende doet: 1.Piep gedurende 1 seconde op 1 kHz seconde stilte 3.Piep gedurende 1 seconde op 2 kHz seconde stilte Ga uit van de hello.zip als startpunt, de LCD code kan je natuurlijk weglaten.