📄 main.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 + -