New
Revision 0:168c04989363, committed 2013-11-11
- Comitter:
- ndiaz6
- Date:
- Mon Nov 11 18:34:01 2013 +0000
- Commit message:
- Yes;
Changed in this revision
diff -r 000000000000 -r 168c04989363 dig_out.s --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dig_out.s Mon Nov 11 18:34:01 2013 +0000 @@ -0,0 +1,329 @@ + AREA dig_out, CODE, READONLY +;--------------------OVERVIEW------------------------ +; This file contains ARM Assembly language functions to set +; designated pins to General Purpose Output. It uses +; the PINSELx Register to Set the Pin Function to GPIO. +; Then, it uses the FIOxDIR register to set the +; direction of the pin to output. It also contains functions +; to write a digital HIGH or LOW to these output pins. It uses +; the FIOxCLR AND FIOxSET registers to clear/set the +; port bits respectively. Refer to the Pinnames.h +; file to see which LPC1768 pins a given mbed module is +; connected to. Then, refer to Chapters 8 and 9 of the +; LPC1768 User Manual to acquire information on the GPIO +; registers and their addresses. +; +; Example: +; LED1 is on GPIO port 1 bit 18 according to Pinnames.h +; For this bit: -the PINSEL3 register determines its pin function +; -the FIO1DIR register determines its pin direction +; According to the LPC1768 User Manual: -PINSEL3 is located at 0x4002C00C +; -FIO1DIR is located at 0x2009C020 +; Now refer to the dig_out_LED1 function below to see the execution +;------------------------------------------------------ +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT dig_out_LED1 +dig_out_LED1 +;========dig_out_LED1======== +; LED1 LOCATED AT PORT-1 PIN-18 + LDR R0, =0x4002C00C ; LOAD ADDRESS OF PINSEL3 REGISTER + MOV.W R1, #0x00040000 ; MOVE BIT MASK (FOR BIT 18) INTO TEMP REGISTER (0x40000 = 0x01 << 18) +; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER + LDR R2, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR REGISTER + MOV R3, #0x30 ; FORM BITMASK FOR PINSEL3 REGISTER (clear appropriate bits) + B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT LED1_write +LED1_write +;========LED1_write========= +; LED1 LOCATED AT PORT-1 PIN-18 + LDR R1, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR (PORT 1 BASE REGISTER) + MOV.W R2, #0x040000 ; MOVE BIT MASK (FOR BIT 18) INTO TEMP REGISTER (0x40000 = 0x01 << 18) + B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT dig_out_LED2 +dig_out_LED2 +;========dig_out_LED2======== +; LED2 LOCATED AT PORT-1 PIN-20 + LDR R0, =0x4002C00C ; LOAD ADDRESS OF PINSEL3 REGISTER + LDR R1, =0x00100000 ; MOVE BIT MASK (FOR BIT 20) INTO TEMP REGISTER (0x100000 = 0x01 << 20) + LDR R2, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR REGISTER + MOV.W R3, #0x300 ; FORM BITMASK FOR PINSEL3 REGISTER (clear appropriate bits) +; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER + B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT LED2_write +LED2_write +;========LED2_write========= +; LED2 LOCATED AT PORT-1 PIN-20 + LDR R1, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR (PORT 1 BASE REGISTER) + LDR R2, =0x0100000 ; MOVE BIT MASK (FOR BIT 20) INTO TEMP REGISTER (0x100000 = 0x01 << 20) + B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT dig_out_LED3 +dig_out_LED3 +;========dig_out_LED3======== +; LED3 LOCATED AT PORT-1 PIN-21 + LDR R0, =0x4002C00C ; LOAD ADDRESS OF PINSEL3 REGISTER + LDR R1, =0x00200000 ; MOVE BIT MASK (FOR BIT 21) INTO TEMP REGISTER (0x200000 = 0x01 << 21) + LDR R2, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR REGISTER + MOV.W R3, #0xC00 ; FORM BITMASK FOR PINSEL3 REGISTER (clear appropriate bits) +; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER + B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT LED3_write +LED3_write +;========LED3_write========= +; LED3 LOCATED AT PORT-1 PIN-21 + LDR R1, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR (PORT 1 BASE REGISTER) + LDR R2, =0x0200000 ; MOVE BIT MASK (FOR BIT 21) INTO TEMP REGISTER (0x200000 = 0x01 << 21) + B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT dig_out_LED4 +dig_out_LED4 +;========dig_out_LED4======== +; LED4 LOCATED AT PORT-1 PIN-23 + LDR R0, =0x4002C00C ; LOAD ADDRESS OF PINSEL3 REGISTER + LDR R1, =0x00800000 ; MOVE BIT MASK (FOR BIT 23) INTO TEMP REGISTER (0x800000 = 0x01 << 23) + LDR R2, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR REGISTER + MOV.W R3, #0xC000 ; FORM BITMASK FOR PINSEL3 REGISTER (clear appropriate bits) +; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER + B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT LED4_write +LED4_write +;========LED4_write========= +; LED4 LOCATED AT PORT-1 PIN-23 + LDR R1, =0x2009C020 ; LOAD ADDRESS OF FIO1DIR (PORT 1 BASE REGISTER) + LDR R2, =0x0800000 ; MOVE BIT MASK (FOR BIT 21) INTO TEMP REGISTER (0x800000 = 0x01 << 23) + B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT dig_out_P11 +dig_out_P11 +;========dig_out_P11======== +; P11 LOCATED AT PORT-0 PIN-18 + LDR R0, =0x4002C004 ; LOAD ADDRESS OF PINSEL1 REGISTER + MOV.W R1, #0x00040000 ; MOVE BIT MASK (FOR BIT 18) INTO TEMP REGISTER (0x40000 = 0x01 << 18) +; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER + LDR R2, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 REGISTER + MOV R3, #0x30 ; FORM BITMASK FOR PINSEL1 REGISTER (clear appropriate bits) + B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT P11_write +P11_write +;========P11_write========= +; P11 LOCATED AT PORT-0 PIN-18 + LDR R1, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 (PORT 0 BASE REGISTER) + MOV.W R2, #0x040000 ; MOVE BIT MASK (FOR BIT 18) INTO TEMP REGISTER (0x40000 = 0x01 << 18) + B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT dig_out_P12 +dig_out_P12 +;========dig_out_P12======== +; P12 LOCATED AT PORT-0 PIN-17 + LDR R0, =0x4002C004; + MOV.W R1, #0x020000; + ; + LDR R2, =0x2009C000; + MOV R3, #0xC + B dig_out_exec ; * REPLACE THIS INSTRUCTION WITH CORRECT CODE +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT P12_write +P12_write +;========P12_write========= +; P12 LOCATED AT PORT-0 PIN-17 + LDR R1, =0x2009C000; + MOV.W R2, #0x020000; + B write_exec ; * REPLACE THIS INSTRUCTION WITH CORRECT CODE +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT dig_out_P13 +dig_out_P13 +;========dig_out_P13======== +; P13 LOCATED AT PORT-0 PIN-15 + LDR R0, =0x4002C000 ; LOAD ADDRESS OF PINSEL0 REGISTER + MOV.W R1, #0x00008000 ; MOVE BIT MASK (FOR BIT 15) INTO TEMP REGISTER (0x08000 = 0x01 << 15) +; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER + LDR R2, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 REGISTER + LDR R3, =0x70000000 ; FORM BITMASK FOR PINSEL0 REGISTER (clear appropriate bits) + B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT P13_write +P13_write +;========P13_write========= +; P13 LOCATED AT PORT-0 PIN-15 + LDR R1, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 (PORT 0 BASE REGISTER) + MOV.W R2, #0x008000 ; MOVE BIT MASK (FOR BIT 15) INTO TEMP REGISTER (0x08000 = 0x01 << 15) + B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT dig_out_P14 +dig_out_P14 +;========dig_out_P14======== +; P14 LOCATED AT PORT-0 PIN-16 + LDR R0, =0x4002C004 ; LOAD ADDRESS OF PINSEL1 REGISTER + MOV.W R1, #0x00010000 ; MOVE BIT MASK (FOR BIT 16) INTO TEMP REGISTER (0x10000 = 0x01 << 16) +; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER + LDR R2, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 REGISTER + MOV R3, #0x03 ; FORM BITMASK FOR PINSEL0 REGISTER (clear appropriate bits) + B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT P14_write +P14_write +;========P14_write========= +; P14 LOCATED AT PORT-0 PIN-16 + LDR R1, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 (PORT 0 BASE REGISTER) + MOV.W R2, #0x010000 ; MOVE BIT MASK (FOR BIT 16) INTO TEMP REGISTER (0x10000 = 0x01 << 16) + B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT dig_out_P15 +dig_out_P15 +;========dig_out_P15======== +; P15 LOCATED AT PORT-0 PIN-23 + LDR R0, =0x4002C004 ; LOAD ADDRESS OF PINSEL1 REGISTER + LDR R1, =0x00800000 ; MOVE BIT MASK (FOR BIT 23) INTO TEMP REGISTER (0x800000 = 0x01 << 23) + LDR R2, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 REGISTER + MOV.W R3, #0x7000 ; FORM BITMASK FOR PINSEL1 REGISTER (clear appropriate bits) +; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER + B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT P15_write +P15_write +;========P15_write========= +; P15 LOCATED AT PORT-0 PIN-23 + LDR R1, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 (PORT 0 BASE REGISTER) + MOV.W R2, #0x0800000 ; MOVE BIT MASK (FOR BIT 23) INTO TEMP REGISTER (0x800000 = 0x01 << 23) + B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT dig_out_P16 +dig_out_P16 +;========dig_out_P16======== +; P16 LOCATED AT PORT-0 PIN-24 + LDR R0, =0x4002C004 ; LOAD ADDRESS OF PINSEL1 REGISTER + LDR R1, =0x01000000 ; MOVE BIT MASK (FOR BIT 24) INTO TEMP REGISTER (0x1000000 = 0x01 << 24) + LDR R2, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 REGISTER + MOV.W R3, #0x30000 ; FORM BITMASK FOR PINSEL1 REGISTER (clear appropriate bits) +; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER + B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT P16_write +P16_write +;========P16_write========= +; P16 LOCATED AT PORT-0 PIN-24 + LDR R1, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 (PORT 0 BASE REGISTER) + MOV.W R2, #0x1000000 ; MOVE BIT MASK (FOR BIT 23) INTO TEMP REGISTER (0x1000000 = 0x01 << 24) + B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT dig_out_P17 +dig_out_P17 +;========dig_out_P17======== +; P17 LOCATED AT PORT-0 PIN-25 + LDR R0, =0x4002C004 ; LOAD ADDRESS OF PINSEL1 REGISTER + LDR R1, =0x02000000 ; MOVE BIT MASK (FOR BIT 25) INTO TEMP REGISTER (0x1000000 = 0x01 << 25) + LDR R2, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 REGISTER + MOV.W R3, #0xC0000 ; FORM BITMASK FOR PINSEL1 REGISTER (clear appropriate bits) +; ; NOTE: THE ABOVE IS A 32-BIT INSTRUCTION BC OF ".W" QUALIFIER + B dig_out_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +; EXPORT FUNCTION LOCATION SO THAT C-COMPILER CAN LINK + EXPORT P17_write +P17_write +;========P17_write========= +; P17 LOCATED AT PORT-0 PIN-25 + LDR R1, =0x2009C000 ; LOAD ADDRESS OF FIO0DIR0 (PORT 0 BASE REGISTER) + MOV.W R2, #0x2000000 ; MOVE BIT MASK (FOR BIT 24) INTO TEMP REGISTER (0x1000000 = 0x01 << 25) + B write_exec ; CALL SUBROUTINE TO EXECUTE YOUR CHANGES +; +; +; +dig_out_exec +;========dig_out_execution======== +; SET PIN FUNCTION TO GPIO + LDR R4, [R0] ; \ + BIC R4, R3 ; - APPLY BITMASK FOR PINSELx REGISTER (clear appropriate bits) + STR R4, [R0] ; STORE BITMASK IN PINSELx REGISTER +; +; SET UP GPIO PORT FOR OUTPUT DIRECTION (WITH SPECIFIED BITMASK IN REGISTER R2) + LDR R6, [R2] ; \ + ORR R6, R1 ; - ACQUIRE BITMASK FOR FIOxDIR REGISTER (1 = Output) + STR R6, [R2] ; STORE BITMASK IN FIOxDIR REGISTER +; +;RETURN TO MAIN + BX LR ; RETURN TO MAIN USING LINKER REGISTER +; +; +; +write_exec +;========write_execution========= +; CLEAR/SET BASED ON INPUT VALUE + CMP R0, #0 ; VALUE == 0 ? + ITE EQ ; (IF-THEN-ELSE) ON NEXT TWO INSTRUCTIONS USING "EQ" FLAG + STREQ R2, [R1,#0x1C] ; if==0, CLEAR LED1 BIT + STRNE R2, [R1,#0x18] ; if==1, SET LED1 BIT +; +; RETURN TO MAIN + BX LR ; RETURN TO MAIN USING LINKER REGISTER +; +; +; + END
diff -r 000000000000 -r 168c04989363 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Nov 11 18:34:01 2013 +0000 @@ -0,0 +1,422 @@ +/********************************** + * Author: Seungcheol Baek + * Institution: Georgia Tech + * + * Title: MAIN + * Class: ECE2035 + * Assignment: Project 2 + **********************************/ + +//includes +#include <string.h> +#include <stdio.h> +#include <math.h> +#include <cstdarg> +#include "mbed.h" +#include "rtos.h" +#include "TextLCD.h" +#include "SDFileSystem.h" +#include "CommModule.h" +#include "wave_player.h" +#include "FATFileSystem.h" + +//defines +#define BAUDRATE 9600 +#define BUFFSIZE 100 +#define GRAVITY 1.0 +#define PHIGH 10 // NEW +#define PLOW 5 // NEW +#define PI 3.141592653589793238462643f +#define BOMB_WAVFILE "/sd/wavfiles/bomb.wav" +#define MONKEY_WAVFILE "/sd/wavfiles/monkey.wav" +#define ACK "status-ack" + +//function prototypes +int invert(int value); +void print(const char *format, ...); +void lowerCase(char *src); +void startGame(void); +void waitForAck(void); +void playBombSound(void); +void playMonkeySound(void); +void pb1_hit_callback(void); +void pb2_hit_callback(void); +void pb3_hit_callback(void); +void pb4_hit_callback(void); +void getworld (int**world, char *World); +void updateShot(int row, int column, int del); +void colorTile(int row, int column, int strength); +void deleteTile(int row, int column); +void paaUpdate(int power, int angle); +void hint(int row, int column, int power, int angle); + +//declare functions (assembly subroutines) +extern "C" void setup_sequence(void); +extern "C" void seg_driver_initialize(void); +extern "C" void seg_driver(int value); + +//initialize hardware +SDFileSystem sd(p5, p6, p7, p8, "sd"); // mosi, miso, sck, cs +TextLCD lcd(p26, p25, p24, p23, p22, p21); // rs, e, d4-d7 +AnalogOut DACout(p18); +wave_player waver(&DACout); +DigitalIn pb1(p30); +DigitalIn pb2(p29); +DigitalIn pb3(p28); +DigitalIn pb4(p27); + +//communication device +commSerial serDevice(USBTX, USBRX, BAUDRATE); //tx, rx + +// Global variables for push buttons +char volatile power=PHIGH, angle=45, fire; // NEW + +//main +int main() { + //initialize and clear 7-Segment Display (assembly subroutine) + setup_sequence(); + seg_driver_initialize(); + seg_driver(0); + + // Use internal pullups for pushbuttons + pb1.mode(PullUp); + pb2.mode(PullUp); + pb3.mode(PullUp); + pb4.mode(PullUp); + + //variables + char World[10000]; + + //check for wav file + lcd.cls(); + lcd.printf("Locating WAV file..."); + FILE *test_file; + while(1) { + test_file=fopen(BOMB_WAVFILE,"r"); + if(test_file != NULL) {break;} + wait(0.5); + } + fclose(test_file); + while(1) { + test_file=fopen(MONKEY_WAVFILE,"r"); + if(test_file != NULL) {break;} + wait(0.5); + } + fclose(test_file); + + //notification + lcd.cls(); + lcd.printf("Angry Monkeys"); + wait(1); + + + /******** HW 3 *********/ + + /** HW3.A During the check off, You should show the seg_driver is working correctly **/ + int i; + for(i=0;i<10;i++){ + seg_driver(i); + wait(0.3); + } + + /** HW3.B During the check off, You should show the pushbuttons are debounced **/ + + //temp variables + int num_cannon=30, val1, val2, val3, val4; + + fire=0; //pb4 is set to fire + lcd.cls(); + while(fire<9){ + + /**** BEGIN - your code goes here for HW3.B ****/ + + //read inputs + val1 = invert(pb1.read()); + val2 = invert(pb2.read()); + val3 = invert(pb3.read()); + val4 = invert(pb4.read()); + + if(val1){ + pb1_hit_callback(); //power + } + if(val2){ + pb2_hit_callback(); //angle + } + if(val3){ + pb3_hit_callback(); //angle + } + if(val4){ + pb4_hit_callback(); //fire + } + + if (val1||val2||val3||val4){ + wait(.2); + } + /**** END - your code stops here ****/ + + //print lcd + lcd.cls(); + lcd.printf("Left cannon:%d\n", num_cannon); + if(power==PHIGH) // NEW + lcd.printf("Angle:%d PHIGH", angle); // NEW + else // NEW + lcd.printf("Angle:%d PLOW", angle); // NEW + + wait(0.02); // NEW + + } + + /******** HW 3 END*********/ + /** Note that you can use the HW3 for the Project 2 by moving it to the appropriate place in the Project 2. + If you do not want to use HW3 for the Project 2, then you can simply remove it after check off. **/ + + + /******** Project 2 *********/ + //loop + while(1) { + + //synchronize front end display + startGame(); + + //receive World + serDevice.receiveData(World); + wait(1); + + //get world that will be used for your work + int *world; + getworld(&world, World); + + /**** BEGIN - your code goes here for project 2 ****/ + + //debug statements + print("testing"); + print("string1: %s\nstring2: %s", "hello", "world"); + print("int: %d, int: %d", world[2], world[3]); + + //Just for test... + for(i=1;i<10;i++){ + updateShot(i-1,i,0); + wait(1); + } + + playBombSound(); + playMonkeySound(); + + for(i=0;i<5;i++){ + deleteTile(world[4*i+2],world[4*i+3]); + wait(1); + } + //Just for test ends... + + + //have fun... + + /**** END - your code stops here ****/ + free(world); + } + //end loop +} + +//fcn to send update +void updateShot(int row, int column, int del){ + //temp variables + char buffer[BUFFSIZE]; + + //construct message + sprintf(buffer, "%s-%d-%d-%d;", "update", row, column, del); + + //send message + serDevice.sendData(buffer); +} + +//fcn to send color +void colorTile(int row, int column, int strength){ + //temp variables + char buffer[BUFFSIZE]; + + //construct message + sprintf(buffer, "%s-%d-%d-%d;", "color", row, column, strength); + + //send message + serDevice.sendData(buffer); +} + +//fcn to send delete +void deleteTile(int row, int column){ + //temp variables + char buffer[BUFFSIZE]; + + //construct message + sprintf(buffer, "%s-%d-%d;", "delete", row, column); + + //send message + serDevice.sendData(buffer); +} + +//fcn to send power and angle +void paaUpdate(int power, int angle){ + //temp variables + char buffer[BUFFSIZE]; + + //construct message + sprintf(buffer, "%s-%d-%d;", "paa", power, angle); + + //send message + serDevice.sendData(buffer); +} + +//fcn to send hint +void hint(int row, int column, int power, int angle){ + //temp variables + char buffer[BUFFSIZE]; + + //construct message + sprintf(buffer, "%s-%d-%d-%d-%d;", "hint", row, column, power, angle); + + //send message + serDevice.sendData(buffer); +} + +//fcn to get acknowledgement from serial peripheral +void waitForAck(void) { + //get acknowlegement + char buffer[BUFFSIZE]; + while(1) { + serDevice.receiveData(buffer); + lowerCase(buffer); + if(strcmp(ACK, buffer) == 0) { + break; + } + memset(&buffer[0],0,strlen(buffer)); + } + return; +} + +//fcn to initialize the frontend display +void startGame(void) { + //temp variables + char buffer[BUFFSIZE]; + + //construct message + sprintf(buffer, "start"); + + //send message + serDevice.sendData(buffer); + + //wait for acknowledgement + waitForAck(); +} + +//fcn to play bomb noise +void playBombSound(void) { + //open wav file + FILE *wave_file; + wave_file=fopen(BOMB_WAVFILE,"r"); + + //play wav file + waver.play(wave_file); + + //close wav file + fclose(wave_file); +} + +//fcn to play bomb noise +void playMonkeySound(void) { + //open wav file + FILE *wave_file; + wave_file=fopen(MONKEY_WAVFILE,"r"); + + //play wav file + waver.play(wave_file); + + //close wav file + fclose(wave_file); +} + +//fcn to print to console +void print(const char *format, ...) { + //temp variables + char buffer[BUFFSIZE]; + char temp[BUFFSIZE-6]; + + //construct message part 1 + sprintf(buffer, "print-"); + + //construct message part 2 + va_list arguments; + va_start(arguments, format); + vsnprintf(temp, BUFFSIZE-7, format, arguments); + va_end(arguments); + + //concatenate parts + strcat(buffer, temp); + + //send message + serDevice.sendData(buffer); + + //wait for acknowledgement + waitForAck(); +} + +//fcn to convert string to lowercase +void lowerCase(char *src) { + int i=0;; + while(src[i] != '\0') { + if((src[i] > 64) && (src[i] < 91)) { + src[i]+=32; + } + i++; + } + return; +} + +//function to perform bitwise inversion +int invert(int value) { + if (value == 0) { + return 1; + } else { + return 0; + } +} + +// Callback routine is interrupt activated by a debounced pb hit +void pb1_hit_callback (void) { + if(power==PHIGH) // NEW + power=PLOW; // NEW + else // NEW + power=PHIGH; // NEW +} +void pb2_hit_callback (void) { + if(angle<90) + angle++; + else if(angle>=90) + angle=0; +} +void pb3_hit_callback (void) { + if(angle>0) + angle--; + else if(angle<=0) + angle=90; +} +void pb4_hit_callback (void) { + fire++; +} + +//func. to get world +void getworld (int**world, char *World){ + int i; + char temp[3]; + + //allocate world + *world = (int*)malloc(sizeof(int)*(((World[2]<<8)+World[3])*4+2)); + + //get it + (*world)[0]=(World[0]<<8)+World[1]; + (*world)[1]=(World[2]<<8)+World[3]; + for(i=0;i<((*world)[1]*4);i++){ + temp[0] = World[(2*i)+4]; + temp[1] = World[(2*i)+5]; + temp[2] = '\0'; + sscanf(temp, "%d", &((*world)[i+2])); + } +}
diff -r 000000000000 -r 168c04989363 segment_driver.s --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/segment_driver.s Mon Nov 11 18:34:01 2013 +0000 @@ -0,0 +1,183 @@ + AREA segment_driver, CODE, READONLY +;--------------------OVERVIEW------------------------ +; This file contains ARM Assembly language functions to +; drive a 7-segment LED Display (Kingbright SA03-11HDB). +; This library uses a switch statement on the input +; register (R0) to set or clear each corresponding lead +; of the display. NOTE: The 7 Segments of the LED display +; must be connected to pins p11 - p17 of the mbed digital +; I/O. For further help with understanding this file, +; please refer to files: +; dig_in.s +; dig_out.s +;------------------------------------------------------ +; Import function locations so that C compiler can find it and link + IMPORT dig_out_P11 + IMPORT P11_write + IMPORT dig_out_P12 + IMPORT P12_write + IMPORT dig_out_P13 + IMPORT P13_write + IMPORT dig_out_P14 + IMPORT P14_write + IMPORT dig_out_P15 + IMPORT P15_write + IMPORT dig_out_P16 + IMPORT P16_write + IMPORT dig_out_P17 + IMPORT P17_write +; Export function location so that C compiler can find it and link + EXPORT seg_driver_initialize +seg_driver_initialize ;CLEAR DISPLAY + PUSH {LR} + BL dig_out_P11 + BL dig_out_P12 + BL dig_out_P13 + BL dig_out_P14 + BL dig_out_P15 + BL dig_out_P16 + BL dig_out_P17 + MOV R0,#1 + BL P11_write + BL P12_write + BL P13_write + BL P14_write + BL P15_write + BL P16_write + BL P17_write + POP {LR} + BX LR + +; Export function location so that C compiler can find it and link + EXPORT seg_driver +seg_driver ;SWITCH STATEMENT + PUSH {LR} + ADR R2,switchpool + LDR PC,[R2,R0,LSL #2] + ALIGN +switchpool + DCD case0 + DCD case1 + DCD case2 + DCD case3 + DCD case4 + DCD case5 + DCD case6 + DCD case7 + DCD case8 + DCD case9 +case0 + MOV R0,#0 + BL P11_write + BL P12_write + BL P13_write + BL P14_write + BL P15_write + BL P16_write + MOV R0,#1 + BL P17_write + B end +case1 + MOV R0,#0 + BL P12_write + BL P13_write + MOV R0,#1 + BL P11_write + BL P14_write + BL P15_write + BL P16_write + BL P17_write + B end +case2 + MOV R0,#0 + BL P11_write + BL P12_write + BL P14_write + BL P15_write + BL P17_write + MOV R0,#1 + BL P13_write + BL P16_write + B end +case3 + MOV R0,#0 + BL P11_write + BL P12_write + BL P13_write + BL P14_write + BL P17_write + MOV R0,#1 + BL P15_write + BL P16_write + B end +case4 + MOV R0,#0 + BL P12_write + BL P13_write + BL P16_write + BL P17_write + MOV R0,#1 + BL P11_write + BL P14_write + BL P15_write + B end +case5 + MOV R0,#0 + BL P11_write + BL P13_write + BL P14_write + BL P16_write + BL P17_write + MOV R0,#1 + BL P12_write + BL P15_write + B end +case6 + MOV R0,#0 + BL P11_write + BL P13_write + BL P14_write + BL P15_write + BL P16_write + BL P17_write + MOV R0,#1 + BL P12_write + B end +case7 + MOV R0,#0 + BL P11_write + BL P12_write + BL P13_write + MOV R0,#1 + BL P14_write + BL P15_write + BL P16_write + BL P17_write + B end +case8 + MOV R0,#0 + BL P11_write + BL P12_write + BL P13_write + BL P14_write + BL P15_write + BL P16_write + BL P17_write + B end +case9 + MOV R0,#0 + BL P11_write + BL P12_write + BL P13_write + BL P16_write + BL P17_write + MOV R0,#1 + BL P14_write + BL P15_write + B end +end + POP {LR} + BX LR +; + END + \ No newline at end of file