#include "mmio.h" #define GCD_STATUS 0x4000 #define GCD_X 0x4004 #define GCD_Y 0x4008 #define GCD_GCD 0x400C unsigned int gcd_ref(unsigned int x, unsigned int y) { while (y != 0) { if (x > y) x = x - y; else y = y - x; } return x; } // DOC include start: GCD test int main(void) { uint32_t result, ref, x = 20, y = 15; // wait for peripheral to be ready while ((reg_read8(GCD_STATUS) & 0x2) == 0) ; reg_write32(GCD_X, x); reg_write32(GCD_Y, y); // wait for peripheral to complete while ((reg_read8(GCD_STATUS) & 0x1) == 0) ; result = reg_read32(GCD_GCD); ref = gcd_ref(x, y); if (result != ref) { printf("Hardware result %d does not match reference value %d\n", result, ref); return 1; } printf("Hardware result %d is correct for GCD\n", result); return 0; } // DOC include end: GCD test