All pastes #10690 Raw Edit

Miscellany

public text v1 · immutable
#10690 ·published 2005-04-30 23:25 UTC
rendered paste body
#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;
}