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

📄 复件 main.c

📁 ucos II操作系统的源代码。程序完整
💻 C
📖 第 1 页 / 共 3 页
字号:
** 函数名称: Uart1Send
** 功能描述: Uart1发送程序
** 输 入: 无
** 输 出: 0:send fail ; 1:send ok
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
***********************************************************************************************/
INT8U Uart1Send(void)
{
	INT8U err;
	err = flgs.warn ? 0x80 : 0x00;
	err = flgs.freconvswitch ? (err | fre_group) : err;
	return(UART_write(1, &err, 1, 4));
}
	
/*********************************************************************************************************
** 函数名称: I2cE2rom
** 功能描述: E2rom烧写
** 输 入: SaveAddr:数据保存地址; 
**		   SaveData:指向被保存数据的指针; 
**         SaveNo  :需保存数据的个数      
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人: 黄凯
** 日 期: 2006年11月16日
** 备  注:改正CAT1025烧写时地址错误
**-------------------------------------------------------------------------------------------------------
** 
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/    		
void I2cE2rom(INT8U SaveAddr, INT8U const *SaveData, INT8U SaveNo){
	INT8U i;
	INT8U x;
	INT8U y;
	INT8U *ptr;
	INT8U I2ctemp[17];
	 
	x = SaveNo / 16;
	y = SaveNo % 16;
	ptr = I2ctemp;

	for (i=0; i<x; i++)
	{		
		*ptr = SaveAddr + 16*i;
		memcpy((ptr + 1), (SaveData + 16*i + 1), 17);
		I2cWrite(CAT1025, I2ctemp, 17);	
		OSTimeDly(OS_TICKS_PER_SEC / 100 + 1);
	}	
	if (y != 0)
	{
		*ptr = SaveAddr + 16*x;
		memcpy((ptr + 1), (SaveData + 16*x +1), y);
		I2cWrite(CAT1025, I2ctemp, (y + 1));
		OSTimeDly(OS_TICKS_PER_SEC / 100 + 1);
	}	
}		
	
/*********************************************************************************************************
** 函数名称: LpcInitialize
** 功能描述: 芯片初始化
** 输 入: 无        
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/    		
void LpcInitialize(void){

	ReceMbox = OSMboxCreate(NULL); 
	if (ReceMbox == NULL) {
	    while (1);
	}

	TargetInit(); 
	
	UART_Init(1);
    UART_open(1, 19200, 8, 'n', 0); 
	UART_Init(0);
    UART_open(0, 19200, 8, 'n', 0); 
    	
	PINSEL1 = (PINSEL1 & 0xcfffffff) | (1<<29);//P0.30 is used as EINT3 
	PINSEL0 = (PINSEL0 & 0xffff3fff) | (3<<14);//P0.07 is used as EINT2 
	EXTMODE = 0X0c;
	EXTPOLAR = 0X0c;
		
	//IO0DIR  = 0X3d23 3F00;
	IO0DIR  = 0X3d27fc00;
	IO1DIR  = 0X0F << 16;
    IO1DIR  |=  0X03 << 24;//p1.16:19,P1.24:25 output
    
    sn74_oe_on();
    sel_led_off();
    test_off();
    fre_cnt = 0x00000002;
    fre_group = 0;
}
/*********************************************************************************************************
** 函数名称: GetE2RomData
** 功能描述: 读取E2Rom数据
** 输 入: 无        
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/    		
void GetE2RomData(void){  
#if OS_CRITICAL_METHOD == 3 
    OS_CPU_SR  cpu_sr;
#endif
	INT8U cp; 
	INT8U E2data[3]; 

    cp = FreSaveAddr;
    I2cRead(CAT1025, E2data, &cp, 1, 3);
 	fre_value = E2data[0];
 	pow_value = E2data[1];
 	fre_group = E2data[2];
 	
    if ((fre_value > 0x29) || (fre_value == 0x00))
    {
    	fre_value = 0x01;
    }
    if (pow_value > 0x04)
    {
    	pow_value = 0x01;
    }  
    if (fre_group > MaxGroupNo)
    {
    	fre_group = MaxGroupNo;
    }
    back.ffre = fre_value;
	back.ppow = pow_value;
    CtrlOut(fre_value-1,0x03);
	LedRefresh(fre_value,0x03);
    CtrlOut(pow_value,0x0f);
	LedRefresh(pow_value,0x0f);  
	OS_ENTER_CRITICAL(); 
	memcpy(fre_char2, fre_char3[fre_group], EachGroupLen);
	OS_EXIT_CRITICAL(); 
}

/*********************************************************************************************************
** 函数名称: FreConverInfo
** 功能描述: 定频,跳频判断
** 输 入: 无        
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/    		
void FreConverInfo(void){
	if (flgs.freconvswitch){		
		if((IO0PIN & 0X00400000) == 0X00400000) 
		{
			flgs.freconvon = 1;       
		} 
		else 
		{
			flgs.freconvon = 0;
			CtrlOut(fre_char2[0],0x03);
		}
	 }
}

/*********************************************************************************************************
** 函数名称: WarnInfo
** 功能描述: 告警信息采集及处理 P0.18:0.20--->tm,vswr,ld
** 输 入: 无        
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人: 黄凯
** 日 期: 2006年11月28日
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/    		
void WarnInfo(void){
	INT8U temp[4];
	
	temp[0] = (IO0PIN & 0X00900000) >> 16;
	temp[1] = warn_info ^ temp[0];
	if (temp[1] != 0x00 ){
		warn_info = temp[0];
		if (temp[0] == 0x80) 
		{ 
			flgs.warn = 0;
			temp[2] = 0x00;
			
			pow_value = back.ppow;
			CtrlOut(pow_value,0x0f);
			LedRefresh(pow_value,0x0f);
		} 
		else 
		{
			flgs.warn = 1; 
			temp[2] = 0x80;
			
			pow_value = 0x01;
			CtrlOut(pow_value,0x0f);
			LedRefresh(pow_value,0x0f);
		}			
			UART_write(1, &temp[2], 1, 3);
    }
}
/*********************************************************************************************************
** 函数名称: InfoGather
** 功能描述: 告警,键盘信息采集
** 输 入: pdata        
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/    		
void InfoGather(void *pdata){	
	pdata = pdata;

	GetE2RomData();
		
	while (1) {
		FreConverInfo();	//定频,跳频检测 P0.22
		WarnInfo();			//告警检测		
		KeyInfo();    		//键盘信息采集
	} 
}  		
 
/*********************************************************************************************************
** 函数名称: KeyInfo
** 功能描述: 键盘信息采集及处理
** 输 入: 无        
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 黄凯
** 日 期: 2006年11月10日
**-------------------------------------------------------------------------------------------------------
** 修改人: 黄凯
** 日 期: 2006年11月27日
** 描 述: 增加防干扰措施,及调整按键时间
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/    		
void KeyInfo(void){
#ifdef __DEBUG
	INT8U err;
#endif
	INT8U ktemp[2];

    //if (!flgs.freconvon)
    //{	//跳频进行中?
    	IO1DIR = IO1DIR & 0xff0fffff | (0Xf0 << 16); 
        IO1CLR = 0Xf0 << 16;
        IO1DIR = IO1DIR & 0xff0fffff | (0X30 << 16); 	//p1.20:21 are used as output port
    	IO1SET = 0X30 << 16;

		OSTimeDly(2);
		ktemp[0] = (IO1PIN & (0Xc0 << 16)) >> 16;
		
    	if ((ktemp[0] != 0XC0) && (ktemp[0] != 0X00)) 
    	{
    		IO1DIR = IO1DIR & 0xff0fffff | (0Xf0 << 16); 
        	IO1CLR = 0Xf0 << 16;
        	IO1DIR = IO1DIR & 0xff0fffff | (0X30 << 16); 	//p1.20:21 are used as output port
    		IO1SET = 0X30 << 16;
    		OSTimeDly(20);
    		ktemp[0] = (IO1PIN & (0Xc0 << 16)) >> 20;
    	
        	IO1DIR = IO1DIR & 0xff0fffff | (0Xf0 << 16); 
        	IO1CLR = 0Xf0 << 16;
        	IO1DIR = IO1DIR & 0xff0fffff | (0Xc0 << 16); 	//p1.20:21 are used as output port
    		IO1SET = 0Xc0 << 16;
    		OSTimeDly(10);
    		ktemp[0] |= (IO1PIN & (0X30 << 16)) >> 20;
    		
    		flgs.key = (ktemp[0] == 0X00) ? 1 : 0;	//防干扰
    		
    		#ifdef __DEBUG		//调试信息
			UART_write(0, &ktemp[0], 1, 3);
			err = 0x0f;
			UART_write(0, &err, 1, 3);
			#endif
			
    		while (!flgs.key )
    		{
    			IO1DIR = IO1DIR & 0xff0fffff | (0Xf0 << 16); 
        		IO1CLR = 0Xf0 << 16;
        		IO1DIR = IO1DIR & 0xff0fffff | (0X30 << 16); 	//p1.20:21 are used as output port
    			IO1SET = 0X30 << 16;
    			OSTimeDly(7);
    			ktemp[1] = (IO1PIN & (0Xc0 << 16)) >> 20;
    	
        		IO1DIR = IO1DIR & 0xff0fffff | (0Xf0 << 16); 
        		IO1CLR = 0Xf0 << 16;
        		IO1DIR = IO1DIR & 0xff0fffff | (0Xc0 << 16); 	//p1.20:21 are used as output port
    			IO1SET = 0Xc0 << 16;
    			OSTimeDly(7);
    			ktemp[1] |= (IO1PIN & (0X30 << 16)) >> 20;
				
				#ifdef __DEBUG		//调试信息
				UART_write(0, &ktemp[1], 1, 3);
				err = 0x0f;
				UART_write(0, &err, 1, 3);
				#endif
    			   			
    			flgs.key = (ktemp[1] == ktemp[0]) ? 0:1 ;
    			KeyDecode(ktemp[0]);
    			
    			if (flgs.key) 
    			{

⌨️ 快捷键说明

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