- Fixed stupid bug of -1 instead of +1 in external_mem.c.

- Began writing an electrical test so I remember WTF I'm doing later
This commit is contained in:
Doug Brown 2011-11-27 00:09:29 -08:00
parent 1595c69890
commit 0a52df645a
2 changed files with 29 additions and 3 deletions

View File

@ -9,7 +9,7 @@
#include "ports.h" #include "ports.h"
#include <avr/io.h> #include <avr/io.h>
#define NUM_ADDRESS_LINES 20 #define HIGHEST_ADDRESS_LINE 20
// Allow this to be initialized more than once. // Allow this to be initialized more than once.
// In case we mess with the port settings, // In case we mess with the port settings,
@ -22,11 +22,11 @@ void ExternalMem_Init(void)
// Disable all pull-ups, on both the address and data lines. They aren't needed // Disable all pull-ups, on both the address and data lines. They aren't needed
// for normal operation. // for normal operation.
Ports_AddressPullups_RMW(0, (1UL << (NUM_ADDRESS_LINES - 1)) - 1); Ports_AddressPullups_RMW(0, (1UL << (HIGHEST_ADDRESS_LINE + 1)) - 1);
Ports_DataPullups_RMW(0, 0xFFFFFFFFUL); Ports_DataPullups_RMW(0, 0xFFFFFFFFUL);
// Configure all address lines as outputs // Configure all address lines as outputs
Ports_SetAddressDDR((1UL << (NUM_ADDRESS_LINES - 1)) - 1); Ports_SetAddressDDR((1UL << (HIGHEST_ADDRESS_LINE - 1)) - 1);
// Sensible defaults for address and data lines: // Sensible defaults for address and data lines:
// Write out address zero // Write out address zero

View File

@ -6,11 +6,37 @@
*/ */
#include "simm_electrical_test.h" #include "simm_electrical_test.h"
#include "../ports.h"
#define SIMM_HIGHEST_ADDRESS_LINE 18
int SIMMElectricalTest_Run(void) int SIMMElectricalTest_Run(void)
{ {
// Returns number of errors found // Returns number of errors found
int numErrors = 0; int numErrors = 0;
Ports_Init();
// First check for anything shorted to ground. Set all lines as inputs with a weak pull-up resistor.
// Then read the values back and check for any zeros. This would indicate a short to ground.
Ports_SetAddressDDR(0);
Ports_SetDataDDR(0);
Ports_AddressPullups_RMW((1UL << (SIMM_HIGHEST_ADDRESS_LINE + 1)) - 1, (1UL << (SIMM_HIGHEST_ADDRESS_LINE + 1)) - 1);
Ports_DataPullups_RMW(0xFFFFFFFFUL, 0xFFFFFFFFUL);
// TODO: Wait a sec?
if (Ports_ReadAddress() != (1UL << (SIMM_HIGHEST_ADDRESS_LINE + 1)) - 1)
{
// TODO: Log all these errors somewhere?
numErrors++;
}
if (Ports_ReadData() != 0xFFFFFFFFUL)
{
// TODO: Log all these errors somewhere?
numErrors++;
}
return numErrors; return numErrors;
} }