I am using Timer3 as code posted below. I call startCounting() before a task
executes and I call stopCounting after task executes.
But, I am getting variable result. Is there any mistake in my code or somebody
can provide code performing similar job.
And, it is Atmega128 specific.
#include "printf.h"
uint16_t coarseValues;
uint16_t fineValues;
uint16_t COARSECOMPARE = 0x7FFF;
uint16_t fineOffset = 0x000E;
uint16_t coarseOffset = 0x0021;
uint16_t coarseWasCalled = 0;
module ClockCount
{
provides
{
interface TaskCount as TC;
}
uses interface HplAtm128Compare<uint16_t>;
}
implementation
{
async event void HplAtm128Compare.fired()
{
TCCR3B = 0x00;
atomic coarseWasCalled++;
atomic coarseValues++;
TCNT3 = 0x0000; //Counter3 clear
TCCR3B = 0x09;
}
async command void TC.startCounting()
{
atomic coarseValues = 0;
atomic fineValues = 0;
//Actual Timer/Counter
TCNT3 = 0x0000;
//Set counter clear on match (Couter Control Registers)
TCCR3A = 0x80;
TCCR3B = 0x09;
//Interupt mask set (Extended Timer Interrupt Mask Register)
ETIMSK = 0x10;
//Compare values (Output Compare Register)
OCR3A = COARSECOMPARE;
}
void calculateFine()
{
uint16_t callOffset = (coarseWasCalled * coarseOffset)/COARSECOMPARE;
//Was Commented............
atomic coarseValues = coarseValues + callOffset;
if (coarseWasCalled)
{
atomic fineValues = TCNT3 - coarseOffset;
atomic coarseWasCalled = 0;
}
else
{
//there is a 13 overhead on running the counter
atomic fineValues = TCNT3 - fineOffset;
}
}
async command void TC.stopCounting()
{
TCCR3B = 0x00;
calculateFine();
}
command unsigned int TC.getCoarseValue() {atomic return coarseValues;}
command unsigned int TC.getFineValue() {atomic return fineValues; }
command void TC.setCoarseCompare(uint16_t newCompare)
{
COARSECOMPARE = newCompare;
OCR3A = newCompare;
}
command void TC.setFineOffset(uint16_t off)
{
atomic fineOffset = off;
}
command void TC.setCoarseOffset(uint16_t off)
{
atomic coarseOffset = off;
}
command void TC.sendValuesToScreen()
{
printf("Fine Value is %u:\n", fineValues);
printf("Coarse Value is %u:\n", coarseValues);
printfflush();
}
}
Sobit B. Thapa
Graduate Research Assistant
Department of Computer Science
Texas State University, San Marcos
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help