Moved remotely

git-svn-id: file:///srv/dev-disk-by-uuid-17e88007-4d0c-45e0-8757-cacfcc458630/repositories/svn/Diplomarbeit@110 9fe90eed-be63-e94b-8204-d34ff4c2ff93
This commit is contained in:
Matthias
2009-01-12 08:37:59 +00:00
parent 9acc85b348
commit a0ccd623c6
54 changed files with 0 additions and 0 deletions
@@ -0,0 +1,228 @@
/* ---------------------------------------------------------------------------
* testdio.c (c) 2008 Micro-key bv
* ---------------------------------------------------------------------------
* Micro-key bv
* Industrieweg 28, 9804 TG Noordhorn
* Postbus 92, 9800 AB Zuidhorn
* The Netherlands
* Tel: +31 594 503020
* Fax: +31 594 505825
* Email: support@microkey.nl
* Web: www.microkey.nl
* ---------------------------------------------------------------------------
* Description:
* Contains the digital Input/Output test Function
*
*
* ---------------------------------------------------------------------------
* Version(s): 0.1, Mar 06, 2008, MMi
* Creation.
* ---------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------
* System include files
* ---------------------------------------------------------------------------
*/
#include "LPC23xx.h"
#include "types.h"
/* FreeRTOS includes */
#include "FreeRTOS.h"
#include "task.h"
/* ---------------------------------------------------------------------------
* Application include files
* ---------------------------------------------------------------------------
*/
#include "dio.h"
#include "testdio.h"
#include "SerOut.h"
#include "ledfunctions.h"
#include "BusProtocol.h"
#include "protocolfunctions.h"
/* ---------------------------------------------------------------------------
* Local constant and macro definitions
* ---------------------------------------------------------------------------
*/
// \MARK NEW PINSETTINGS FOR TESTER (2)
#if (PINSET_TESTER == 2)
#define NumberOfDIOs 8
#else
#define NumberOfDIOs 11 /* Number of digital Inputs */
#endif
#define NumberOfDOs 8 /* Number of digital Outputs */
/* ---------------------------------------------------------------------------
* Global variable definitions
* ---------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------
* Local variable definitions
* ---------------------------------------------------------------------------
*/
/* ---------------------------------------------------------------------------
* Local function definitions
* ---------------------------------------------------------------------------
*/
BOOLEAN testdioStart (void)
{
BOOLEAN DIOTestResult;
BOOLEAN DIOTestResult_MB = FALSE;
BOOLEAN DIOTestResult_EB = FALSE;
DIOTestResult_MB = doDIOLineTest();
// \MARK NEW PINSETTINGS FOR TESTER (2)
#if (PINSET_TESTER == 2)
dio_inMuxEn();
/* Do digital line test for extension Board Connectors */
DIOTestResult_EB = doDIOLineTest();
dio_outMuxEn();
#endif
if ((DIOTestResult_MB == TRUE)
// \MARK NEW PINSETTINGS FOR TESTER (2)
#if (PINSET_TESTER == 2)
&& (DIOTestResult_EB == TRUE)
#endif
)
{
DIOTestResult = TRUE;
}
else
{
DIOTestResult = FALSE;
}
return (DIOTestResult);
}
BOOLEAN doDIOLineTest (void)
{
UINT32 diocnt = 0;
BOOLEAN LineTestResult = FALSE;
BOOLEAN LowTest = TRUE;
BOOLEAN AllOther = TRUE;
BOOLEAN HighTest = TRUE;
BOOLEAN LowBuffer;
BOOLEAN AllOtherBuffer;
BOOLEAN HighBuffer;
dioClean();
vTaskDelay (100);
for (diocnt = 0; diocnt < NumberOfDIOs; diocnt++)
{
/* Read LOW Value on selected Digital Input and set Read Result */
if ((LowBuffer = !dioRead (thisDeviceNumber, diocnt)) == FALSE)
{ /* LowBuffer contains Read Result */
LowTest = FALSE;
}
/* Drive selected Digital Output to HIGH. */
if (diocnt >= NumberOfDOs)
{
dioWrite (thisDeviceNumber, (diocnt - NumberOfDOs), TRUE);
}
else /* if selected Input is > possible */
{ /* Outputs, restart at Output 0 */
dioWrite (thisDeviceNumber, diocnt, TRUE);
}
vTaskDelay (50); /* small Delay */
/* Check if all Lines but the selected one are LOW */
if ((AllOtherBuffer = CheckAllOtherDIOZero(diocnt, TRUE)) == FALSE)
{
AllOther = FALSE;
}
/* Read HIGH Value on selected Digital Input and set Read Result */
if ((HighBuffer = dioRead (thisDeviceNumber, diocnt)) == FALSE)
{
HighTest = FALSE;
}
/* Set selected digital Input back to LOW */
if (diocnt >= NumberOfDOs)
{
dioWrite (thisDeviceNumber, (diocnt - NumberOfDOs), FALSE);
}
else /* if selected Input is > possible */
{ /* Outputs, restart at Output 0 */
dioWrite (thisDeviceNumber, diocnt, FALSE);
}
/* Message out Test Results */
sendString (SerOutPort, TRUE, testMessage,
"\tLinetest for Digital Input ", ItoDStr(diocnt), ": ");
sendString (SerOutPort, FALSE, testMessage,
" ", Dummy, BoolRestoStr (LowBuffer));
sendString (SerOutPort, FALSE, testMessage,
" ", Dummy, BoolRestoStr (AllOtherBuffer));
sendString (SerOutPort, FALSE, testMessage,
" ", Dummy, BoolRestoStr (HighBuffer));
vTaskDelay (50);
}
/* Set complete LineTestResult */
if ((LowTest == TRUE) && (HighTest == TRUE) && (AllOther == TRUE))
{
LineTestResult = TRUE;
}
else
{
LineTestResult = FALSE;
}
return (LineTestResult);
}
BOOLEAN CheckAllOtherDIOZero (UINT32 DIONumber, BOOLEAN local)
{
UINT32 loopcnt = 0;
BOOLEAN allZeroResult = TRUE;
for (loopcnt = 0; loopcnt < NumberOfDIOs; loopcnt++) /*Test Line by Line*/
{
if ((loopcnt == DIONumber) || /* except currently tested Input */
(loopcnt == (DIONumber + NumberOfDOs)) ||
(loopcnt == (DIONumber - NumberOfDOs)))
{
if (loopcnt < (NumberOfDIOs - 1))
{
loopcnt++; /* Skip currently tested Input */
}
else
{
break; /* If currently tested Input is the */
} /* last one, simply break out */
}
if (local == TRUE)
{
if (dioRead (thisDeviceNumber, loopcnt) == TRUE)
{
allZeroResult = FALSE;
}
}
else
{
if (dioRead (remoteDeviceNumber, loopcnt) == TRUE)
{
allZeroResult = FALSE;
}
vTaskDelay (100);
}
}
return (allZeroResult);
}