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

📄 test.c

📁 这是周立功发布的LPC2200系列开发办中LPC2210这一款最新的所有板级测试代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************************************************
* 文件名:TEST.C
* 功能:EasyARM2200开发板出厂编程程序。
* 说明:将跳线器JP5、JP8短接。
****************************************************************************/
#include  "config.h" 

#define   ZLG7290 	0x70            /* 定义器件地址 */

#define   SPI_CS	0x00000100		/* P0.8 */
#define   SPI_DATA	0x00000040		/* P0.6 */
#define   SPI_CLK	0x00000010		/* P0.4 */
#define   SPI_IOCON	0x00000150		/* 定义SPI接口的I/O设置字 */

#define	  BEEPCON  0x00000080		/* P0.7引脚控制B1,低电平蜂鸣 */


uint8  disp_buf[8];		// 8位数码管显示缓冲区,由ZLG7290控制数码管显示


/****************************************************************************
* 名称:DelayNS()
* 功能:长软件延时
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  DelayNS(uint32  dly)
{  uint32  i;

   for(; dly>0; dly--) 
      for(i=0; i<5000; i++);
}


/****************************************************************************
* 名称:BeepRun()
* 功能:蜂鸣器BEEP响。
* 入口参数:dly		蜂鸣器延时控制
* 出口参数:无
****************************************************************************/
void  BeepRun(uint8 dly)
{
   IO0CLR = BEEPCON;				// BEEPCON = 0
   DelayNS(dly);	
   IO0SET = BEEPCON;				// BEEPCON = 1
   DelayNS(dly);
}
      

/****************************************************************************
* 名称:HC595_SendDat()
* 功能:向74HC595发送一字节数据
* 入口参数:dat		要发送的数据
* 出口参数:无
* 说明:发送数据时,高位先发送。
****************************************************************************/
void  HC595_SendDat(uint8 dat)
{  uint8  i;

   IO0CLR = SPI_CS;			    // SPI_CS = 0
   for(i=0; i<8; i++)			// 发送8位数据
   {  IO0CLR = SPI_CLK;			// SPI_CLK = 0
      /* 设置SPI_DATA输出值 */
      if( (dat&0x80)!=0 ) IO0SET = SPI_DATA;
        else IO0CLR = SPI_DATA;
      dat <<= 1;
      IO0SET = SPI_CLK;			// SPI_CLK = 1
   }
   
   IO0SET = SPI_CS;			    // SPI_CS = 1,输出显示数据
}	



/****************************************************************************
* 名称:DispDataBitLSL()
* 功能:将数据从8位数码管的最右端,逐步左移到指定显示位上显示。
* 入口参数:dat			显示数据
*          objno		目标显示位
*          dly			移动延时控制
* 出口参数:无
* 说明:使用disp_buf显示缓冲区
****************************************************************************/
void  DispDataBitLSL(uint8 dat, uint8 objno, uint8 no)
{  uint8  i;

   if(objno>7) return;

   disp_buf[0] = dat;							// 第0位显示为dat   
   ZLG7290_SendBuf(disp_buf,8);					
   DelayNS(no);
   
   for(i=0; i<objno; i++)
   {  disp_buf[i] = 0x1F;			
      disp_buf[i+1] = dat;						// 第i+1位显示为dat
      
	  ZLG7290_SendBuf(disp_buf,8);
      DelayNS(no);
   }
}
	
	
/****************************************************************************
* 名称:I2C_Init()
* 功能:主模式I2C初始化,包括初始化其中断为向量IRQ中断。
* 入口参数:fi2c		初始化I2C总线速率,最大值为400K
* 出口参数:无
****************************************************************************/
void  I2C_Init(uint32 fi2c)
{  if(fi2c>400000) fi2c = 400000;

   PINSEL0 = (PINSEL0&0xFFFFFF0F) | 0x50; // 设置I2C控制口有效

   I2SCLH = (Fpclk/fi2c + 1) / 2;	// 设置I2C时钟为fi2c
   I2SCLL = (Fpclk/fi2c) / 2;
   I2CONCLR = 0x2C;
   I2CONSET = 0x40;					// 使能主I2C
   
   /* 设置I2C中断允许 */
   VICIntSelect = 0x00000000;		// 设置所有通道为IRQ中断
   VICVectCntl0 = 0x29;				// I2C通道分配到IRQ slot 0,即优先级最高
   VICVectAddr0 = (int)IRQ_I2C;	    // 设置I2C中断向量地址	
   VICIntEnable = 0x0200;           // 使能I2C中断 
}

		
// 显示段定义(用于ZLG7290,直接写显示寄存器)
#define  SA		0x80
#define  SB		0x40
#define  SC		0x20
#define  SD		0x10
#define  SE		0x08
#define  SF		0x04
#define  SG		0x02
#define  SH		0x01

#define  ND		0x00

// 字模定义
#define   CHAR_N		(SA|SB|SC|SE|SF)  
#define   CHAR_E		(SA|SD|SE|SF|SG)  
#define   CHAR_t		(SD|SE|SF|SG) 

#define   CHAR_U		(SB|SC|SD|SE|SF)  
#define   CHAR_S		(SA|SC|SD|SF|SG)  
#define   CHAR_b		(SC|SD|SE|SF|SG)

#define   CHAR_C		(SA|SD|SE|SF)  
#define   CHAR_0		(SA|SB|SC|SD|SE|SF)  
#define   CHAR_2		(SA|SB|SD|SE|SG) 

#define   CHAR_DOT	    SH             
#define   CHAR_r		(SE|SG)

const uint8  DISP_TAB[] = { SA|SB|SC|SD|SE|SF,		// 0
                            SB|SC,					// 1
                            SA|SB|SD|SE|SG,			// 2 
                            SA|SB|SC|SD|SG,			// 3
                            SB|SC|SF|SG,			// 4
                            SA|SC|SD|SF|SG,			// 5
                            SA|SC|SD|SE|SF|SG,		// 6
                            SA|SB|SC,				// 7
                            SA|SB|SC|SD|SE|SF|SG,	// 8
                            SA|SB|SC|SD|SF|SG,		// 9
                            SA|SB|SC|SE|SF|SG,		// A
                            SC|SD|SE|SF|SG,			// b
                            SA|SD|SE|SF,			// C
                            SB|SC|SD|SE|SG,			// d
                            SA|SD|SE|SF|SG,			// E
                            SA|SE|SF|SG				// F
						   };
						   
// 流水灯控制数据
const uint8  playled1[] = { SB|SD,
							SA|ND,
							ND|SD,
							SA|ND,
							ND|SD,
							SA|ND,
							ND|SD,
							SA|SE
                          };                          
const uint8  pled8a = 0x55;

                          
const uint8  playled2[] = { SA|SC,
							ND|SD,
							SA|ND,
							ND|SD,
							SA|ND,
							ND|SD,
							SA|ND,
							SF|SD
                          }; 
const uint8  pled8b = 0xAA;


/////////////////////////////////////////////////////////////////////////////

const uint32 WriteData[] = {0x55555555, 0xaaaaaaaa, 0xffffffff, 0};

/****************************************************************************
* 名称:SysCheck_RAM()
* 功能:SRAM测试。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  SysCheck_RAM(void)
{  volatile uint32  *cp;		//  设置32位指针(RAM地址,volatile属性)

   uint32 temp;
   uint32 i;
   uint8  j;
   uint8  err;
   
   uint8  ch;
   
   
   // 清除LED屏幕显示
   for(i=0; i<8; i++) disp_buf[i] = 0x1F;
   ZLG7290_SendBuf(disp_buf,8);
   
   // 检测SRAM。显示"Sr xxxxx"或显示"Errxxxxx"
   ZLG7290_SendData(0x10+7, CHAR_S);
   ZLG7290_SendData(0x10+6, CHAR_r);
   ZLG7290_SendData(0x10+5, ND);
   ZLG7290_SendData(0x10+4, SG);
   ZLG7290_SendData(0x10+3, SG);
   ZLG7290_SendData(0x10+2, SG);
   ZLG7290_SendData(0x10+1, SG);
   ZLG7290_SendData(0x10+0, SG);
   
   // 清零SRAM
   cp = (uint32 *) 0x81000000;			// 设置SRAM起始地址
   for (i = 0; i < 0x00080000; i += 4)
   {  *cp++ = 0;						// 写0操作
   }
    
    // 读/写校验
    cp = (uint32 *) 0x81000000;
    for (i = 0; i < 0x00080000; i += 4)
    {  err = 0;
    
       // 判断是否需要更新地址显示
       if((i&0x0FFF) == 0x0000)  
       {  ZLG7290_SendData(0x10+7, CHAR_S);
   		  ZLG7290_SendData(0x10+6, CHAR_r);
          ZLG7290_SendData(0x10+5, ND);
          
          ch = (i>>16)&0x0F;
          ZLG7290_SendData(0x10+4, DISP_TAB[ch]);
          
          ch = (i>>12)&0x0F;
          ZLG7290_SendData(0x10+3, DISP_TAB[ch]);
            
          ZLG7290_SendData(0x10+2, DISP_TAB[8]);
          ZLG7290_SendData(0x10+1, DISP_TAB[8]);
          ZLG7290_SendData(0x10+0, DISP_TAB[8]);
       }
         
       temp = cp[0];				// 读取数据,校验是否为0
       if (temp != 0) 
       {  err = 1; 
       }
        
       // 写数效验
       j = 0;
       while (1)
       {  cp[0] = WriteData[j];
          temp = cp[0];
          if (temp != WriteData[j])
          {  err = 1;
          }
          j++;
          if (WriteData[j] == 0)
          {  break;
          }
       }
       
       // 判断是否有错误,若有则显示相应的地址信息       
       if(err == 1)
       {  ZLG7290_SendData(0x10+7, CHAR_E);
          ZLG7290_SendData(0x10+6, CHAR_r);
          ZLG7290_SendData(0x10+5, CHAR_r);

⌨️ 快捷键说明

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