OpenCores
URL https://opencores.org/ocsvn/aemb/aemb/trunk

Subversion Repositories aemb

[/] [aemb/] [tags/] [AEMB_711/] [sw/] [c/] [aeMB_testbench.c] - Diff between revs 64 and 67

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 64 Rev 67
Line 1... Line 1...
/*
/*
 * $Id: aeMB_testbench.c,v 1.11 2007-11-14 23:41:06 sybreon Exp $
 * $Id: aeMB_testbench.c,v 1.12 2007-11-18 19:41:45 sybreon Exp $
 *
 *
 * AEMB Function Verification C Testbench
 * AEMB Function Verification C Testbench
 * Copyright (C) 2004-2007 Shawn Tan Ser Ngiap <shawn.tan@aeste.net>
 * Copyright (C) 2004-2007 Shawn Tan Ser Ngiap <shawn.tan@aeste.net>
 *
 *
 * This library is free software; you can redistribute it and/or
 * This library is free software; you can redistribute it and/or
Line 23... Line 23...
 * It tests a whole gamut of operations and is tightly linked to the
 * It tests a whole gamut of operations and is tightly linked to the
 * ae68_testbench.v testbench module for verification.
 * ae68_testbench.v testbench module for verification.
 *
 *
 * HISTORY
 * HISTORY
 * $Log: not supported by cvs2svn $
 * $Log: not supported by cvs2svn $
 
 * Revision 1.11  2007/11/14 23:41:06  sybreon
 
 * Fixed minor interrupt test typo.
 
 *
 * Revision 1.10  2007/11/14 22:12:02  sybreon
 * Revision 1.10  2007/11/14 22:12:02  sybreon
 * Added interrupt test routine.
 * Added interrupt test routine.
 *
 *
 * Revision 1.9  2007/11/09 20:51:53  sybreon
 * Revision 1.9  2007/11/09 20:51:53  sybreon
 * Added GET/PUT support through a FSL bus.
 * Added GET/PUT support through a FSL bus.
Line 63... Line 66...
 
 
   This tests for the following:
   This tests for the following:
   - Pointer addressing
   - Pointer addressing
   - Interrupt handling
   - Interrupt handling
 */
 */
// void int_service (void) __attribute__((save_volatiles));
 
void int_handler (void) __attribute__ ((interrupt_handler));
void int_handler (void) __attribute__ ((interrupt_handler));
int service;
volatile int service = 0xDEADDEAD;
 
 
void int_enable()
void int_enable()
{
{
  int tmp;
  int tmp;
  service = 0;
  asm volatile ("mfs %0, rmsr;"
  asm ("mfs %0, rmsr;" : "=r" (tmp));
                "ori %1, %0, 0x02;"
  tmp = tmp | 0x02;
                "mts rmsr, %1;"
  asm ("mts rmsr, %0;" :: "r" (tmp));
                : "=r" (tmp)
 
                : "r" (tmp));
}
}
 
 
void int_disable()
void int_disable()
{
{
  int tmp;
  int tmp;
  service = 1;
  asm volatile ("mfs %0, rmsr;"
  asm ("mfs %0, rmsr;" : "=r" (tmp));
                "andi %1, %0, 0xFD;"
  tmp = tmp & 0xFD;
                "mts rmsr, %1;"
  asm ("mts rmsr, %0;" :: "r" (tmp));
                : "=r" (tmp)
 
                : "r" (tmp));
}
}
 
 
void int_service()
void int_service()
{
{
  int* pio = (int*)0xFFFFFFFC;
  int* pio = (int*)0xFFFFFFFC;
  *pio = 0x52544E49; // "INTR"
  *pio = 0x52544E49; // "INTR"
  service = -1;
  service = 0;
}
}
 
 
void int_handler()
void int_handler()
{
{
  int_service();
  int_service();
Line 102... Line 108...
   INTERRUPT TEST ROUTINE
   INTERRUPT TEST ROUTINE
*/
*/
int int_test ()
int int_test ()
{
{
  // Delay loop until hardware interrupt triggers
  // Delay loop until hardware interrupt triggers
  int i;
  for (volatile int i=0; i < 999; i++) {
  for (i=0; i < 777; i++) {
    if (service == 0) return 0;
    asm volatile ("nop;");
  };
  }
 
  return (service == 0) ? -1 : 1;
  return -1;
}
}
 
 
/**
/**
   FIBONACCI TEST
   FIBONACCI TEST
   http://en.literateprograms.org/Fibonacci_numbers_(C)
   http://en.literateprograms.org/Fibonacci_numbers_(C)
Line 301... Line 307...
  int FSL = 0xCAFEF00D;
  int FSL = 0xCAFEF00D;
 
 
  asm ("PUT %0, RFSL1" :: "r"(FSL));
  asm ("PUT %0, RFSL1" :: "r"(FSL));
  asm ("GET %0, RFSL1" : "=r"(FSL));
  asm ("GET %0, RFSL1" : "=r"(FSL));
 
 
  if (FSL != 0x04) return -1;
  if (FSL != 0x01) return -1;
 
 
  asm ("PUT %0, RFSL31" :: "r"(FSL));
  asm ("PUT %0, RFSL31" :: "r"(FSL));
  asm ("GET %0, RFSL31" : "=r"(FSL));
  asm ("GET %0, RFSL31" : "=r"(FSL));
 
 
  if (FSL != 0x7C) return -1;
  if (FSL != 0x1F) return -1;
 
 
  return 0;
  return 0;
}
}
 
 
/**
/**

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.