#include "lcddisplay.h" #include "delay.h" #include "ece_types.h" #include "hc11_regs.h" #include "interrupt.h" void TOFhandler(void)__attribute__((interrupt)); void IC3handler(void)__attribute__((interrupt)); volatile unsigned char *LED = (unsigned char*)0x1404; volatile uint16 flipcount = 0; void putBack(char ch); void counterWrite(); const int SIZE = 10; uint32 edgeCounter = 0; uint32 timestamps[SIZE]; volatile unsigned int read; volatile unsigned int write; int main(void) { Interrupt_SetVector(INTER_TIMER_OVER,(unsigned int)TOFhandler); Interrupt_SetVector(INTER_TIC3,(unsigned int)IC3handler); hc11_regs[TMSK1] = 0x01; hc11_regs[TCTL2] = 0x03; hc11_regs[TMSK2] = 0x80; EnableInterrupts(); read = write = 0; LCD_Init(); char * line = "Lab 5 - Part 2"; LCD_Print(0,0,line,14); char * zero = "0000000000"; LCD_Print(1,0,zero,10); char * greetings = "ECE 3534 Lab 5: Part 2\r\n"; for(int i = 0; i < 24; i++) putBack(greetings[i]); while(true) { if(read == write){} else { counterWrite(); // *LED = 0xFF; char result; uint32 test = timestamps[read]; test = test/2; uint32 number = 1000000000; while(number >= 1) { result = '0'; while(test >= number) { test = test - number; result++; } putBack(result); number = number / 10; } putBack('u'); putBack('s'); putBack('\r'); putBack('\n'); read = read + 1; if(read > SIZE-1) read = 0; } } return 0; } void IC3handler(void) { uint32 temp = Combine16(flipcount,Read16Reg(TIC3H)); timestamps[write] = temp; write = write + 1; *LED = 0xff; DelayXms(100); *LED = 0x00; if(write > SIZE-1); write = 0; hc11_regs[TFLG1] = 0x01; } void counterWrite() { uint32 number = 1000000000; char temp; char * writer; int count = 0; edgeCounter = edgeCounter + 1; uint32 test = edgeCounter; while(number >= 1) { temp = '0'; while(test >= number) { test = test - number; temp = temp + 1; } *writer = temp; LCD_Print(1,count,writer,1); count++; number = number / 10; } } void putBack(char ch) { while((hc11_regs[SCSR] & 0x80) != 0x80) {} hc11_regs[SCDR] = ch; } void TOFhandler(void) { flipcount++; hc11_regs[TFLG2] = 0x80; }