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

📄 main.c

📁 ATMEL AT91SAM926x 测试程序。在ADS环境下测试AT91SAM926x串口。
💻 C
字号:
/*---------------------------------------------------------------------------- *         ATMEL Microcontroller Software Support  -  ROUSSET  - *---------------------------------------------------------------------------- * The software is delivered "AS IS" without warranty or condition of any * kind, either express, implied or statutory. This includes without * limitation any warranty or condition with respect to merchantability or * fitness for any particular purpose, or against the infringements of * intellectual property rights of others. *---------------------------------------------------------------------------- * File Name           : main.c * Object              :  * Creation            : HIi   19/05/2005 *---------------------------------------------------------------------------- */#include "main.h"#include <stdio.h>#include "dataflash.h"#include "mci.h"#include "com.h"// Methods defined in mci.cextern AT91S_MCIDeviceStatus 	AT91F_MCI_SDCard_Init(AT91PS_MciDevice);extern void 					AT91F_CfgDevice(void);extern unsigned int 			AT91F_TestMCI(void);// Methods defined in dataflash.cextern int AT91F_Test_SPI_DataFlash(unsigned int);// Methods defined in NandFlash.cextern void AT91F_Test_NandFlash (void);// Methods defined in twi.cextern void AT91F_TestTWI_EEPROM(void);// Methods defined in lib_audio.cextern int AT91F_TestAudio(void);// Methods defined in lib_uhp.cextern int AT91F_TestUHP(void);// Methods defined in usart.cextern 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);}//*----------------------------------------------------------------------------//* \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 + -