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