// Built with BFTC Rev. 1.0.0, lun 25 agosto 2014 17:00:44
/*
Copyright 2014 Digital Technology Art SRL
This file is part of Blackfin Toolchain (BFTC) project.
BFTC is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
BFTC is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Nome-Programma. If not, see <http://www.gnu.org/licenses/>.
*/
// Test of reflexes speed
// Connect on PG0 a switch in this mode:
// 10K Resistor
// Y14.1 ---+----[====]---+
// | |
// [-( BUTTON |
// | |
// Y12.4 ---+ +--- Y12.6
//
// Run the program and when the string START is displayed press the button
// at your maximum speed.
// Repeat the test for an average value.
//
#include "main.h"
#define ST st = Get_TimerCounter(TIMER_0)
#define ET et = Get_TimerCounter(TIMER_0)
#define TIMEBASE 0xFFFFFFFF
unsigned int st, et;
void display()
{
double tx;
if(st > et) tx = TIMEBASE - st + et;
else tx = et - st;
printf("Elapsed time: %10.3f ms\n", tx / 100000.0);
}
// Interrupt service procedure
//
void PortCallback()
{
ET;
display();
// Clear the interrupt request
*pPORTGIO_CLEAR = PG0;
}
unsigned randx(unsigned val)
{
return Get_TimerCounter(TIMER_0) * 0x1961957 + val;
}
int main(void)
{
Set_PLL(16, 4); // CORE: 25MHz * 16 = 400MHz, SCLK: 400MHz / 4 = 100MHz
Set_Port(); // Set the port according to project set
Set_Uart0(115200); // printf is redirected to UART0
// Set an interrupt on the rising edge of the PG0 port
Set_PortGInterruptService(PG0, PortCallback);
Set_PortGInterruptEnable(PG0, true);
Set_TimerCounter(TIMER_0);
Set_TimerEnable(TIMER_0, true);
while(1) // Main loop
{
printf("START!\n");
ST;
DelayUs(500000 + randx(et) % 1000000);
}
return 0;
}