📄 fts.c
字号:
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 + -