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

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

?? main.c

?? arm 學習程序例子共五個例子
?? C
字號:


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

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

OS_STK  StartStk[128];			// 操作系統起動任務堆棧
OS_STK  RTaskStk[256];			// 讀任務堆棧
OS_STK  WTaskStk[256];			// 寫任務堆棧

OS_EVENT *W_Sem;				// 讀任務就緒信號量
OS_EVENT *R_Sem;					// 寫任務就緒信號量

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

void WorkStart(void *pdata);	
void Task_R(void *pdata);
void Task_W(void *pdata);

typedef struct tagCmd			//讀寫CAT24WC02命令結構體
{
	INT8U  rwed;					//命令: 1 -- 讀; 2 -- 寫
	INT8U  adr;				//I2C器件CAT24WC02的地址
	INT8U  off;				//讀寫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(WorkStart,(void *)0, &StartStk[127], 3);
    							           //創建起動任務
    OSStart();                             //開始多任務
}

/**********************************
*       起動任務,優先級 3
***********************************/
void  WorkStart (void *pdata)
{
#if OS_CRITICAL_METHOD == 3          /* 為CPU狀態寄存器分配存儲空間 */
    OS_CPU_SR  cpu_sr;
#endif
	INT8U R;
	
	TargetInit();          		 	 // μC/OS-II定時器及相關中斷初始化
	I2cInit(30000);				 	 // I2C控制器初始化	
	Init_I2CInt();					 // 初始化I2C的中斷
	Init_D12Int();					 // 配置D12的中斷
	R = Init_D12();			  	 // PDIUSBD12初始化
	
	W_Sem = OSSemCreate(0);	 	 // 創建控制讀寫任務的兩個信號量,信號量初值為0
	R_Sem  = OSSemCreate(0);   
	OSTaskCreate(Task_R,(void *)0, &RTaskStk[255], 1);	   	//創建讀任務
	OSTaskCreate(Task_W,(void *)0, &WTaskStk[255], 2);	//創建寫任務
			            
	if (R == 0)				  	 // 如果初始化PDIUSBD12成功,才創建傳輸控制處理任務
  		OSTaskCreate(TaskSetup,(void *)0, &TaskSetupStk[127], 0);
  		
  	for (;;){
  		R = ReadPort1(sizeof(I2C_COMMAND),(INT8U *)&I2C,200);		//等待來自PC機的命令
		if (R == OS_NO_ERR){						//接收正確
			if (I2C.rwed == READ_24C02)				
				OSSemPost(R_Sem);				//使讀任務就緒
			if (I2C.rwed == WRITE_24C02)
				OSSemPost(W_Sem);				//使寫任務就緒
		} 		 
    }  
 }

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

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

/********************************************************************************
** 函數名稱: INT16U Read_24WC02(INT8U adr,INT8U off,INT16U len,INT8U *recbuff)
** 功能描述: 從CAT24WC02讀取數據
*********************************************************************************/
INT16U Read_24WC02(INT8U adr,INT8U off,INT16U len,INT8U *recbuff)
{
	INT16U actlen = 0;
	
	actlen = I2cRead(adr,recbuff,&off,1,len);   //讀取數據并記錄讀到的字節數
											
	return actlen;							//返回實際讀到的字節數
}


/******************************************************************************
** 函數名稱: INT16U Write_24WC02(INT8U adr,INT8U off,INT16U len,INT8U *sendbuff)
** 功能描述: 向 CAT24WC02 寫入數據
******************************************************************************/
INT16U Write_24WC02(INT8U adr,INT8U off,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] = off;					    	//buff[0]為寫入偏移地址

	for (i = 0; i < pages; i++)
	{
		memcpy(&buff[1],sendbuff,PAGE_SIZE_24C02);		  		//將要寫入的數據復制到寫入緩沖區
		actlen += I2cWrite(adr,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(adr,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一区二区三区免费野_久草精品视频
国产在线不卡视频| 久久精子c满五个校花| 精品国产一区二区三区av性色| 久久久精品免费观看| 亚洲成av人片一区二区梦乃| 高清在线观看日韩| 日韩欧美国产综合| 视频一区国产视频| 色综合久久久久| 国产精品高潮呻吟久久| 精品一区二区免费看| 欧美日韩视频在线第一区 | 欧美群妇大交群的观看方式| 国产女人18毛片水真多成人如厕| 日韩精品亚洲一区二区三区免费| 91麻豆蜜桃一区二区三区| 国产欧美精品一区二区色综合| 免费在线视频一区| 欧美日韩一区中文字幕| 亚洲乱码精品一二三四区日韩在线| 国产91丝袜在线18| 精品99999| 精品亚洲aⅴ乱码一区二区三区| 欧美丰满嫩嫩电影| 亚洲观看高清完整版在线观看| 色综合久久综合网97色综合| 国产精品久久久久久久久免费樱桃| 久久精品国产精品青草| 日韩精品中午字幕| 久久精品国产一区二区| 国产精品久久久久毛片软件| 国产在线播放一区三区四| 欧美电视剧在线看免费| 久久66热re国产| 久久久精品人体av艺术| 国产69精品久久久久777| 国产精品女同一区二区三区| 成人精品亚洲人成在线| 综合激情成人伊人| 欧美视频在线一区| 美女视频一区二区三区| 久久综合精品国产一区二区三区| 精品午夜一区二区三区在线观看| 国产清纯白嫩初高生在线观看91| 粉嫩欧美一区二区三区高清影视 | 不卡的电影网站| 亚洲乱码中文字幕| 在线播放中文一区| 激情欧美一区二区| 中文字幕免费观看一区| 91香蕉视频污| 三级精品在线观看| 久久香蕉国产线看观看99| 国产suv精品一区二区883| 亚洲人一二三区| 日韩亚洲欧美中文三级| 东方欧美亚洲色图在线| 伊人一区二区三区| 日韩一区二区视频| 成人高清视频免费观看| 天天综合网天天综合色| 久久久精品2019中文字幕之3| 色老汉av一区二区三区| 久久av老司机精品网站导航| 国产精品久久久久天堂| 日韩一区二区影院| 色8久久精品久久久久久蜜 | 亚洲va天堂va国产va久| 精品国产一区二区在线观看| av午夜一区麻豆| 日韩不卡一区二区三区| ●精品国产综合乱码久久久久| 777奇米成人网| av一区二区三区| 久久99久久久久久久久久久| 亚洲老妇xxxxxx| 久久精子c满五个校花| 在线成人高清不卡| 不卡的av电影在线观看| 激情五月播播久久久精品| 亚洲黄色av一区| 国产婷婷精品av在线| 欧美日韩高清一区二区不卡 | 国产成人午夜高潮毛片| 亚欧色一区w666天堂| 欧美激情一区二区三区全黄| 91精品欧美福利在线观看| 99精品视频一区二区| 国产精品一区二区三区四区| 免费看欧美美女黄的网站| 亚洲一区二区三区四区中文字幕| 久久九九全国免费| 精品sm在线观看| 6080日韩午夜伦伦午夜伦| 色域天天综合网| 播五月开心婷婷综合| 国产乱码精品一区二区三区av | 五月婷婷另类国产| 亚洲视频每日更新| 国产精品久久三| 2020国产精品自拍| 亚洲精品一区二区三区影院 | 国产成人综合在线观看| 日本亚洲三级在线| 免费看日韩精品| 日本午夜一本久久久综合| 午夜在线成人av| 日韩精品免费专区| 丝袜脚交一区二区| 日韩精品免费专区| 美女视频黄a大片欧美| 免费成人在线视频观看| 毛片av一区二区三区| 免费的成人av| 国产毛片精品国产一区二区三区| 狠狠狠色丁香婷婷综合激情| 国产一区三区三区| 国产成人高清在线| 94色蜜桃网一区二区三区| 99麻豆久久久国产精品免费优播| 成人午夜激情片| 一本久道久久综合中文字幕| 欧美在线不卡一区| 欧美乱妇15p| 欧美刺激午夜性久久久久久久| 日韩久久久久久| 中文字幕不卡的av| 日韩伦理电影网| 婷婷国产v国产偷v亚洲高清| 日韩精品欧美精品| 国产河南妇女毛片精品久久久| 成人av在线看| 欧美日韩精品欧美日韩精品一综合| 日韩一区二区免费电影| 国产日韩精品久久久| 亚洲天天做日日做天天谢日日欢 | 欧美videos大乳护士334| 久久久久久久久久电影| 亚洲美女精品一区| 日本中文字幕一区二区有限公司| 另类小说欧美激情| www.在线欧美| 69久久99精品久久久久婷婷 | 久久久国产综合精品女国产盗摄| 成人欧美一区二区三区小说| 亚洲香肠在线观看| 国产成人午夜99999| 精品视频免费在线| 久久欧美中文字幕| 午夜私人影院久久久久| 国产一区不卡视频| 91国内精品野花午夜精品| 日韩一区二区中文字幕| 中文字幕五月欧美| 男女男精品网站| 日本道色综合久久| 日韩精品一区二区在线| 亚洲欧美色图小说| 国产精品一区二区黑丝| 制服丝袜日韩国产| 最好看的中文字幕久久| 久久91精品久久久久久秒播| 在线日韩国产精品| 国产亚洲一区字幕| 久久国产生活片100| 在线观看区一区二| 国产精品女人毛片| 精东粉嫩av免费一区二区三区| 欧美在线观看视频一区二区| 国产精品免费视频观看| 激情五月婷婷综合| 欧美一区二区免费| 午夜久久久影院| 欧美性色aⅴ视频一区日韩精品| 亚洲国产电影在线观看| 国产又粗又猛又爽又黄91精品| 欧美日产国产精品| 一区二区三区在线高清| 成人综合在线视频| 久久久久99精品一区| 久久精品国产一区二区三区免费看| 欧美日韩一二三| 亚洲一二三级电影| 一本一道波多野结衣一区二区| 国产精品久久久久国产精品日日| 国内精品伊人久久久久av影院| 欧美精品国产精品| 天堂午夜影视日韩欧美一区二区| 欧美色中文字幕| 亚洲第一久久影院| 欧美日韩高清一区二区三区| 午夜视频在线观看一区二区| 欧美三级在线播放| 午夜欧美2019年伦理| 制服丝袜在线91| 麻豆91免费看| 26uuu久久天堂性欧美| 黑人精品欧美一区二区蜜桃| 精品av久久707| 粉嫩蜜臀av国产精品网站|