Added Software projects
git-svn-id: file:///srv/dev-disk-by-uuid-17e88007-4d0c-45e0-8757-cacfcc458630/repositories/svn/Diplomarbeit@55 9fe90eed-be63-e94b-8204-d34ff4c2ff93
This commit is contained in:
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user