⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 lpc-h22xx.zip 一款LPC2214开发板的代码。功能是测试开发板
💻 C
字号:
/*
 * $Revision: 1.0 $
 */


#include <stdio.h>
#include <string.h>
#include <inarm.h>
#include <iolpc2114.h>
#include "lpc221x.h"
#include "timer.h"
#include "flash_lpc.h"
#include "config.h"

#define FLASH_ERROR 0x01
#define RAM_ERROR   0x02
#define UART_ERROR  0x04

#define LED_ON        IO0CLR |= 0x40000000   
#define LED_OFF       IO0SET |= 0x40000000
#define PULL_DOWN_P1  IO1CLR |= 0x02000000
#define PULL_UP_P1    IO1SET |= 0x02000000

#define PULL_UP_P0      IO0SET |= 0x20000000      //P0.29 is PULL_PIN for port0
#define PULL_DOWN_P0    IO0CLR |= 0x20000000

#define SET_TIME    1000
#define LED_TIME    3000000

#define TEST_NUMB   68

unsigned long CONST, compare;
unsigned char i,j;

void Delay (unsigned long a);
void LED_blink (unsigned char b);

const unsigned long RamTest [TEST_NUMB] = {
  0xFFFFFFFF,
  0xFFFFFFFE,
  0xFFFFFFFC,
  0xFFFFFFF8,
  0xFFFFFFF0,

  0xFFFFFFEF,
  0xFFFFFFCF,
  0xFFFFFF8F,
  0xFFFFFF0F,

  0xFFFFFEFF,
  0xFFFFFCFF,
  0xFFFFF8FF,
  0xFFFFF0FF,

  0xFFFFEFFF,
  0xFFFFCFFF,
  0xFFFF8FFF,
  0xFFFF0FFF,

  0xFFFEFFFF,
  0xFFFCFFFF,
  0xFFF8FFFF,
  0xFFF0FFFF,

  0xFFEFFFFF,
  0xFFCFFFFF,
  0xFF8FFFFF,
  0xFF0FFFFF,

  0xFEFFFFFF,
  0xFCFFFFFF,
  0xF8FFFFFF,
  0xF0FFFFFF,

  0xEFFFFFFF,
  0xCFFFFFFF,
  0x8FFFFFFF,
  0x0FFFFFFF,

  ~0xFFFFFFFF,
  ~0xFFFFFFFE,
  ~0xFFFFFFFC,
  ~0xFFFFFFF8,
  ~0xFFFFFFF0,

  ~0xFFFFFFEF,
  ~0xFFFFFFCF,
  ~0xFFFFFF8F,
  ~0xFFFFFF0F,

  ~0xFFFFFEFF,
  ~0xFFFFFCFF,
  ~0xFFFFF8FF,
  ~0xFFFFF0FF,

  ~0xFFFFEFFF,
  ~0xFFFFCFFF,
  ~0xFFFF8FFF,
  ~0xFFFF0FFF,

  ~0xFFFEFFFF,
  ~0xFFFCFFFF,
  ~0xFFF8FFFF,
  ~0xFFF0FFFF,

  ~0xFFEFFFFF,
  ~0xFFCFFFFF,
  ~0xFF8FFFFF,
  ~0xFF0FFFFF,

  ~0xFEFFFFFF,
  ~0xFCFFFFFF,
  ~0xF8FFFFFF,
  ~0xF0FFFFFF,

  ~0xEFFFFFFF,
  ~0xCFFFFFFF,
  ~0x8FFFFFFF,
  ~0x0FFFFFFF,

  0xAAAAAAAA,
  0x55555555,
};

unsigned char sendByte(char byte)
{
  while(!U0LSR_bit.THRE);
  LPC210xUART0TxByte(byte);
  return 1;
}

void sendMessage(char * byte)
{
  for(;*byte;++byte)
  {
    sendByte(*byte);
  }
}

unsigned char getByte(char *byte)
{
  if(U0LSR_bit.DR)
  {
    *byte = U0RBR;
    return 1;
  }
  return 0;
}

void Delay (unsigned long a)
{
    while (--a!=0);
}

void LED_blink (unsigned char b)
{
    unsigned char c;
    IO0DIR=0x40000000;
    IO1DIR=0;
    for (c=0;c!=b;c++){                   
      LED_OFF;                    //LED off
      Delay(LED_TIME);
      LED_ON;                     //LED off
      Delay(LED_TIME);      
    }      
    while(1);
}

unsigned int led = 0, id;
unsigned long* pAdd;

void main(void)
{
unsigned long i,j = 0;
unsigned long hold;
unsigned int error_status;
char byte;
char Message[256];
FLASH_DEV_MANUFACTURER_ID_DEF FlashDevManID = UNKNOW_MAN_ID;

  T0TC = 0;
  // System initialization, this will map the exception vectors.
  LPC210xSystemInit();
  
  // Set up peripheral registers.
  LPC210xInitPIO();
  
  // First disable interrupts.
  __disable_interrupt();
  // Setup interrupt controller.
  LPC210xInitVIC();

  // Periodic timer initialization.
  LPC210xInitTimer();

//  LPC210xInitTimerInterrupt(TimerBeat);

  //Set up UART
  LPC210xInitUART0();
    
  // Enable interrupts.
  __enable_interrupt();

  // Start periodic timer.
  LPC210xStartTimer();

  // Init error status 
  error_status = 0;  

  // Ram memory test
  sendMessage(" *** SRAM Tests ***\n\r");
  sendMessage("SRAM Write\n\r");

#if TRACE_ENA
  printf(" *** SRAM Tests ***\n");
  printf("SRAM Write\n");
#endif
  for(i=0, pAdd=(unsigned long *)SRAM_BASE; pAdd < (unsigned long *)SRAM_BASE+SRAM_SIZE/4; ++pAdd,++i)
  {
    *pAdd = i;
  }

  sendMessage("SRAM Write Pass\n\r");
  sendMessage("SRAM Address Bus Verify\n\r");

#if TRACE_ENA
  printf("%s","SRAM Write Pass\n");
  printf("%s","SRAM Address Bus Verify\n");
#endif
  for(i=0, pAdd=(unsigned long *)SRAM_BASE; pAdd < (unsigned long *)SRAM_BASE+SRAM_SIZE/4; ++pAdd,++i)
  {
    if (*pAdd != i)
      break;
  }
  if (pAdd >= (unsigned long *)SRAM_BASE+SRAM_SIZE/4)
  {
      sendMessage("SRAM Adderss Bus Verify Pass\n\r");
  
    #if TRACE_ENA
      printf("%s","SRAM Adderss Bus Verify Pass\n");
    #endif
  }
  else
  {
    sprintf(Message,"%s %#x %s","SRAM Address Bus Write Fault at address - ",pAdd,"\n\r");
    sendMessage(Message);

  #if TRACE_ENA
    printf("SRAM Address Bus Write Fault at address - ",pAdd,'\n');
  #endif
    error_status |= RAM_ERROR;
  }

  if((error_status & RAM_ERROR) == 0)
  {
    sendMessage("SRAM Data Bus Verify\n\r");
    #if TRACE_ENA
      printf("%s","SRAM Data Bus Verify\n");
    #endif
    for(i=TEST_NUMB, pAdd=(unsigned long *)SRAM_BASE; i; --i)
    {
      *pAdd = RamTest[i];
      if (*pAdd != RamTest[i])
        break;
    }
    if (i == 0)
    {
      sendMessage("SRAM Data Bus Verify Pass\n\r");
  
    #if TRACE_ENA
      printf("%s","SRAM Data Bus Verify Pass\n");
    #endif
    }
    else
    {
      sendMessage("SRAM Data Bus Verify Fault\n\r");  
    }
  }
  
  // Flash memory test
  sendMessage(" *** Flash Tests ***\n\r");
  sendMessage("Read manufacturer\n\r");

#if TRACE_ENA
  printf(" *** Flash Tests ***\n");
  printf("Read manufacturer\n");
#endif
  id = FlashID((unsigned short*)(FLASH_BASE)+MANUFACTURER_ID);
  if (id == 0x0089)
  {
    sendMessage("Intel flash device is find\n\r");
  #if TRACE_ENA
    printf("Intel flash device is find\n");
  #endif
    // Set flash man. type
    FlashDevManID = INTEL_MAN_ID;
  }
  else if (id == 0x00C2)
  {
    sendMessage("MXIC flash device is find\n\r");
  #if TRACE_ENA
    printf("MXIC flash device is find\n");
  #endif
    // Set flash man. type
    FlashDevManID = MXID_MAN;
  }
  else
  {
    sprintf(Message,"%s %#x %s","Unknow manufacturer flash device is find",id,"\n\r");
    sendMessage(Message);

  #if TRACE_ENA
    printf("%s %#x %c","Unknow manufacturer flash device is find",id,'\n');
  #endif
  }
  // Read type of flash memory
  sendMessage("Read type of chip\n\r");

#if TRACE_ENA
  printf("Read type of chip\n");
#endif
  id = FlashID((unsigned short*)(FLASH_BASE)+DEVICE_ID);
  if (id == 0x88C5)
  {
    sendMessage("TE28F320C3Bxxx\n\r");

  #if TRACE_ENA
    printf("TE28F320C3Bxxx\n");
  #endif
  }
  else if (id == 0x225B)
  {
    sendMessage("MX26LV800Bxxx\n\r");

  #if TRACE_ENA
    printf("TE28F320C3Bxxx\n");
  #endif
  }
  else
  {
    sprintf(Message,"%s %#x %s","Unknow type flash device is find",id,"\n\r");
    sendMessage(Message);

  #if TRACE_ENA
    printf("%s %#x %c","Unknow type flash device is find",id,'\n');
  #endif

    FlashDevManID = UNKNOW_MAN_ID;
  }

  if (FlashDevManID != UNKNOW_MAN_ID)
  {
    sendMessage("Flash Erase\n\r");
  
  #if TRACE_ENA
    printf("Flash Erase\n");
  #endif
    for(i=8, pAdd=(unsigned long *)FLASH_BASE; pAdd < (unsigned long *)FLASH_BASE+FLASH_SIZE/4; pAdd += FLASH_BLOCK/4,++i)
    {
      LPC210xLedSet(++j&1);
      if (Flash_Erase_Block(pAdd,FlashDevManID) != PASS)
        break;
    }
    if (pAdd >= (unsigned long *)FLASH_BASE+FLASH_SIZE/4)
    {
      sendMessage("Flash Erase Pass\n\r");
    
    #if TRACE_ENA
      printf("%s","Flash Erase Pass\n");
    #endif
    }
    else 
    {
      sprintf(Message,"%s %d %s","Erase Block - ",i,"\n\r");
      sendMessage(Message);
      sendMessage("Flash Erase fault\n\r");
  
    #if TRACE_ENA
      printf("%s %d %c","Erase Block - ",i,'\n');
      printf("%s","Flash Erase fault\n");
    #endif
      error_status |= FLASH_ERROR;
    }
    if ((error_status &  FLASH_ERROR) == 0)
    {
      sendMessage("Flash Write\n\r");
  
    #if TRACE_ENA
      printf("%s","Flash Write\n");
    #endif
      for(i=0, pAdd=(unsigned long *)FLASH_BASE; i < FLASH_SIZE/4; ++pAdd,++i)
      {
        if ((i & 0x1FFF) == 0)
          LPC210xLedSet(++j&1);
        if (Flash_Write_Word(pAdd,i,FlashDevManID) != PASS)
          break;
      }
    
      if (pAdd >= (unsigned long *)FLASH_BASE+FLASH_SIZE/4)
      {
        sendMessage("Flash Write Pass\n\r");
  
      #if TRACE_ENA
        printf("%s","Flash Write Pass\n");
      #endif
      }
      else 
      {
        sprintf(Message,"%s %#x %s","Flash Write Fault at address - ",pAdd,"\n\r");
        sendMessage(Message);
    
      #if TRACE_ENA
        printf("%s %#x %c","Flash Write Fault at address - ",pAdd,'\n');
      #endif
        error_status |= FLASH_ERROR;
      }
      if ((error_status &  FLASH_ERROR) == 0)
      {
        sendMessage("Flash Verify Data\n\r");
  
      #if TRACE_ENA
        printf("%s","Flash Verify Data\n");
      #endif
        for(i=0, pAdd=(unsigned long *)FLASH_BASE; i < FLASH_SIZE/4; ++pAdd,++i)
        {
          hold = *pAdd;
          if (hold != i)
            break;
          if ((i & 0x1FFF) == 0)
            LPC210xLedSet(++j&1);
        }
      
        if (pAdd >= (unsigned long *)FLASH_BASE+FLASH_SIZE/4)
        {
          sendMessage("Flash Verify Pass\n\r");
    
        #if TRACE_ENA
          printf("%s","Flash Verify Pass\n");
        #endif
        }
        else 
        {
          sprintf(Message,"%s %#x %s","Flash Verify Fault at address - ",pAdd,"\n\r");
          sendMessage(Message);
      
        #if TRACE_ENA
          printf("%s %#x %c","Flash Verify Fault at address - ",pAdd,'\n');
        #endif
          error_status |= FLASH_ERROR;
        }
      }
    }
  } 
  else
  {
    sendMessage("Unknow type flash device is find. Test fault");
    error_status |= FLASH_ERROR;
  }
  
  sendMessage(" *** UART Tests ***\n\r");
  sendMessage("Press key '1' \n\r");
  
#if TRACE_ENA
  printf(" *** UART Tests ***\n");
  printf("Press key '1' \n");
#endif
  error_status |= UART_ERROR;
  LPC210xLedSet(0);
  // Loop forever.
  for (;;)
  {
    if(getByte(&byte))
    {
      while(!sendByte(byte)); //Echo byte
      if (byte == '1')
        error_status &= ~UART_ERROR;
      while(!sendByte('*'));  //Send *
    }
    if (error_status)
      LPC210xLedSet(0);
    else
    {
      LPC210xLedSet(led&1);
    }
    Sleep(65); // Display for 65 ms.
    ++led;    
  }
  
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -