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

📄 control.c

📁 LPC2292 bios测试程序 说明:YL_LPC229X_BIOS_Data的目录说明
💻 C
字号:
#include "def.h"
#include "config.h"
#include "board.h"
#include "utils.h"
#include "option.h"

extern char Image$$RO$$Limit[];
extern char Image$$RO$$Base[];
extern char Image$$RW$$Limit[];
extern char Image$$RW$$Base[];
extern char Image$$ZI$$Limit[];
extern char Image$$ZI$$Base[];

void ShowBootInfo( void )
{
	puts( "\n ***************************************\n" );
	puts( "*                                       *\n" );
	puts( "*    BIOS for YL-LPC2292 Board V1.00    *\n" );
	puts( "*        Http://www.uCdragon.com        *\n" );
	puts( "*                                       *\n" );
	puts( " ***************************************\n" );
	/*    printf( "  Image$$RO$$Base  = 0x%x\n", Image$$RO$$Base );
		printf( "  Image$$RO$$Limit = 0x%x\n", Image$$RO$$Limit );
		printf( "  Image$$RW$$Base  = 0x%x\n", Image$$RW$$Base );
		printf( "  Image$$RW$$Limit = 0x%x\n", Image$$RW$$Limit );
		printf( "  Image$$ZI$$Base  = 0x%x\n", Image$$ZI$$Base );
		printf( "  Image$$ZI$$Limit = 0x%x\n", Image$$ZI$$Limit );*/
}

/****************************************************************************
* 名称:PWM5_Set( U32 CYCLE_DATA, U32 DUTY_CYCLE_DATA )
* 功能:使用PWM5输出占空比可调的PWM波形。
* 参数说明:CYCLE_DATA表示PWM的周期是多少,范围是1--100000,对应于10us;
			DUTY_CYCLE_DATA占空比是多少,范围是1--100000,对应于0.001% - 100%
****************************************************************************/
void PWM5_Set( U32 CYCLE_DATA , U32 DUTY_CYCLE_DATA )
{
	PWMTCR = 0x02;				// 停止定时器,PWM禁止,复位定时器
	PWMPR = 0x00;				// 不分频,计数频率为Fpclk
	PWMMCR = 0x02;				// 设置PWMMR0匹配时复位PWMTC
	PWMMR0 = CYCLE_DATA * ( Fpclk / 100000 );		// 设置PWM周期
	PWMMR5 = DUTY_CYCLE_DATA * ( Fpclk / 100000 );		// 设置PWM占空比

	PWMLER = 0x21;				// PWMMR0、PWMMR5锁存
	PWMPCR = 0x2000;				// 允许PWM5输出,单边PWM
	PWMTCR = 0x09;				// 启动定时器,PWM使能
}

void PWM5_Stop( void )
{
	PWMMCR = PWMMCR | ( 1 << 17 ) ;
}		//停止PWM5

/****************************************************************************
【功能说明】PWM模式控制蜂鸣器
****************************************************************************/
void Beep( U32 time )
{
	PWM5_Set( 100 , 50 ) ;
	Delay( time ) ;
	PWM5_Stop() ;
}

/****************************************************************************
【功能说明】PWM模式控制蜂鸣器测试
****************************************************************************/
int PWM5_Beep_Test( int argc , char* argv[] )
{
	U16 CYCLE = 100;

	printf( "PWM5 Test( Beep ) !\n\n" ) ;
	printf( "Press +/- to increase/reduce the frequency of beep !\n" ) ;
	printf( "Press 'ESC' to Exit this test program !\n\n" );

	PWM5_Set( CYCLE , ( CYCLE / 2 ) ) ;

	while ( 1 )
	{
		U8 key;		

		key = getch();
		putch( key );

		if ( key == '+' )
			if ( CYCLE > 0 )
				CYCLE -- ;
		if ( key == '-' )
			if ( CYCLE < 10000 )
				CYCLE ++ ;

		if ( key == ESC_KEY )
			break ;

		PWM5_Set( CYCLE , ( CYCLE / 2 ) ) ;
		printf( "\tNow beep CYCLE is %duS\n" , ( CYCLE * 10 ) ) ;
	}

	PWM5_Stop() ;
	return 1 ;
}

/****************************************************************************
【功能说明】SRAM测试
****************************************************************************/
int SRAM_Test( int argc , char* argv[] )
{
	//#define ADDRESS_ADD	0x1000
#define ADDRESS_ADD	0x0

	U32 i ;
	U8 j ;
	U8 memError = 0 ;
	U32 start_adr, end_adr ;
	U32 temp ;
	U8 value0 ;
	U8 value1 ;
	U8 value2 ;
	U8 value3 ;

	if ( argc == 1 )
	{
		start_adr = SRAM_BASE + ADDRESS_ADD ;
		end_adr = SRAM_BASE + USER_SRAM ;
		value0 = 0x33 ;
		value1 = 0x55 ;
		value2 = 0xaa ;
		value3 = 0xcc ;
	}
	else
	{
		if ( argc > 1 )
			start_adr = strtoul( ( char * ) argv[1] );
		if ( argc > 2 )
			end_adr = strtoul( ( char * ) argv[2] );
		if ( argc > 3 )
			temp = strtoul( ( char * ) argv[3] ) ;
		value0 = (U8)( (temp>>0) & 0xff ) ;
		value1 = (U8)( (temp>>8) & 0xff ) ;
		value2 = (U8)( (temp>>16) & 0xff ) ;
		value3 = (U8)( (temp>>24) & 0xff ) ;
	}

	if ( ( start_adr < SRAM_BASE ) || ( end_adr > ( SRAM_BASE + USER_SRAM ) ) )
	{
		printf( "\nArguments error!\n" ) ;
		printf( "Please input \n" ) ;
		printf( "Usage:	ram start_adr end_adr value\nstart_adr = test start address\nend_adr = test end address\nvalue = the value for write and read to ram\n" );
		return -1 ;
	}

	printf( "\nMemory Test(0x%xh--0x%xh) : WR\n" , start_adr , end_adr ) ;

	for ( i = start_adr; i < end_adr; i += 4 )
	{
		*( ( volatile unsigned char * ) (i+0) ) = value0 ;
		*( ( volatile unsigned char * ) (i+1) ) = value1 ;
		*( ( volatile unsigned char * ) (i+2) ) = value2 ;
		*( ( volatile unsigned char * ) (i+3) ) = value3 ;
		if ( ( i % 0x10000 ) == 0 )
			SerialTxChar( '.' ) ;
	}

	printf( "\nMemory Test(0x%xh--0x%xh) : RD\n" , start_adr , end_adr ) ;

	for ( i = start_adr; i < end_adr; i += 4 )
	{
		j = *( ( volatile unsigned char * ) (i+0) ) ;
		if ( j != value0 )
		{
			memError = 1 ;
			break ;
		}

		j = *( ( volatile unsigned char* ) (i+1) ) ;
		if ( j != value1 )
		{
			memError = 1 ;
			break ;
		}

		j = *( ( volatile unsigned char* ) (i+2) ) ;
		if ( j != value2 )
		{
			memError = 1 ;
			break ;
		}

		j = *( ( volatile unsigned char* ) (i+3) ) ;
		if ( j != value3 )
		{
			memError = 1 ;
			break ;
		}

		if ( ( i % 0x10000 ) == 0 )
			SerialTxChar( '.' ) ;
	}

	if ( memError == 0 )
		printf( "\n\nRAM Test is OK!\n" );
	else
	{
		printf( "\n\nMemory Test is FAIL!\n" ) ;
		printf( "  Write the memory address (0x%xh) with data (0x%xh)\n" , i ,
			i ) ;
		printf( "  But read the memory is 0x%xh!\n" , j ) ;
	}

	CacheEnable() ;
	return  0 ;
}

/****************************************************************************
* 名称:LedSet()
* 功能:根据表DISP_TAB来控制LED显示
****************************************************************************/
void LedSet( U32 m )
{
	if ( m & 0x01 )
		IO0SET = IO0SET | ( 1 << 2 ) ;
	else
		IO0CLR = IO0CLR | ( 1 << 2 ) ;

	if ( m & 0x08 )
		IO0SET = IO0SET | ( 1 << 4 ) ;
	else
		IO0CLR = IO0CLR | ( 1 << 4 ) ;

	if ( m & 0x4 )
		IO0SET = IO0SET | ( 1 << 5 ) ;
	else
		IO0CLR = IO0CLR | ( 1 << 5 ) ;

	if ( m & 0x02 )
		IO0SET = IO0SET | ( 1 << 6 ) ;
	else
		IO0CLR = IO0CLR | ( 1 << 6 ) ;

	if ( m & 0x80 )
		IO2SET = IO2SET | ( 1 << 28 ) ;
	else
		IO2CLR = IO2CLR | ( 1 << 28 ) ;

	if ( m & 0x40 )
		IO2SET = IO2SET | ( 1 << 29 ) ;
	else
		IO2CLR = IO2CLR | ( 1 << 29 ) ;

	if ( m & 0x20 )
		IO2SET = IO2SET | ( 1 << 30 ) ;
	else
		IO2CLR = IO2CLR | ( 1 << 30 ) ;

	if ( m & 0x10 )
		IO2SET = IO2SET | ( 1 << 31 ) ;
	else
		IO2CLR = IO2CLR | ( 1 << 31 ) ;
}

/****************************************************************************
* 名称:LedDisp()
* 功能:根据表DISP_TAB来控制LED显示。
****************************************************************************/
void LedDisp( U32 m , U32 delay_time )
{
	while ( m-- )
	{
		LedSet( ~0x01 ) ;
		Delay( delay_time ) ;
		LedSet( ~0x02 ) ;
		Delay( delay_time ) ;
		LedSet( ~0x04 ) ;
		Delay( delay_time ) ;
		LedSet( ~0x08 ) ;
		Delay( delay_time ) ;
		LedSet( ~0x10 ) ;
		Delay( delay_time ) ;
		LedSet( ~0x20 ) ;
		Delay( delay_time ) ;
		LedSet( ~0x40 ) ;
		Delay( delay_time ) ;
		LedSet( ~0x80 ) ;
		Delay( delay_time ) ;
	}
}

U8 Get_Keystoke( void )
{
	if ( ( IO2PIN & ( 1 << 16 ) ) == 0 )
		return 1 ;
	else if ( ( IO2PIN & ( 1 << 17 ) ) == 0 )
		return 2 ;
	else if ( ( IO2PIN & ( 1 << 18 ) ) == 0 )
		return 3 ;
	else if ( ( IO2PIN & ( 1 << 19 ) ) == 0 )
		return 4 ;
	else if ( ( IO2PIN & ( 1 << 20 ) ) == 0 )
		return 5 ;
	else if ( ( IO2PIN & ( 1 << 21 ) ) == 0 )
		return 6 ;
	else if ( ( IO2PIN & ( 1 << 22 ) ) == 0 )
		return 7 ;
	else if ( ( IO0PIN & ( 1 << 30 ) ) == 0 )
		return 8 ;
	else
		return 0 ;
}

int Keystoke_Test( int argc , char* argv[] )
{
	U8 m ;

	printf( "Keystoke test, ESC key to exit\n" ); 
	while ( getkey() != ESC_KEY )
	{
		m = Get_Keystoke() ;
		if ( m != 0 )
		{
			LedSet( ~( 1 << ( m - 1 ) ) ) ;
			PWM5_Set( ( m * 10 ) , ( m * 5 ) ) ;
			Delay( 80 ) ;
			PWM5_Stop() ;
		}
		else
			LedSet( 0xff ) ;
	}

	return 1 ;
}

void MemCfgInit( void )
{
}

void BoardInitStart( void )
{
}

void BoardInitEnd( void )
{
}

void BoardPrepareRun( void )
{
}

void CacheDisable( void )
{
}

void CacheEnable( void )
{
}

void CacheFlush( void )
{
}

U16 GetKeyStatus( void )
{
	return 0 ;
}

⌨️ 快捷键说明

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