Zhen Liu
/
HW1_extraB
Extra problem 2 for HW 1
Revision 0:9b0b3bdf816e, committed 2015-02-18
- Comitter:
- lzzcd001
- Date:
- Wed Feb 18 14:48:30 2015 +0000
- Commit message:
- Extra problem 2 for HW 1
Changed in this revision
diff -r 000000000000 -r 9b0b3bdf816e main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Feb 18 14:48:30 2015 +0000 @@ -0,0 +1,20 @@ +#include "mbed.h" +// This program will blink LED1 and LED4 +// using assembly language for LED1 and +// API functions for LED4 +// declare external assembly language function (in a *.s file) +extern "C" int my_asm(); +// declare LED outputs – let C set them up as output bits +DigitalIn sw(p5); +DigitalOut led(p10); +DigitalOut myled1(LED1); +DigitalOut myled4(LED4); + +int main() { + // loop forever + while(1) { + //call assembly language function to control LED1 + my_asm(); + wait(0.2); + } +} \ No newline at end of file
diff -r 000000000000 -r 9b0b3bdf816e mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Feb 18 14:48:30 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/4fc01daae5a5 \ No newline at end of file
diff -r 000000000000 -r 9b0b3bdf816e my_asm.s --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/my_asm.s Wed Feb 18 14:48:30 2015 +0000 @@ -0,0 +1,35 @@ + AREA asm_func, CODE, READONLY +; Export my_asm function location so that C compiler can find it and link + EXPORT my_asm +my_asm +; +; ARM Assembly language function to set LED1 bit to a value passed from C +; LED1 gets value (passed from C compiler in R0) +; LED1 is on GPIO port 1 bit 18 +; See Chapter 9 in the LPC1768 User Manual +; for all of the GPIO register info and addresses +; Pinnames.h has the mbed modules pin port and bit connections +; + + +; Load GPIO Port 0 base address in register R1 + LDR R1, =0x2009C000 ; 0x2009C000 = GPIO port 0 base address +; Load input + LDR R3, [R1, #0x14] + AND R3, #0x0200 + +; Load GPIO Port 0 base address in register R1 + LDR R1, =0x2009C000 ; 0x2009C000 = GPIO port 0 base address +; Move bit mask in register R2 for bit 1 only + MOV.W R2, #0x000002 ; 0x000002 = 1<<1 all "0"s with a "1" in bit 1 +; value passed from C compiler code is in R0 - compare to a "0" + CMP R3, #0 ; value == 0 ? +; (If-Then-Else) on next two instructions using equal cond from the zero flag + ITE EQ +; STORE if EQ - clear led 1 port bit using GPIO FIOCLR register and mask + STREQ R2, [R1,#0x1C] ; if==0, clear LED1 bit +; STORE if NE - set led 1 port bit using GPIO FIOSET register and mask + STRNE R2, [R1,#0x18] ; if==1, set LED1 bit +; Return to C using link register (Branch indirect using LR - a return) + BX LR + END \ No newline at end of file