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

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

?? main.c

?? easyarm2200整個光盤內容
?? 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一区二区三区免费野_久草精品视频
91久久久免费一区二区| 1024精品合集| 日韩精品中文字幕在线不卡尤物| 欧美日韩一区二区三区在线| 在线免费观看日韩欧美| 欧美在线免费播放| 欧美日韩一二三| 91精品国产色综合久久久蜜香臀| 欧美精三区欧美精三区| 91精品国产美女浴室洗澡无遮挡| 欧美一区二区视频在线观看2022 | 91在线国产福利| 99久久99久久免费精品蜜臀| 成人毛片在线观看| 91视频精品在这里| 欧美日韩精品高清| 欧美日韩精品一区二区三区四区| 欧美日韩免费在线视频| 欧美一区二区三区性视频| 91麻豆精品国产91| 日韩精品一区二区三区中文精品| 日韩欧美一区二区三区在线| 26uuu国产日韩综合| 久久嫩草精品久久久久| 国产精品蜜臀在线观看| 一区二区在线观看不卡| 亚洲1区2区3区4区| 欧美日韩国产首页| 国产99久久久国产精品潘金网站| 不卡的av中国片| 欧洲色大大久久| 91精品国产综合久久香蕉的特点 | 久久天天做天天爱综合色| 国产亚洲综合av| 亚洲激情第一区| 麻豆国产一区二区| av午夜精品一区二区三区| 色婷婷av一区二区三区之一色屋| 91精品国产一区二区| 中文字幕第一区| 亚洲高清视频的网址| 精品一区二区三区欧美| 91在线精品秘密一区二区| 欧美一区二视频| 国产精品久久毛片a| 亚洲gay无套男同| 国产精品一区免费视频| 欧美影视一区在线| 久久综合av免费| 夜夜嗨av一区二区三区| 精品一区二区在线看| 91福利视频久久久久| 日韩欧美高清一区| 国产精品二三区| 精品一区二区三区久久| 色视频成人在线观看免| 亚洲精品在线观看网站| 尤物在线观看一区| 极品瑜伽女神91| 欧美在线观看视频在线| 欧美激情在线观看视频免费| 日日噜噜夜夜狠狠视频欧美人 | 五月天精品一区二区三区| 丁香五精品蜜臀久久久久99网站| 欧美日韩国产在线播放网站| 欧美激情一区二区三区全黄| 日韩高清欧美激情| 91美女在线观看| 欧美大白屁股肥臀xxxxxx| 国产精品私人影院| 久久99精品国产91久久来源| 91女人视频在线观看| 美女爽到高潮91| 亚洲一区在线观看免费观看电影高清| 日本精品一级二级| 久久久精品tv| 免费成人av在线| 欧美性大战久久久| 中文字幕一区二区不卡| 国产一区二区三区美女| 欧美一区二区三区啪啪| 亚洲va国产天堂va久久en| 色婷婷综合久久久久中文一区二区| 国产人妖乱国产精品人妖| 久久99精品国产麻豆不卡| 欧美久久久久久久久| 亚洲一二三四久久| 色哟哟一区二区| 中文字幕亚洲不卡| 成人av高清在线| 中文字幕国产一区二区| 福利电影一区二区三区| 久久综合成人精品亚洲另类欧美| 青草av.久久免费一区| 欧美剧情片在线观看| 亚洲国产视频一区二区| 欧美亚一区二区| 亚洲一区二区在线视频| 日本久久精品电影| 亚洲一区在线观看网站| 欧美性猛交xxxx乱大交退制版| 一区二区高清在线| 欧美三级电影在线看| 午夜精品久久久久久久久久 | 日韩视频一区二区三区 | 在线精品视频一区二区三四| 综合激情成人伊人| 色老汉一区二区三区| 亚洲影院免费观看| 欧美二区三区的天堂| 蜜桃精品视频在线| 日韩欧美一区中文| 国产呦萝稀缺另类资源| 中日韩免费视频中文字幕| 99久久综合99久久综合网站| 亚洲视频免费在线| 精品视频资源站| 日本不卡123| 久久精品视频网| 99久久久久久| 一区二区三区自拍| 欧美日韩在线一区二区| 麻豆精品视频在线| 久久久不卡网国产精品二区| av电影一区二区| 成人免费小视频| 欧美性生交片4| 日本不卡123| 国产欧美视频在线观看| 91在线观看高清| 日韩精品成人一区二区在线| 精品999久久久| 波多野结衣在线一区| 香蕉影视欧美成人| 久久综合色8888| 色综合色综合色综合色综合色综合| 亚洲一区二区视频| 日韩精品资源二区在线| 暴力调教一区二区三区| 亚洲精品高清在线| 精品sm捆绑视频| 一本大道久久a久久精二百 | 欧洲精品在线观看| 日本麻豆一区二区三区视频| 国产欧美日产一区| 欧美日韩国产一级片| 国产在线播放一区三区四| 亚洲欧美一区二区三区国产精品| 91精品欧美一区二区三区综合在| 国产精品一区二区无线| 亚洲图片欧美视频| 精品久久人人做人人爽| 91豆麻精品91久久久久久| 久久精品国产精品亚洲精品| 中文字幕一区二区在线观看 | 天天影视涩香欲综合网| 国产日韩欧美电影| 9191成人精品久久| 91在线国产福利| 国产一区久久久| 亚洲国产综合91精品麻豆| 欧美精品一区二区三区视频| 91国产免费看| 成人亚洲一区二区一| 日韩精品国产精品| 亚洲欧洲99久久| 26uuu精品一区二区三区四区在线| 色婷婷激情综合| 国产99久久久国产精品| 蜜桃久久久久久| 亚洲在线一区二区三区| 美腿丝袜在线亚洲一区| 人人狠狠综合久久亚洲| 粉嫩aⅴ一区二区三区四区五区| 91久久线看在观草草青青| 精品久久99ma| 婷婷综合在线观看| 欧美精彩视频一区二区三区| 在线播放91灌醉迷j高跟美女| 国产成人精品免费视频网站| 亚洲综合精品自拍| 中文字幕亚洲精品在线观看| 久久综合色8888| 日韩久久精品一区| 9191精品国产综合久久久久久| 色综合久久88色综合天天| 成人av午夜电影| 国产一区二区美女| 美美哒免费高清在线观看视频一区二区 | 九九九精品视频| 欧美精品第1页| 色久优优欧美色久优优| av一区二区三区四区| 国产一区二区福利视频| 精品在线观看免费| 日本成人在线网站| 五月婷婷久久综合| 午夜av电影一区| 偷拍与自拍一区| 亚洲国产精品综合小说图片区|