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

📄 main.c

📁 关于测试at91sam9260的各种驱动和功能的测试源代码。
💻 C
字号:
/*************************************** Copyright (c) *************************************************
*
*			            POLAR STAR
*				   北天星国际有限公司
*				   http://www.po-star.com
*
*文 件 名: main.c    
*
*编译环境:ADS1.2
*
********************************************************************************************************/


#include "main.h"
#include <stdio.h>
#include "dataflash.h"
#include "mci.h"
#include "com.h"

// Methods defined in mci.c
extern AT91S_MCIDeviceStatus 	AT91F_MCI_SDCard_Init(AT91PS_MciDevice);
extern void 					AT91F_CfgDevice(void);
extern unsigned int 			AT91F_TestMCI(void);

// Methods defined in dataflash.c
extern int AT91F_Test_SPI_DataFlash(unsigned int);

// Methods defined in NandFlash.c
extern void AT91F_Test_NandFlash (void);

// Methods defined in twi.c
extern void AT91F_TestTWI_EEPROM(void);

// Methods defined in lib_audio.c
extern int AT91F_TestAudio(void);

// Methods defined in lib_uhp.c
extern int AT91F_TestUHP(void);

// Methods defined in usart.c
extern void AT91F_TestCOMPorts(void);


extern AT91S_MciDevice	MCI_Device;

char message[AT91C_CB_SIZE];

//*----------------------------------------------------------------------------
//* \fn    AT91F_TestPowerLED
//* \brief 
//*----------------------------------------------------------------------------
void AT91F_TestLED(void)
{
    volatile int dummy, i;
    
    AT91F_DBGU_Printk("\n\r-I- Step 2. Power and USER LEDs must blink !\n\r");

    // Configure PIO Line corresponding to PA23
    AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, LED_POWER);
    // Configure PIO Line corresponding to LEDs
    AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, LED_MASK);
    
    AT91F_DBGU_Printk("Hit a key to stop the LEDs test!\n\r");
    
    while(!AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU))
    {
      AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, LED_POWER);
      AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, LED_MASK);
      for (i=0; i<1000000; i++);
      AT91F_PIO_SetOutput(AT91C_BASE_PIOA, LED_POWER);
      AT91F_PIO_SetOutput(AT91C_BASE_PIOA, LED_MASK);
      for (i=0; i<1000000; i++);      
    }

    dummy = AT91F_US_GetChar((AT91PS_USART)AT91C_BASE_DBGU);
}


void AT91F_Test_SPI_MCP2515(void)
{
	volatile unsigned int dummy;
    int uResult;
    
    AT91F_DBGU_Printk("\n\r-I- Test SPI1 & MCP2515SPI Device\n\r");
	AT91F_DBGU_Printk("Press a key when ready...\n\r");

   	while(!AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU)){};
	dummy = AT91F_US_GetChar((AT91PS_USART)AT91C_BASE_DBGU);

	// DataFlash device is on Chip Select 1
    uResult = AT91F_Test_SPI_DataFlash(AT91C_SPI_PCS1_DATAFLASH);

}

//*----------------------------------------------------------------------------
//* \fn    AT91F_TestButton
//* \brief 
//*----------------------------------------------------------------------------
void AT91F_TestButton(void)
{
	volatile unsigned int dummy;
	unsigned int uFlag, uTest, i;

    AT91F_DBGU_Printk("\n\r-I- Step 3. User Buttons Test\n\r");
    AT91F_DBGU_Printk("\nNote: If application is in a deadlock, hit a key!!!\n\n\r");

	AT91F_PIOA_CfgPMC ();
	AT91F_PIO_CfgInput(AT91C_BASE_PIOA,	BUTTON_MASK);

	for (i=3; i<5; i++)
	{
		uTest = TRUE;
	
		switch (i)
		{
			case 3: uFlag = BUTTON3;
					break;
			case 4: uFlag = BUTTON4;
					break;
		}
	
		sprintf (message, "Push Button %d", i);
	    AT91F_DBGU_Printk(message);
	    
	    while(AT91F_PIO_IsInputSet(AT91C_BASE_PIOA, uFlag))
	    {
	    	if (AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU))
	    	{
			    dummy = AT91F_US_GetChar((AT91PS_USART)AT91C_BASE_DBGU);
				AT91F_DBGU_Printk("      Test FAIL\n\r");
				uTest = FALSE;
				break;
    		}
		}

		if (uTest == TRUE)
			AT91F_DBGU_Printk("      Test OK\n\r");
			
	}

	AT91F_DBGU_Printk("\n");
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_TestSDCardInterface
//* \brief 
//*----------------------------------------------------------------------------
void AT91F_TestSDCardInterface(void)
{
	volatile unsigned int dummy;
	
    AT91F_DBGU_Printk("\n\r-I- Step 7. SDCard/MMC Card/Dataflash Card Interface\n\r");
   	AT91F_DBGU_Printk("Please insert an SDCard in the appropriate connector\n\r");
	AT91F_DBGU_Printk("Press a key when ready...\n\r");

	while(!AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU)){};
	dummy = AT91F_US_GetChar((AT91PS_USART)AT91C_BASE_DBGU);

    // Init MCI for MMC and SDCard interface    
    // AT91F_MCI_CfgPIO();
    
    // Configure SPI SCK in input to avoid conflict
    AT91F_PIO_CfgInput(AT91C_BASE_PIOA, AT91C_PA2_SPI0_SPCK);

    AT91F_PIO_CfgPeriph(
		AT91C_BASE_PIOA, // PIO controller base address
		((unsigned int) AT91C_PA8_MCCK    ), // Peripheral A
		((unsigned int) AT91C_PA0_MCDB0   ) |
		((unsigned int) AT91C_PA5_MCDB1   ) |
		((unsigned int) AT91C_PA4_MCDB2   ) |
		((unsigned int) AT91C_PA1_MCCDB   ) |
		((unsigned int) AT91C_PA3_MCDB3   )); // Peripheral B
	    	
    AT91F_MCI_CfgPMC();
    AT91F_PDC_Open(AT91C_BASE_PDC_MCI);

    // Init MCI Device Structures
    AT91F_CfgDevice();

    // Disable the MCI
    AT91C_BASE_MCI->MCI_CR = AT91C_MCI_SWRST;

    // PDC mode , SDCARD mode , MCI Clock = MCK/8
    AT91F_MCI_Configure(AT91C_BASE_MCI,
                        AT91C_MCI_DTOR_1MEGA_CYCLES,
                        ((AT91C_MCI_CLKDIV & 0x1) | (AT91C_MCI_PWSDIV & (0x7 <<8)) | AT91C_MCI_PDCMODE),// 12.5 MHz for MCK = 100MHz (CLKDIV = 7)
                        AT91C_MCI_SDCARD_4BITS_SLOTB);
    
    if(AT91F_MCI_SDCard_Init(&MCI_Device) != AT91C_INIT_OK)
    {
    	AT91F_DBGU_Printk("-E- Test FAILED: MISO0/MCDB0, SPCK0/MCCK may be concerned\n\r");
        return;
    }
    
    // Enter Main Tests	
    if(AT91F_TestMCI() != TRUE)
    {
    	AT91F_DBGU_Printk("-E- Test FAILED: MISO0/MCDB0, MCDB1, MCDB2 and/or MCDB3 may be concerned\n\r");
        return;
    }
    
    AT91F_DBGU_Printk("-I- Test OK\n\r");
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_Test_DataFlash
//* \brief 
//*----------------------------------------------------------------------------
void AT91F_Test_DataFlash(void)
{
	volatile unsigned int dummy;
    int uResult;
    
    AT91F_DBGU_Printk("\n\r-I- Step 6. Test SPI0 & DataFlash Device\n\r");
	AT91F_DBGU_Printk("Press a key when ready...\n\r");

   	while(!AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU)){};
	dummy = AT91F_US_GetChar((AT91PS_USART)AT91C_BASE_DBGU);

	// DataFlash device is on Chip Select 1
    uResult = AT91F_Test_SPI_DataFlash(AT91C_SPI_PCS1_DATAFLASH);

    switch (uResult)
    {
        case 0:   AT91F_DBGU_Printk("-I- Test OK\n\r");
                  break;

        case -1:  AT91F_DBGU_Printk("-E- DataFlash not recognized or not connected...\n\r");
                  break;

        case -2:  AT91F_DBGU_Printk("-E- Test FAILED...\n\r");
                  break;
    }
}

//*----------------------------------------------------------------------------
//* \fn    AT91F_TestShutDown
//* \brief 
//*----------------------------------------------------------------------------
void AT91F_TestShutDown(void)
{
	volatile unsigned int dummy;

    AT91F_DBGU_Printk("\n\r-I- Step 11. ShutDown Controller Test\n\r");
	AT91F_DBGU_Printk("-I- Push a button to pass in ShutDown Mode\n\r");
	AT91F_DBGU_Printk("-I- LCD and User LEDs will turn off\n\r");
    // Turn ON LEDs
    AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, LED_MASK);
    
	// Configure Buttons
	AT91F_PIOA_CfgPMC ();
	AT91F_PIO_CfgInput(AT91C_BASE_PIOA,	BUTTON_MASK);

	// Wait a User Button is pushed
    while(AT91F_PIO_IsInputSet(AT91C_BASE_PIOA, BUTTON_MASK) == BUTTON_MASK);

	AT91F_DBGU_Printk("-I- Push WakeUp button to wake up processor\n\r");
	AT91F_DBGU_Printk("-I- RomBoot should start...\n\n\r");

	// Wait message is displayed
	for (dummy = 0; dummy < 5000000; dummy++);

	AT91C_BASE_SHDWC->SHDWC_SHCR = ((0xA5 << 24) + AT91C_SHDWC_SHDW);
}

//*----------------------------------------------------------------------------
//* Function Name       : main
//* Object              : Main function
//* Input Parameters    : none
//* Output Parameters   : True
//*----------------------------------------------------------------------------*/
int main(void)
{
	unsigned int uKey = 0;

    while ((uKey != 'S') && (uKey != 's'))
    {
        // Reset Tx and Rx
        AT91F_US_ResetTx((AT91PS_USART) AT91C_BASE_DBGU);
        AT91F_US_ResetRx((AT91PS_USART) AT91C_BASE_DBGU);
    
        AT91F_DBGU_Printk("\n\n\r======================================\n\r");
        AT91F_DBGU_Printk("AT91SAM9260-EK Test BOARD\n\r");
        AT91F_DBGU_Printk("======================================\n\r");
    
        AT91F_DBGU_Printk("-I- Step 1. DBGU Interface: Test OK\n\r");
        
		 AT91F_TestLED();				// Step 2		// OK
		 		
		// AT91F_TestButton();				// Step 3		// OK
		 AT91F_TestCOMPorts();			// Step 4 & 5	// OK
		 AT91F_Test_DataFlash();			// Step 6		// OK
		 AT91F_TestSDCardInterface();	// Step 7		// OK
		// AT91F_Test_NandFlash();			// Step 8		// OK 	(CLE = A22 and ALE = A21)
		 AT91F_TestTWI_EEPROM();			// Step 9		// OK
		// AT91F_TestUHP();				// Step 10		// PB!!!
		//AT91F_TestAudio();				// Step 11	// Change Frequency	
		
        AT91F_DBGU_Printk("\n\r======================================\n\r");
        AT91F_DBGU_Printk("END OF TESTS\n\r");
        AT91F_DBGU_Printk("======================================\n\r");
    
        AT91F_DBGU_Printk("Hit a key to restart previous tests\n\n\r");
		AT91F_DBGU_Printk("Or hit 's' to start shutdown test\n\r");
		AT91F_DBGU_Printk("The Application will terminate...\n\r");

        uKey = AT91F_Wait4KeyPressed();
	}

	AT91F_TestShutDown();			// Last step (need to reboot)
}

⌨️ 快捷键说明

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