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

📄 main.c

📁 SmartARM2400系列开发板全套资料
💻 C
字号:
/****************************************Copyright (c)****************************************************
**                         Guangzhou ZHIYUAN electronics Co.,LTD.                               
**                                     
**                               http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**--------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
*********************************************************************************************************/
#include "main.h"

/*********************************************************************************************************
  TASK0 任务ID、优先级、堆栈设置及函数声明                                
*********************************************************************************************************/
#define TASK0_ID            11                                          /* 任务的ID                     */
#define TASK0_PRIO          TASK0_ID                                    /* 任务的优先级                 */
#define TASK0_STACK_SIZE    512                                         /* 定义用户堆栈长度             */
OS_STK  TASK0_STACK[TASK0_STACK_SIZE];                                  /* 定义任务0 堆栈               */
void    TASK0(void *pdata);                                             /* 声明任务0                    */

OS_STK  TaskFileStk[512];
/*********************************************************************************************************
** Function name:       main
** Descriptions:        主函数
** Input parameters:    None
** output parameters:   None
** Created Date:        
*********************************************************************************************************/
int main (void)
{
	OSInit(); 
    OSTaskCreateExt(TASK0,
                    (void *)0,
                    &TASK0_STACK[TASK0_STACK_SIZE-1],
                    TASK0_PRIO,
                    TASK0_ID,
                    &TASK0_STACK[0],
                    TASK0_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); 
    OSStart();    
    return 0;                                   
}

#define N       1024
INT8U GcWritFileData[N];
INT8U GcReadFileData[N];	
INT8U GcStr[] = "USB OTG---Designed by ZLGMCU\r\n";
/*********************************************************************************************************
** Function name:       TASK0
** Descriptions:        None
** input parameters:    None
** output parameters:   None
*********************************************************************************************************/

void TASK0 (void *pdata)
{
    char   cBuf1[4];
    char   cBuf[40];
    char   cStrBuf[28];
    HANDLE FHandle;
    uint32 j, uiLen1;
	INT8U  ucErr;
	
	pdata = pdata;
#if OS_CRITICAL_METHOD == 3				
    OS_CPU_SR  cpu_sr;
#endif	
    TargetInit();     
    
    PINSEL7  = PINSEL7 & ~(0x03 << 28);                                 /*  峰鸣器端口设置              */
    FIO3DIR |= 1 << 30;
    FIO3SET  = 1 << 30;
    
    ramdiskFormat();                                                    /*  大容量类存储器格式化        */
	ucErr = otgInit(2, 3, 4);
    if (ucErr != TRUE) {
        while (1);
    }
    
    OSTaskCreate(OSFileTask, (void *)0, &TaskFileStk[511], 5);
    
    OSTimeDly(1);

    strcpy(cBuf1, "rw");
    while (otgGetCurRole() != OTG_ROLE_HOST) {                          /*  等待当前角色为主机          */
        OSTimeDly(10);
    }
    
    j = 0;
    while (!otgIsDeviceReady()) {                                       /*  等待枚举完设备              */
        OSTimeDly(10);
        if (j++ > 200) {
            j = 0;
            USBDEBUG_SENDSTR("\r\nwait device ready...\r\n");
        }
    }

    OSAddFileDriver(usbCammand);			                            /*  增加ATA设备0                */
    
    for (j = 0; j < N; j++) {
        GcWritFileData[j] = GcStr[j % (sizeof(GcStr) - 1)];
    }

    sprintf(cBuf, "a:\\OTG.txt");
    FHandle = OSFileOpen(cBuf, cBuf1);                                  /*  打开文件                    */
    if (FHandle == 0xFF) {
        UART0_SendStr("\r\n\tOSFileOpen failed!\r\n");
    }
    OSFileSeek(FHandle, 0, SEEK_END);                                   /*  文件指针移到文件末尾        */
    uiLen1 = OSFileWrite(GcWritFileData, sizeof(GcWritFileData), FHandle);
                                                                        /*  写入文件                    */
    OSFileClose(FHandle);
    if (uiLen1 > 0) {
        OSAllCacheWriteBack();
    } 
    if (uiLen1 >= sizeof(GcWritFileData)) {                             /*  写文件成功                  */
        sprintf(cStrBuf, "\r\nWritefile sucess!");
        UART0_SendStr(cStrBuf);
    } else {
        UART0_SendStr("\r\nWrite file failed!\r\n");
    }
    
    FHandle = OSFileOpen(cBuf, cBuf1);                                  /*  打开文件                    */
    if (FHandle == 0xFF) {
        UART0_SendStr("\r\n\tOSFileOpen failed!\r\n");
    }
    OSFileSeek(FHandle, 0, SEEK_SET);                                   /*  文件指针移到文件头部        */
    uiLen1 = OSFileRead(GcReadFileData, sizeof(GcReadFileData), FHandle);
                                                                        /*  读出文件                    */
    OSFileClose(FHandle);
    if (uiLen1 >= sizeof(GcReadFileData)) {                             /*  读文件成功                  */
        sprintf(cStrBuf, "\r\nReadfile sucess");
        UART0_SendStr(cStrBuf);
    } else {
        UART0_SendStr("\r\nRead file failed!\r\n");
    }
    
    if (memcmp(GcReadFileData, GcWritFileData, N)) {
        UART0_SendStr("\r\nVerify file failed!\r\n");
    } else {
        UART0_SendStr("\r\nVerify file sucessed!\r\n");
    }
    
	OSTimeDly(100);
	OSRemoveFileDriver(0);                                              /*  移除设备                    */
    OSTimeDly(5);
    if (otgGetDeviceAB() == OTG_DEVICE_A) {                             /*  当前设备为A设备             */
        otgHNPStart();                                                  /*  启动HNP,切换主从机角色      */
    } else {
        ucErr = otgRetControlToA();                                     /*  否则为B设备,归还总线控制权  */
        if (ucErr == TRUE) {
            FIO3CLR = 1 << 30;
            OSTimeDly(200);
            FIO3SET = 1 << 30;
        }
    }
    while (1) {                                                         
        OSTimeDly(50);
    }
}

/*********************************************************************************************************
  END FILE
*********************************************************************************************************/

⌨️ 快捷键说明

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