📄 main.c
字号:
// ----------------------------------------------------------------------------
// ATMEL Microcontroller Software Support - ROUSSET -
// ----------------------------------------------------------------------------
// DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
// DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ----------------------------------------------------------------------------
// File Name : main.c
// Object : Test function for the Basic File System FAT12 API
// Creation : JCB 15/apr/2005
// Modif :
// ----------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
// Include Standard files
#include "board.h"
#include "po_types.h"
#include "po_kernel.h"
#include "trace.h"
#include "bfsa_flash.h"
#include "bfsa_api.h"
#include "fw_usb.h"
#include "dbgu.h"
// Globals
BOOL bGet = TRUE;
/*****************************************************************
*
*
* S U B - R O U T I N E : menu
*
*-----------------------------------------------------------------
*
* Object :
* This function print a menu on DEBUG COM port to test BFSA.
*
* Argument : NONE
*
* Return value : NONE
*
*****************************************************************/
void menu(void)
{
ULONG status = 0;
char val;
if (bGet)
{
TRACE_INFO( "\n\r-BFSA-\n\r");
TRACE_INFO( "2 mkdir\n\r");
TRACE_INFO( "3 mk file\n\r");
TRACE_INFO( "4 dir\n\r");
TRACE_INFO( "5 cd\n\r");
TRACE_INFO( "6 delete\n\r");
TRACE_INFO( "7 Init\n\r");
TRACE_INFO( "F Format\n\r");
}
if (bGet=AT91F_US_Get(&val))
{
TRACE_INFO( "\n\r");
switch( val )
{
case '2': // mkdir
{
char dirName[10]="";
TRACE_INFO( "mkdir <Name>\n\r");
TRACE_INFO( "Enter name: ");
AT91F_DBGU_scanf(dirName);
TRACE_INFO( "\n\r");
status = BFSA_mkdir(dirName);
if( BFSA_SUCCESS != status )
{
goto FAILURE;
}
TRACE_INFO( "OK\n\r");
}
break;
case '3': // mk file
{
unsigned int ulSize = 0;
int count;
char fileName[10]="";
char FileBuff[256];
char Size[10]="";
char i;
TRACE_INFO( "file <FileName> <Si");
TRACE_INFO( "ze>\n\rEnter name: ");
AT91F_DBGU_scanf(fileName);
TRACE_INFO( "\n\r");
TRACE_INFO( "File size: ");
AT91F_DBGU_scanf(Size );
TRACE_INFO( "\n\r");
i=0;
while( (Size[i] != '\0') && (i != sizeof(Size)) )
{
if( (Size[i]>='0') && (Size[i]<='9') )
{
ulSize *=10;
ulSize += ((unsigned int) Size[i] - '0'); // convert ASCII to INT
i++;
}
else
{
break;
}
}
// Fill buffer
for (count=0; count < sizeof(FileBuff); count++)
{
FileBuff[count] = (unsigned char)count;
}
// Write parts of file
for (count=0;count<ulSize / sizeof(FileBuff); count++)
{
status = BFSA_write( fileName, (char*)FileBuff, sizeof(FileBuff), count );
if( BFSA_FAILURE(status) )
{
goto FAILURE;
}
}
// Write end of file
if (ulSize % sizeof( FileBuff) )
{
status = BFSA_write( fileName, (char*)FileBuff, ulSize % sizeof(FileBuff), ulSize / sizeof(FileBuff) );
if( BFSA_FAILURE(status) )
{
goto FAILURE;
}
}
status = BFSA_SUCCESS;
TRACE_INFO( "OK\n\r");
}
break;
case '4': // dir
{
status = BFSA_dir();
if( BFSA_SUCCESS != status )
{
goto FAILURE;
}
TRACE_INFO( "OK\n\r");
}
break;
case '5': // cd
{
char dirName[10]="";
TRACE_INFO( "cd <DirName> \n\r");
TRACE_INFO( "Enter name: ");
AT91F_DBGU_scanf(dirName);
TRACE_INFO( "\n\r");
status = BFSA_cd(dirName);
if( BFSA_SUCCESS != status )
{
goto FAILURE;
}
TRACE_INFO( "OK\n\r");
}
break;
case '6': // delete
{
char fileName[10]="";
TRACE_INFO( "delete <FileName>");
TRACE_INFO( "\n\r Enter name: ");
AT91F_DBGU_scanf(fileName);
TRACE_INFO( "\n\r");
status = BFSA_delete(fileName);
if( BFSA_SUCCESS != status )
{
goto FAILURE;
}
TRACE_INFO( "OK\n\r");
}
break;
case '7': // Init
{
status = BFSA_init();
if( BFSA_SUCCESS != status )
{
goto FAILURE;
}
TRACE_INFO( "OK\n\r");
}
break;
case 'F': // Format
{
status = BFSA_format();
if( BFSA_SUCCESS != status )
{
goto FAILURE;
}
status = BFSA_init();
if( BFSA_SUCCESS != status )
{
goto FAILURE;
}
TRACE_INFO( "OK\n\r");
}
break;
}
FAILURE:
if( BFSA_SUCCESS != status )
TRACE_INFO( "failed (0x%X)\n\r", (int)status);
}
}
/*****************************************************************
*
* ROUTINE : main function
*
*-----------------------------------------------------------------
*
* Purpose :
*
* Input parameters : NONE
*
* Output parameters :
*
* Global data :
*
*****************************************************************/
#ifdef ADS_COMPIL
void main( void )
#else
void main( void )
#endif
{
int status = INTERNAL_ERROR;
#ifdef USE_LED
unsigned char counter = 0;
#endif
// Enable User Reset and set its minimal assertion to 960 us
AT91F_RSTSetMode( AT91C_BASE_RSTC,AT91C_RSTC_URSTEN | (0x4<<8) );
// Enable Peripheral clock in PMC for PIOA
AT91F_PIOA_CfgPMC();
// Set to 1 output PIO
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, 0xFFFFFFFF );
// Enable PIO in output mode
AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, 0xFFFFFFFF );
// Disable pullup on PIO
AT91F_PIO_CfgPullup( AT91C_BASE_PIOA, 0x00000000 );
#ifdef PULL_UP_USB
// Disable UDP Pull Up (USB_DP_PUP)
#ifdef AT91SAM7A3
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB,AT91C_PIO_PB1);
AT91F_PIO_SetOutput( AT91C_BASE_PIOB, AT91C_PIO_PB1 );
#else
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, AT91C_PIO_PA16 );
#endif
#endif
#if defined (TR_INFO) || defined (TR_WARNING) || defined (TR_ERROR) || defined (TR_FATAL) || defined (TR_DEBUG_H) || defined (TR_DEBUG_M)
// Open PIO for DBGU
AT91F_DBGU_CfgPIO();
// Configure DBGU
AT91F_US_Configure (
(AT91PS_USART) AT91C_BASE_DBGU,
AT91C_MASTER_CLOCK,
AT91C_US_ASYNC_MODE, // mode Register to be programmed
AT91C_DBGU_BAUD, // baudrate to be programmed
0); // timeguard to be programmed
// Enable Transmitter
AT91F_US_EnableTx((AT91PS_USART) AT91C_BASE_DBGU);
AT91F_US_EnableRx((AT91PS_USART) AT91C_BASE_DBGU);
// Disable peripheral clock in PMC for PIOA
//AT91F_PMC_DisablePeriphClock( AT91C_BASE_PMC, (1 << AT91C_ID_PIOA) );
#endif
TRACE_INFO( "\n\r\n\rUSB-BFSA\n\r");
#ifdef USE_LED
AT91F_LED_init( AT91C_BASE_PWMC, AT91C_MASTER_CLOCK );
#endif
bGet = TRUE;
if (USBMS_OK == usbms_init())
{
fw_init(); // Enable USB, PLL ...
for(;;)
{
usb_task();
#if defined (AT91SAM7A3) || defined (AT91SAM9265)
#else
if( AT91C_VREG_PSTDBY != (AT91C_BASE_VREG->VREG_MR & AT91C_VREG_PSTDBY) )
#endif
{
// Normal mode
// menu();
}
#ifdef USE_LED
AT91F_LED_off(0);
if(countLed == 1)
{
counter++;
}
if(counter >= 20 )
{
AT91F_LED_off(1);
counter = 0;
countLed = 0;
}
#endif
}
}
TRACE_INFO( "Error END\n\r");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -