亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? arm uC/OS-II E2PROM usb
?? C
字號:

#include "config.h"					//包含LPC22xx模板的配置頭文件
#include "D12Driver.h"				//包含PDIUSBD12驅動程序的頭文件
#include "I2C.h"					//包含I2C總線中間件的頭文件

#define PAGE_SIZE_24C02	 16			//CAT24WC02的頁面大小:16字節
#define CMD_READ_24C02	 0x01		//讀CAT24WC02命令
#define CMD_WRITE_24C02	 0x02		//寫CAT24WC02命令

OS_STK  TaskStartStk[128];			// 操作系統起動任務堆棧
OS_STK  ReadTaskStk[256];			// 讀任務堆棧
OS_STK  WriteTaskStk[256];			// 寫任務堆棧

OS_EVENT *Write_Sem;				// 讀任務就緒信號量
OS_EVENT *Read_Sem;					// 寫任務就緒信號量

void Init_I2CInt(void);				//I2C中斷初始化程序
INT16U Read_24WC02(INT8U addr,INT8U offset,INT16U len,INT8U *recbuff);
INT16U Write_24WC02(INT8U addr,INT8U offset,INT16U len,INT8U *sendbuff);

void TaskStart(void *pdata);	
void TaskRead(void *pdata);
void TaskWrite(void *pdata);

typedef struct tagCmd			//讀寫CAT24WC02命令結構體
{
	INT8U  cmd;					//命令: 1 -- 讀; 2 -- 寫
	INT8U  addr;				//I2C器件CAT24WC02的地址
	INT8U  offset;				//讀寫CAT24WC02存儲空間的偏移地址
	INT16U len;					//讀寫長度
}I2C_COMMAND;

I2C_COMMAND I2C;				//讀寫命令結構變量

extern void Usb_Handler(void);
/************************************************************
** 函數名稱: void Init_D12Int(void)
** 功能描述: 初始化D12的中斷,設置D12的中服務程序地址
** 輸   入: 無
** 輸   出: 無
************************************************************/
void Init_D12Int(void)
{
	VICVectCntl1 = (0x20 | 0x0E);			//EINT0通道分配到IRQ slot 1
   	VICVectAddr1 = (INT32U)Usb_Handler;		//設置EINT0向量地址
   	VICIntEnable = 1 << 14;					//允許EINT0
}

/**********************************
			主函數
***********************************/
int main (void)
{
    OSInit();                               //初始化 uC/OS-II
    
    OSTaskCreate(TaskStart,(void *)0, &TaskStartStk[127], 3);
    							           //創建起動任務
    OSStart();                             //開始多任務
}

/**********************************
*       起動任務,優先級 3
***********************************/
void  TaskStart (void *pdata)
{
#if OS_CRITICAL_METHOD == 3          /* Allocate storage for CPU status register */
    OS_CPU_SR  cpu_sr;
#endif
	INT8U err;
	pdata = pdata;               	 /* Prevent compiler warning */

	TargetInit();          		 	 // μC/OS-II定時器及相關中斷初始化
	I2cInit(30000);				 	 // I2C控制器初始化	
	Init_I2CInt();					 // 初始化I2C的中斷
	Init_D12Int();					 // 配置D12的中斷
	err = Init_D12();			  	 // PDIUSBD12初始化
	
	Write_Sem = OSSemCreate(0);	 	 // 創建控制讀寫任務的兩個信號量,信號量初值為0
	Read_Sem  = OSSemCreate(0);   
	OSTaskCreate(TaskRead,(void *)0, &ReadTaskStk[255], 1);	   	//創建讀任務
	OSTaskCreate(TaskWrite,(void *)0, &WriteTaskStk[255], 2);	//創建寫任務
			            
	if (err == 0)				  	 // 如果初始化PDIUSBD12成功,才創建傳輸控制處理任務
  		OSTaskCreate(TaskSetup,(void *)0, &TaskSetupStk[127], 0);
  		
  	for (;;){
  		err = ReadPort1(sizeof(I2C_COMMAND),(INT8U *)&I2C,200);		//等待來自PC機的命令
		if (err == OS_NO_ERR){						//接收正確
			if (I2C.cmd == CMD_READ_24C02)				
				OSSemPost(Read_Sem);				//使讀任務就緒
			if (I2C.cmd == CMD_WRITE_24C02)
				OSSemPost(Write_Sem);				//使寫任務就緒
		} 		 
    }  
 }

/*************************************************
** 函數名稱: void TaskRead(void *pdata)
** 功能描述: 寫 CAT24WC02 任務,優先級為1
** 輸 入:   無
** 輸 出:   無
**************************************************/
void TaskRead(void *pdata)
{
#if OS_CRITICAL_METHOD == 3           /* Allocate storage for CPU status register */
    OS_CPU_SR  cpu_sr;
#endif
	INT8U err,buff[260];			  //接收緩沖區
	INT8U ack = 0x01;				  //應答字
	INT16U reclen;
	
	for (;;){ 
	
    	OSSemPend(Read_Sem,0,&err);										//等待TaskStart讀命令
    	err = WritePort1(1,&ack,200);									//應答PC主機
    	if (err == USB_NO_ERR){	 										//應答正確
    										   
   	   		reclen = Read_24WC02(I2C.addr,I2C.offset,I2C.len,&buff[2]); //讀取數據   			
    																	
    		buff[0] = reclen / 256;
    		buff[1] = reclen % 256;
  	 		WritePort2(reclen + 2,buff,200);			//發送讀取到的數據
   	  	}
    }
}

/*************************************************
** 函數名稱: void TaskWrite(void *pdata)
** 功能描述: 寫 CAT24WC02 任務,優先級為2
** 輸 入:   無
** 輸 出:   無
**************************************************/
void TaskWrite(void *pdata)
{
#if OS_CRITICAL_METHOD == 3           /* Allocate storage for CPU status register */
    OS_CPU_SR  cpu_sr;
#endif
	INT8U err,buff[260];			//發送緩沖區
	INT8U ack = 0x02;				//應答字
	INT16U actlen;
	
	for (;;){ 
	
    	OSSemPend(Write_Sem,0,&err);					//等待TaskStart的命令
        err = WritePort1(1,&ack,200);					//應答PC機
    	
    	if (err == USB_NO_ERR){							//應答正確
    	
    		err = ReadPort2(I2C.len,buff,200);			//接收要寫入的數據
  											    		
       		if (err == USB_NO_ERR){						//接收正確
    			actlen = Write_24WC02(I2C.addr,I2C.offset,I2C.len,buff);  //執行寫入  		
    		    		
    			buff[0] = actlen / 256;
    			buff[1] = actlen % 256;
       			WritePort1(2,buff,200);						//發送實際寫入的字節數
       		}
   	  	}
    }
}

/********************************************************************************
** 函數名稱: INT16U Read_24WC02(INT8U addr,INT8U offset,INT16U len,INT8U *recbuff)
** 功能描述: 從CAT24WC02讀取數據
** 輸 入:   INT8U  addr:	    CAT24WC02的 I2C 總線地址
			 INT8U  offset:		偏移地址 
			 INT16U len:		讀的長度
			 INT8U  *recbuff:   接收數據指針
** 輸 出:   實際讀取到的字節數
*********************************************************************************/
INT16U Read_24WC02(INT8U addr,INT8U offset,INT16U len,INT8U *recbuff)
{
	INT16U actlen = 0;
	
	actlen = I2cRead(addr,recbuff,&offset,1,len);   //讀取數據并記錄讀到的字節數
											
	return actlen;									//返回實際讀到的字節數
}


/************************************************************************************
** 函數名稱: INT16U Write_24WC02(INT8U addr,INT8U offset,INT16U len,INT8U *sendbuff)
** 功能描述: 向 CAT24WC02 寫入數據
** 輸 入:   INT8U  addr:	    CAT24WC02的 I2C 總線地址
			 INT8U  offset:		偏移地址 
			 INT16U len:		讀的長度
			 INT8U  *sendbuff:  接收數據指針
** 輸 出:   實際寫入的字節數
*************************************************************************************/
INT16U Write_24WC02(INT8U addr,INT8U offset,INT16U len,INT8U *sendbuff)
{
	INT8U pages,nums,i;
	INT8U buff[PAGE_SIZE_24C02 + 1];			//寫入緩沖區
	INT16U actlen = 0;
	
	pages = len / PAGE_SIZE_24C02;				//CAT24WC02一次只能寫一頁,一頁為16字節?
	nums  = len % PAGE_SIZE_24C02;				//不夠整數頁的字節數
	buff[0] = offset;					    	//buff[0]為寫入偏移地址

	for (i = 0; i < pages; i++)
	{
		memcpy(&buff[1],sendbuff,PAGE_SIZE_24C02);		  		//將要寫入的數據復制到寫入緩沖區
		actlen += I2cWrite(addr,buff,PAGE_SIZE_24C02 + 1) - 1;  //寫入數據并記錄已寫入的字節數
		OSTimeDly(OS_TICKS_PER_SEC / 100 + 1);		  			//延時10ms的時間讓CAT24WC02	
												  				//內部執行寫操作
   		sendbuff += PAGE_SIZE_24C02;
	   	buff[0]  += PAGE_SIZE_24C02;
	}

	if (nums > 0)
	{											//下面寫不夠整數頁的字節數
		memcpy(&buff[1],sendbuff,nums);
		actlen += I2cWrite(addr,buff,nums + 1) - 1;
		OSTimeDly(OS_TICKS_PER_SEC / 100 + 1);
 	}
	
	return actlen;								//返回實際寫入的字節數
}


/************************************************************************************
** 函數名稱: void Init_I2CInt(void)
** 功能描述: 初始化I2C總線控制器的中斷
** 輸 入:   無
** 輸 出:   無
*************************************************************************************/
void Init_I2CInt(void)
{
	extern void I2c_Handler(void);
	
    VICVectAddr12 = (uint32)I2c_Handler;	// 設置I2C中斷向量地址
    VICVectCntl12 = (0x20 | 9);				// I2C中斷分配到IRQ slot 2
   	//VICIntEnable = 1 << 9;				// 暫時不允許I2C中斷
 }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品1区2区| 亚洲欧美日韩国产手机在线 | 日韩高清一级片| 免播放器亚洲一区| 国产馆精品极品| 欧洲在线/亚洲| 久久五月婷婷丁香社区| 椎名由奈av一区二区三区| 午夜视频在线观看一区| 国产伦精品一区二区三区在线观看| 97超碰欧美中文字幕| 7777精品伊人久久久大香线蕉超级流畅| 欧美精品一区二区不卡| 亚洲丝袜精品丝袜在线| 奇米在线7777在线精品| 不卡一区二区在线| 制服丝袜在线91| 国产精品视频线看| 日韩国产欧美三级| 91在线porny国产在线看| 欧美一三区三区四区免费在线看| 国产蜜臀av在线一区二区三区| 亚洲综合999| 国产精品18久久久| 在线不卡欧美精品一区二区三区| 国产精品美日韩| 另类综合日韩欧美亚洲| 色婷婷国产精品久久包臀| 久久人人爽人人爽| 午夜久久久久久久久| 不卡视频在线观看| 日韩视频一区二区| 亚洲国产精品麻豆| www.66久久| 久久九九久久九九| 视频精品一区二区| 色狠狠一区二区三区香蕉| 精品国产乱码久久久久久久| 亚洲曰韩产成在线| 波多野结衣中文字幕一区二区三区 | 精品久久国产字幕高潮| 亚洲成人tv网| 色哟哟国产精品| 国产精品入口麻豆原神| 国产一区在线精品| 欧美一级xxx| 午夜久久久久久| 色94色欧美sute亚洲线路一久| 国产欧美一区二区三区在线老狼| 蜜桃av一区二区在线观看| 91黄色激情网站| 国产精品电影院| 国产ts人妖一区二区| 欧美xxxxxxxx| 欧美aaa在线| 717成人午夜免费福利电影| 一区二区三区国产| 91在线视频播放| 国产精品久久久久影院老司| 国产精品一级黄| 久久香蕉国产线看观看99| 蜜桃av噜噜一区| 91精品国产综合久久香蕉麻豆| 亚洲福利电影网| 色av一区二区| 亚洲综合999| 欧美色综合久久| 亚洲午夜成aⅴ人片| 欧美私模裸体表演在线观看| 亚洲精品国产高清久久伦理二区| 一本久久精品一区二区| 亚洲人成精品久久久久久| 91小宝寻花一区二区三区| 亚洲欧美一区二区视频| 91一区二区在线| 亚洲精品视频在线观看网站| 色哟哟国产精品| 亚洲在线成人精品| 欧美三级中文字幕在线观看| 亚洲国产aⅴ成人精品无吗| 精品视频在线免费看| 亚洲福利视频导航| 91麻豆精品国产91久久久更新时间| 午夜激情综合网| 欧美一区二区在线视频| 老色鬼精品视频在线观看播放| 精品噜噜噜噜久久久久久久久试看| 免费在线观看视频一区| 欧美精品一区二| av中文字幕一区| 亚洲国产精品久久久久秋霞影院| 555www色欧美视频| 精品一区二区三区久久久| 国产日韩欧美a| 色视频欧美一区二区三区| 亚洲h精品动漫在线观看| 欧美精品亚洲一区二区在线播放| 蜜桃av噜噜一区| 欧美高清在线精品一区| 91性感美女视频| 日韩电影在线免费| 国产亚洲精品aa午夜观看| 91色.com| 日本不卡视频一二三区| 久久久久久免费网| 色哟哟一区二区在线观看| 日本不卡一区二区三区| 亚洲国产岛国毛片在线| 日本伦理一区二区| 日韩av在线发布| 久久精品一区二区三区不卡 | 一区二区理论电影在线观看| 6080日韩午夜伦伦午夜伦| 国产高清精品在线| 亚洲韩国精品一区| 2023国产精华国产精品| 91在线小视频| 青草国产精品久久久久久| 国产欧美日本一区视频| 91久久精品一区二区三| 日韩av网站在线观看| 欧美精品一区二区三区久久久| 色综合久久88色综合天天6| 日韩avvvv在线播放| 亚洲国产精品精华液ab| 欧美伊人久久久久久久久影院| 国产一区二三区| 亚洲精品国产品国语在线app| 99久久国产综合色|国产精品| 日韩不卡一区二区三区| 日本一区二区三级电影在线观看| 在线精品亚洲一区二区不卡| 久久国产综合精品| 亚洲人成网站在线| 欧美zozo另类异族| 91最新地址在线播放| 青青草视频一区| 国产精品素人一区二区| 欧美日韩免费一区二区三区| 精品亚洲免费视频| 亚洲视频一二三| 日韩欧美成人一区二区| 91蜜桃免费观看视频| 麻豆视频一区二区| 亚洲国产日韩a在线播放性色| 精品福利在线导航| 日本久久一区二区| 国精产品一区一区三区mba视频 | 国产精品亚洲一区二区三区妖精| 亚洲精品成人少妇| 欧美精品一区二区三| 懂色av噜噜一区二区三区av| 秋霞成人午夜伦在线观看| 亚洲视频在线观看三级| 日韩免费在线观看| 91搞黄在线观看| av在线一区二区| 日韩国产成人精品| 一区二区三区91| 中文字幕va一区二区三区| 91精品国产色综合久久不卡电影 | 欧美性色欧美a在线播放| 国产精品影视在线观看| 亚洲成人一区在线| 一区在线观看视频| 欧美情侣在线播放| 欧美日韩精品一区二区三区四区 | 国产午夜亚洲精品不卡| 91精品国产欧美一区二区成人 | 欧美一区二区三区日韩| 色综合欧美在线视频区| 国产乱子伦视频一区二区三区 | 色偷偷久久人人79超碰人人澡| 国产精品一区二区三区四区| 免费观看一级欧美片| 亚洲国产精品综合小说图片区| 国产精品视频看| 久久婷婷国产综合精品青草| 欧美一区二区性放荡片| 在线观看91精品国产入口| 高清不卡一区二区在线| 激情综合网最新| 日韩—二三区免费观看av| 亚洲一区二区三区四区五区中文| 国产午夜亚洲精品不卡| 国产色一区二区| 久久综合色之久久综合| 日韩欧美黄色影院| 欧美四级电影网| 日韩一级二级三级精品视频| 欧美理论在线播放| 精品视频免费在线| 一本大道久久a久久综合| 在线观看av一区| 欧洲中文字幕精品| 欧美视频一区二区三区四区| 97精品电影院| 日本高清不卡一区| 欧美四级电影在线观看| 欧美午夜宅男影院|