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

📄 main.c

📁 SmartARM2400系列开发板全套资料
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************Copyright (c)****************************************************
**                            Guangzhou ZHIYUAN electronics Co.,LTD.
**                                      
**                                 http://www.embedtools.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:               main.c
** Latest modified Date:    2008-05-10
** Latest Version:          1.0
** Descriptions:            ZLG_USB2400 Device 软件包示例程序USB-EEPROM编程器
**
**--------------------------------------------------------------------------------------------------------
** Created by:              ZhengMingyuan
** Created date:            2005-08-08
** Version:                 1.0
** Descriptions:            The original version
**
**--------------------------------------------------------------------------------------------------------
** Modified by:    			LingGuilin         
** Modified date:  			2008-05-10         
** Version:      			1.0           
** Descriptions:   			ZLG_USB2400 Device 软件包示例程序USB-EEPROM编程器
**							       
*********************************************************************************************************/

#include "main.h"

#define TASKSTART_ID            4	      								/*  起动任务的ID				*/
#define TASKSTART_PRIO          TASKSTART_ID							/*  起动任务的优先级			*/
#define TASKSTART_STACK_SIZE    512     								/*  定义起动任务堆栈长度		*/   

#define TASKREAD_ID            5	      								/*  读任务的ID					*/
#define TASKREAD_PRIO          TASKREAD_ID									/*  读任务的优先级			*/
#define TASKREAD_STACK_SIZE    512     									/*  定义读任务堆栈长度			*/   

#define TASKWRITE_ID            6	      								/*  写任务的ID					*/
#define TASKWRITE_PRIO          TASKWRITE_ID							/*  写任务的优先级				*/
#define TASKWRITE_STACK_SIZE    512     								/*  定义写任务堆栈长度			*/ 

OS_STK  TASKSTART_STACK[TASKSTART_STACK_SIZE];							/*  起动任务堆栈				*/
OS_STK  TASKREAD_STACK[TASKREAD_STACK_SIZE];							/*  读任务堆栈					*/
OS_STK  TASKWRITE_STACK[TASKWRITE_STACK_SIZE];							/*  写任务堆栈					*/

OS_EVENT *Write_Sem;													/*  读任务就绪信号量			*/
OS_EVENT *Read_Sem;														/*  写任务就绪信号量			*/

#define PAGE_SIZE_CAT1025	 16											/*  CAT24C04 的页面大小:16字节  */

#define CAT24C04_FirstPage	(0xA4)										/*  CAT24C04的第1页				*/
#define CAT24C04_SecondPage	(0xA6)										/*  CAT24C04的第2页				*/

#define I2C0_VIC         9												/*  I2C0的VIC通道号				*/
#define Usb_VIC          22    											/*  UDC的VIC通道号				*/
#define CMD_READ_24C02	 0x01											/*  读CAT24C04命令				*/
#define CMD_WRITE_24C02	 0x02											/*  写CAT24C04命令				*/

typedef struct tagCmd				
{
	INT8U  cmd;															/*  命令: 1 -- 读; 2 -- 写		*/
	INT8U  addr;														/*  CAT24C04的器件地址			*/
	INT16U offset;														/*  读写CAT24C04的偏移地址		*/
	INT16U len;															/*  读写长度					*/
}I2C_COMMAND;															/*  读写CAT24C04命令结构体		*/

I2C_COMMAND I2C_2;														/*  读写命令结构变量			*/

INT16U ReadCAT24C04 (INT16U usOffset,
                     INT8U *ucRcvBuf,
                     INT16U usReadLen);									/*  CAT24C04读函数				*/
                     
INT16U WriteCAT24C04 (INT16U usOffset,
					  INT8U *pucWriteBuf,
					  INT16U usWriteLen);								/*  CAT24C04写函数				*/
					                       
void TaskStart (void *pdata);											/*  主任务函数原型声明			*/
void TaskRead  (void *pdata);											/*  读任务函数原型声明			*/
void TaskWrite (void *pdata);											/*  写任务函数原型声明			*/
                     
/*********************************************************************************************************
** Function name:		main
** Descriptions:        多任务启动主函数
** input parameters:    无					
** output parameters:	无						
** Returned value:      无
*********************************************************************************************************/
int main (void)
{
    OSInit(); 															/*  初始化uC/OS-II				*/
    OSTaskCreateExt(TaskStart,
                    (void *)0,
                    &TASKSTART_STACK[TASKSTART_STACK_SIZE-1],
                    TASKSTART_PRIO,
                    TASKSTART_ID,
                    &TASKSTART_STACK[0],
                    TASKSTART_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); 		/*  创建起动任务				*/
                              
    OSStart();  														/*  开始多任务调度				*/                                     
}
		
/*********************************************************************************************************
** Function name:		TaskStart
** Descriptions:        接收PC机发送的CAT24C04控制信息
** input parameters:    pdata	传递给任务的参数					
** output parameters:	无						
** Returned value:      无
*********************************************************************************************************/	
void  TaskStart (void *pdata)
{
	INT8U ucErr = 0;
	
	pdata = pdata;

#if OS_CRITICAL_METHOD == 3				
    OS_CPU_SR  cpu_sr;
#endif	
   
    TargetInit();   													/*  目标板初始化 				*/  
    I2cInit(100000);													/*  I2C初始化					*/
    vicIrqFuncSet(Usb_VIC,1,(uint32)usbDevException);					/*  设置USB中断优先级为1		*/
	vicIrqFuncSet(I2C0_VIC,2,(uint32)I2c_Exception);					/*  设置I2C0中断优先级为2		*/						
	
	Write_Sem = OSSemCreate(0);	 	 									/*  创建写等待信号量			*/
	Read_Sem  = OSSemCreate(0);  										/*  创建读等待信号量			*/ 
	
	OSTaskCreateExt(TaskRead,
                    (void *)0,
                    &TASKREAD_STACK[TASKREAD_STACK_SIZE-1],
                    TASKREAD_PRIO,
                    TASKREAD_ID,
                    &TASKREAD_STACK[0],
                    TASKREAD_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); 		/*  创建读任务					*/
    
    OSTaskCreateExt(TaskWrite,
                    (void *)0,
                    &TASKWRITE_STACK[TASKWRITE_STACK_SIZE-1],
                    TASKWRITE_PRIO,
                    TASKWRITE_ID,
                    &TASKWRITE_STACK[0],
                    TASKWRITE_STACK_SIZE,
                    (void *)0,
                    OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); 		/*  创建写任务					*/
	
	ucErr = usbDevInit(3);			  									/*  初始化USB设备控制器			*/
	       
	if (ucErr != 0) {				  									/*  若初始化失败				*/
		while(1);
	}		
		
   	while (1) {
		
		ucErr = usbDevReadPort1((INT8U *)&I2C_2,
		                        sizeof(I2C_COMMAND),
		                        200);									/*  读取CAT24C04控制信息		*/
		
		if (ucErr == OS_NO_ERR) {   					
								
			if (I2C_2.cmd == CMD_READ_24C02) {				
				OSSemPost(Read_Sem);									/*  发送读取CAT24C04信号量		*/
			}
			
			if (I2C_2.cmd == CMD_WRITE_24C02) {
				OSSemPost(Write_Sem);									/*  发送写入CAT24C04信号量		*/
			}
		} 	
	 
		OSTimeDly(10);													/*  延时1个滴嗒					*/
	}
}

/*********************************************************************************************************
** Function name:		TaskRead
** Descriptions:        等待读命令,从CAT24C04读取数据后通过逻辑端点2发送到PC机
** input parameters:    pdata	传递给任务的参数					
** output parameters:	无						
** Returned value:      无
*********************************************************************************************************/
void TaskRead (void *pdata)
{
	#if OS_CRITICAL_METHOD == 3         
    	OS_CPU_SR  cpu_sr;
	#endif
	
	INT8U 	ucErr = 0;
	INT8U 	ucAck = 1;
	INT8U 	ucRcvBuf[514];			  		
				  	
	INT16U 	usReadLen =0;
	
	for (;;) {
	 
    	OSSemPend(Read_Sem,0,&ucErr);									/*  等待读信号量				*/
    	
    	ucErr = usbDevWritePort1(&ucAck,1,200);							/*  应答PC主机					*/
    	
    	if (ucErr == USB_NO_ERR) {			
    		 																	   			
    		usReadLen = ReadCAT24C04 (I2C_2.offset,
    		                          &ucRcvBuf[2],
    		                          I2C_2.len);						/*  从CAT24C04读取数据			*/													
    		
    		ucRcvBuf[0] = (INT8U)(usReadLen / 256);						/*  成功读取字节数高字节		*/
    		ucRcvBuf[1] = (INT8U)(usReadLen % 256);						/*  成功读取字节数低字节		*/
  	 		
  	 		usbDevWritePort2(ucRcvBuf,
  	 		                 usReadLen + 2,
  	 		                 200);										/*  向PC机发送已读取数据		*/
   	  	}
    }
}

/*********************************************************************************************************
** Function name:		TaskWrite
** Descriptions:        等待写命令,通过逻辑端点2从PC机读取数据并将其写入CAT24C04
** input parameters:    pdata	传递给任务的参数					
** output parameters:	无						
** Returned value:      无

⌨️ 快捷键说明

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