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

📄 main.c

📁 SmartARM2400系列开发板全套资料
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.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"

#define CFCARD_ID            11      									/* 任务的ID						*/
#define CFCARD_PRIO          CFCARD_ID									/* 任务的优先级					*/
#define CFCARD_STACK_SIZE    256     									/* 定义用户堆栈长度  			*/ 

#define Uart0_ID            12      									/* 任务的ID						*/
#define Uart0_PRIO          Uart0_ID									/* 任务的优先级					*/	
#define Uart0_STACK_SIZE    512     									/* 定义用户堆栈长度  			*/ 
   

OS_STK  CFCARD_STACK[CFCARD_STACK_SIZE];
OS_STK  Uart0_STACK[Uart0_STACK_SIZE];


void CFCARD(void *pdata);												/*	CF卡驱动任务,优先级11		*/
void Uart0(void *pdata);												/*	通信任务,优先级12			*/




OS_EVENT *poeUart0ReviceSem ;  											/* 串口接收中断同步信号量		*/                                        
OS_EVENT *mbox_Protocol ;												/* 协议消息邮箱					*/
typedef struct _CFProtocol {
    uint16	SectorCount;												/* 协议的扇区数					*/
   	uint32	SectorNumber;												/* 协议的扇区号					*/
	uint32	ReceiveData;												/* 接收到数据的字节数			*/
	uint8 	RetData,buff[15];											/* 协议的状态及缓存				*/
	uint8	CommandCode;												/* 协议的命令代码				*/

} CFPROTOCOL;

typedef struct _IDENTIFY_DATA {
	uint16 GeneralConfiguration;            // 00  	 普通设置-CF卡标志0x848A
	uint16 NumberOfCylinders;               // 1   	 默认柱面数
	uint16 Reserved1;                       // 2
	uint16 NumberOfHeads;                   // 3   	 默认磁头数
	uint16 UnformattedBytesPerTrack;      	// 4   	 在2.0规范已不使用
	uint16 UnformattedBytesPerSector;     	// 5   	 在2.0规范已不使用
	uint16 SectorsPerTrack;                 // 6   	 每磁道默认扇区数
	uint32 SectorsPerCard;                  // 7-8 	 每卡扇区数(Word 7=MSW,Word 8=LSW)
	uint16 VendorUnique;					// 9 	 在2.0规范已不使用
	uint16 SerialNumber[10];                // 10-19 ASCII序列号(靠右填写)
	uint16 BufferType;                      // 20 	 在2.0规范已不使用
	uint16 BufferSectorSize;                // 21    在2.0规范已不使用
	uint16 NumberOfEccBytes;                // 22    读/写长指令时的ECC字节数
	uint16 FirmwareRevision[4];             // 23-26 ASCII固件版本。大端格式
    uint16 ModelNumber[20];                 // 27-46 ASCII模式号(靠左填写),大端格式
    uint16 MaximumBlockTransfer;            // 47    多重 读/写指令最大扇区号。
    uint16 Reserved2;                    	// 48    
    uint16 Capabilities;                    // 49    
    uint16 Reserved3;                       // 50    
       
    uint16 PioCycleTimingMode;             	// 51    PIO数据传输周期时序模式

    uint16 DmaCycleTimingMode;             	// 52    在2.0规范已不使用
    uint16 TranslationFieldsValid;          // 53    0位为1,Word54 to 58 有效;1位为1,Word64 to 70 有效

    uint16 NumberOfCurrentCylinders;      	// 54    当前柱面数
    uint16 NumberOfCurrentHeads;            // 55    当前磁头数
    uint16 CurrentSectorsPerTrack;          // 56    当前每磁道扇区数
    uint32 CurrentSectorCapacity;           // 57-58 当前扇区容量(LBAs)(Word 58=MSW,Word 57=LSW)

    uint16 CurrentMultiSectorSetting;       // 59    位8为1,则位0-7,指出可多扇区读写的扇区数
    uint32 UserAddressableSectors;          // 60-61 LAB模式下可被寻址的扇区数
    uint16 Reserved4[2] ;           		// 62-63 
    uint16 AdvancedPIOModes ;               // 64    在2.0规范使用
    uint16 Reserved6[2] ;         			// 65-66
	uint16 MinimumPIOCycleTime;             // 67    非流控制下最小PIO传输周期时间
	uint16 MinimumPIOCycleTimeIORDY; 		// 68    IORDY流控制小最小PIO传输周期时间
    uint16 Reserved7[10];                   // 69-79
    uint32 AtaVersion;           			// 80-81 CF卡返回0
    uint16 FeaturesCommandSupported[3];		// 82-84 特征/命令集技持
    uint16 FeaturesCommandEnabled[3];    	// 85-87 特征/命令集使能
    uint16 Reserved8;       				// 88    
    uint16 MajorRevision;                   // 89    安全单位完全擦除的时间要求
    uint16 MinorRevision;                   // 90    增强型安全单位完全擦除的时间要求
    uint16 PowerManagementValue;			// 91	 当前高级电源管理值					
    uint16 Reserved9[36];                   // 92-127
    uint16 SecurityStatus;					// 128   安全状态
   	uint16 VendorUniqueBytes[32];			// 129-159
    uint16 PowerRequirementDescription; 	// 160   电源要求描述
    uint16 Reserved10;						// 161
    uint16 KeyManagementSupported;        	// 162   按键管理表
    uint16 Reserved11[83];                  // 163-255

} CF_IDENTIFY_DATA, *PCF_IDENTIFY_DATA;

#define CF_BUFSIZE     0x10000
uint8 GucWData[CF_BUFSIZE];
uint8 GucRData[CF_BUFSIZE];
	
DISK_PARAMETER GdpData;
char cUartArg[] = "BaudRate=19200 DataBits=8 StopBits=1 Parity=0 RtsControl=0";
extern INT16U ataCommand (INT8U ucCommand, void *vpParameter);
/*********************************************************************************************************
** Function name : main
** Descriptions  : 主函数
** Input         : 无 
** Output        : 无 
** Created Date  : 2006-04-11
********************************************************************************************************/
int main (void)
{
    OSInit(); 
    OSTaskCreateExt(CFCARD,
                    (void *)0,
                    &CFCARD_STACK[CFCARD_STACK_SIZE-1],
                    CFCARD_PRIO,
                    CFCARD_ID,
                    &CFCARD_STACK[0],
                    CFCARD_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); 
                              
    OSStart();                                       
}



/*********************************************************************************************************
* 名称:ASCII_TO_HEX()
* 功能:ASCII转16进制数
**********************************************************************************************************/
uint8 ASCII_TO_HEX(uint16 ASCII)
{	uint8 data;
	uint8  HEX;
	
	data=(uint8)ASCII;
	if(data>'9')
		data=data-'A' + 0x0a;
	else
		data=data-'0';
	HEX = data;
		
	data=(uint8)(ASCII>>8);
	if(data>'9')
		data=data-'A' + 0x0a;
	else
		data=data-'0';
	HEX |= data<<4; 
	
	return HEX;
}

/*********************************************************************************************************
** 函数名称: RetStateToPC
** 功能描述: 返回指令执行状态到PC机
** 输 入: 无
** 输 出: 无
** 全局变量: 无
********************************************************************************************************/
void RetStateToPC(uint8 RetData)
{
	uint8 RetData2PC[7]={'S','T','A','T','E',':','N'};					/*	初始化返回到PC的状态		*/
	if(RetData)
	{
		RetData2PC[6]='Y';												/*	指令正常完成				*/
	}
	uartWrite (UART0, RetData2PC, sizeof(RetData2PC), NULL);
}


void SendDriveInfo(PCF_IDENTIFY_DATA DeviceInfo)
{
	uartWrite (UART0, (uint8*)DeviceInfo->ModelNumber, 40, NULL);		/* 发送设备型号					*/
	uartWrite (UART0, (uint8*)DeviceInfo->SerialNumber, 20, NULL);		/* 发送设备序列号				*/
	uartWrite (UART0, (uint8*)&DeviceInfo->CurrentSectorCapacity, 4, NULL);
																		/* 发送设备总扇区数				*/
}


/********************************************************************************************************
** Function name: CFCARD
** Descriptions:  无
** Input:         无
** Output:        无 
*********************************************************************************************************/
extern uint8 ATA_IdentifyDrive(uint8,uint8*);

void CFCARD	(void *pdata)
{
    int i;
    INT8U err;
    uint8 ucDevice;
    uint16 usRet;
    uint8 uiNUM;
    CFPROTOCOL *CFProtocol;

#if OS_CRITICAL_METHOD == 3												
    OS_CPU_SR  cpu_sr;
#endif	
    /*
     *   外部总线配置
     */
#if CF_EPC2468_EN

    PINSEL9 = 0x01<<28;                                                 /*  CS0(4.30)                   */
    PINSEL6 = 0x55555555;                                               /*  D0--D15                     */
    PINSEL8 = 0x55555555;    											/*  A0--A15 					*/
    PINSEL9 |= 0x00055555;                                              /*  A19--A23,nOE,nWE            */
    PINMODE5 |= (0X03<<18);                                             /*  P2.25下拉					*/
    
    EMCControl = 0x01;                                                  /*  使能EMC、禁止映象           */
    EMCStaticConfig0 = 0x00000181;                                      /*  字节状态位PB为1,nOE读、nWR写,
                                                                        16位数据总线,使用延时      	*/ 
#endif

    TargetInit();      
   	pdata = pdata;	   
  	OSTaskCreateExt(Uart0,
                    (void *)0,
                    &Uart0_STACK[Uart0_STACK_SIZE-1],
                    Uart0_PRIO,
                    Uart0_ID,
                    &Uart0_STACK[0],
                    Uart0_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  
    /*

⌨️ 快捷键说明

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