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

📄 fts.c

📁 ARM入门的好帮手.包含了从简单到相对较复杂的程序.
💻 C
📖 第 1 页 / 共 2 页
字号:
    return ( FALSE ) ;

	return (TRUE ) ;
}
//* End

//*---------------------------------------------------------------------------------------
//* Function Name       : usart_test
//* Object              : Test beetwen USART0 and USART1 with loopback and external cable
//* Input Parameters    : None
//* Output Parameters   : None
//* Functions called    : at91_usart_open, at91_trig_cmd, at91_usart_close
//*						: at91_usart_write, at91_usart_read
//*------------------------------------------------------------------------------------------
int usart_test (void)
//* Begin
{

	StructUSART		*us0_pt = USART0_BASE ;
    StructUSART		*us1_pt = USART1_BASE ;

	u_int	*pt_us_char = (u_int*)0x02020000 ;
	u_int	val_read ;
	int		error = 0 ;
	int		count = 0 ;

	//* -- Configure Serial ports 0 and 1 for internal loopback test
	//*-------------------------------------------------------------
	at91_usart_open  ( &USART0_DESC , (USART_MODE | US_CHMODE_LOCAL_LOOPBACK) , BAUD_RATE , 0x0 ) ;
	us0_pt->US_IDR = 0x3FF ;
	us0_pt->US_RTOR = 0x0 ;
	at91_usart_trig_cmd ( &USART0_DESC , (USART_RESET | USART_ENABLE) ) ;

	at91_usart_open  ( &USART1_DESC , (USART_MODE | US_CHMODE_LOCAL_LOOPBACK) , BAUD_RATE , 0x0 ) ;
	us1_pt->US_IDR = 0x3FF ;
	us1_pt->US_RTOR = 0x0 ;
	at91_usart_trig_cmd ( &USART1_DESC , (USART_RESET | USART_ENABLE) ) ;

	/* -- Test 1 - send from Serial A to Serial A (loopback) -- */
    at91_usart_write (&USART0_DESC, 0x0031);
    while (((us0_pt->US_CSR & 0x1)!=0x1) & (count != 2000))
	{
		//* -- Wait the RXRDY flag high
	        count++;
    }
	at91_usart_read (&USART0_DESC, pt_us_char ) ;
	val_read = *pt_us_char ;
	if ( val_read != 0x0031)
	error++ ;

    /* -- Test 2 - send from Serial B to Serial B (loopback) -- */
    at91_usart_write (&USART1_DESC, 0x0032) ;
	count = 0 ;
	while (((us1_pt->US_CSR & 0x1)!=0x1) & (count != 2000))
	{
		//* -- Wait the RXRDY flag high
	    count++;
    }
	at91_usart_read (&USART1_DESC, pt_us_char ) ;
	val_read = *pt_us_char ;
	if ( val_read != 0x0032)
	error++ ;


	//* -- Configure Serial ports for external cable test
	//* --------------------------------------------------
    /* -- Normal loopback, 1 stop bit, no parity, async., 8 bit character, MCK -- */
    at91_usart_open  ( &USART0_DESC , USART_MODE , BAUD_RATE , 0x0 ) ;


	/* Normal loopback, 1 stop bit, no parity, async., 8 bit character, MCK */
    at91_usart_open  ( &USART1_DESC , USART_MODE , BAUD_RATE , 0x0 ) ;

    //* -- Test 3 - send from Serial A to Serial B (external cable)
    at91_usart_write (&USART0_DESC, 0x0033) ;
	count = 0 ;
	while (((us1_pt->US_CSR & 0x1)!=0x1) & (count != 2000))
	{
		//* -- Wait the RXRDY flag high
	        count++;
    }
	at91_usart_read (&USART1_DESC, pt_us_char ) ;
	val_read = *pt_us_char ;
	if ( val_read != 0x0033)
	error++ ;


    //* -- Test 4 - send from Serial B to Serial A (external cable)
    at91_usart_write (&USART1_DESC, 0x0034) ;
	count = 0 ;
	while (((us0_pt->US_CSR & 0x1)!=0x1) & (count != 2000))
	{
		//* -- Wait the RXRDY flag high
	        count++;
    }

	at91_usart_read (&USART0_DESC, pt_us_char ) ;
	val_read = *pt_us_char ;
	if ( val_read != 0x0034)
	error++ ;

    if (error > 0 )
	return ( FALSE );

	else return ( TRUE );

//* End
}

//*----------------------------------------------------------------------------
//* Function Name       : adc_dac_test
//* Object              : Loopback Test between ADC and DAC
//* Input Parameters    : None
//* Output Parameters   : TRUE or FALSE
//* Functions called    :
//*----------------------------------------------------------------------------
u_int adc_dac_test( void )
//* Begin
{

	u_int	adc_val[4];				 /* ADC result array */
	u_int	intermediate_value = 0;
	u_int	error = 0;
	u_short	i;


	//* First part: VDDCORE measuring with average
	at91_adc_open ( &ADC0_DESC, (ADC_TRGEN_DIS|ADC_TRG_TIOA0|ADC_10_BIT_RES|(PRESCALER_MASK<<8)|ADC_NORMAL_MODE));
	at91_adc_channel_open ( &ADC0_DESC, ADC_CH2 );
	for (i=0 ; i<= AVERAGE_FACTOR ; i++)
	{
		at91_adc_trig_cmd ( &ADC0_DESC, ADC_START  );
		while ((at91_adc_get_status ( &ADC0_DESC ) & ADC_CH2)!=4) {}	; /* Waiting before reading result */
		at91_adc_read ( &ADC0_DESC, adc_val );
		intermediate_value = adc_val[2] + intermediate_value;
	}
	intermediate_value = intermediate_value / AVERAGE_FACTOR ; /* Average computing */

	//* Second part: Range verification
	if ((intermediate_value < LOW_VOLTAGE_LEVEL) | (intermediate_value > HIGH_VOLTAGE_LEVEL))
		error++;

	return (TRUE);

}
//* End

//*----------------------------------------------------------------------------
//* Function Name       : show_ok
//* Object              : Light on the test led during 200ms and return
//* Input Parameters    : <mask> = led showing the test in progress
//* Output Parameters   : None
//* Functions called    : at91_tc_wait_open, at91_pio_write
//*----------------------------------------------------------------------------
void show_ok ( u_int mask )
//* Begin
{

    //* Wait 200 msec
    wait_desc.period = 200000 ;
    at91_wait_open ( &wait_desc );
    //* Switch off the corresponding led
    at91_pio_write (&PIOB_DESC, mask, LED_OFF );
    //* Wait 200 msec
    at91_wait_open ( &wait_desc );
}
//* End

//*----------------------------------------------------------------------------
//* Function Name       : show_error
//* Object              :
//* Input Parameters    : None
//* Output Parameters   : None
//* Functions called    :
//*----------------------------------------------------------------------------
void show_error ( void )
//* Begin
{
    //* Wait 200 msec
    wait_desc.period = 1000000 ;
	at91_wait_open ( &wait_desc ) ;
    //* Light up all the leds
    at91_pio_write (&PIOB_DESC, LED_MASK, LED_ON ) ;
    //* Wait 1 sec
    at91_wait_open ( &wait_desc );
    //* Switch off all the leds
    at91_pio_write (&PIOB_DESC, LED_MASK, LED_OFF ) ;
    //* Wait 200 msec
    wait_desc.period = 200000 ;
    at91_wait_open ( &wait_desc );
    //* Light up all the leds
    at91_pio_write (&PIOB_DESC, LED_MASK, LED_ON ) ;
    //* Wait 1 sec
    wait_desc.period = 1000000 ;
    at91_wait_open ( &wait_desc );
    //* Switch off all the leds
    at91_pio_write (&PIOB_DESC, LED_MASK, LED_OFF ) ;
}
//* End

//*----------------------------------------------------------------------------
//* Function Name           : BootFts
//* Object                  : expect an user action, and start the test
//* Input Parameters        : None
//* Output Parameters       : None
//* Functions called        :
//*----------------------------------------------------------------------------
void BootFts (void )
//* Begin
{
    //* Light off all the LEDs
    at91_pio_write (&PIOB_DESC, LED_MASK, LED_OFF ) ;

    //* Repeat for ever
    for (;;)
    {
        //*------------------
        //* Light on the LED1
        //*------------------
        at91_pio_write (&PIOB_DESC, LED1, LED_ON ) ;
        //* Internal RAM Test
        if ( internal_ram_test () == TRUE )
            show_ok (LED1) ;
        else
            show_error () ;

        //*------------------
        //* Light on the LED2
        //*------------------
        at91_pio_write (&PIOB_DESC, LED2, LED_ON ) ;
        //* External RAM Test
        if ( external_ram_test () == TRUE )
            show_ok (LED2) ;
        else
			show_error () ;

        //*------------------
        //* Light on the LED3
        //*------------------
        at91_pio_write (&PIOB_DESC, LED3, LED_ON ) ;
        //* Flash AT49BV1604 Test
        if ( ext_flash_test () == TRUE )
            show_ok (LED3) ;
        else
			show_error () ;

        //*------------------
        //* Light on the LED4
        //*------------------
        at91_pio_write (&PIOB_DESC, LED4, LED_ON ) ;
        //* Serial EEPROM Test
        if ( serial_eeprom_test () == TRUE )
            show_ok (LED4) ;
        else
            show_error () ;

        //*------------------
        //* Light on the LED5
        //*------------------
        at91_pio_write (&PIOB_DESC, LED5, LED_ON ) ;
        //* SPI Data Flash Test
        if ( spi_dataflash_test () == TRUE )
            show_ok (LED5) ;
        else
            show_error () ;

        //*------------------
        //* Light on the LED6
        //*------------------
        at91_pio_write (&PIOB_DESC, LED6, LED_ON ) ;
        //* SPI EEPROM Test
        if ( spi_eeprom_test () == TRUE )
            show_ok (LED6) ;
        else
            show_error () ;

        //*------------------
        //* Light on the LED7
        //*------------------
        at91_pio_write (&PIOB_DESC, LED7, LED_ON ) ;
        //* Usart Test
        if ( usart_test() == TRUE )
            show_ok (LED7) ;
        else
            show_error () ;

        //*------------------
        //* Light on the LED8
        //*------------------
        at91_pio_write (&PIOB_DESC, LED8, LED_ON ) ;
        //* ADC and DAC Test
        if ( adc_dac_test() == TRUE )
            show_ok (LED8) ;
        else
            show_error () ;

    }//* EndRepeat
//* End
}

⌨️ 快捷键说明

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