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

📄 main.c

📁 在proteus仿真arm处理器
💻 C
📖 第 1 页 / 共 5 页
字号:
		GUI_PutChar(x+19,y+12*2,bak);
	}	
	KeyDecode(keycode);		
} 
/*********************************************************************************************************
** 函数名称: Function_6_EINT()
** 功能描述: 外部中断3测试功能
** 输 入: 无 
** 输 出: 无       
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void	Function_6_EINT(void)
{
	uint8	x,y;
	uint32 i;
	char str[40];
	x=15;
	y=23;
	if((F_flag&0x20)==0)
	{ 
	GUI_PutString(x, y, "Testing the EINT3 Function"); 
	GUI_PutString(x, y+12*1, "Set P0.30 To The EINT3");
	GUI_PutString(x, y+12*2, "State of LED2: ");
	GUI_PutString(x, y+12*4, "Response of EINT3 is:");
	GUI_PutString(x+180, y+12*4, "times");
	PINSEL1 = (PINSEL1 &(~0x30000000))|0x20000000;	//P0.30设置为EINT3
	EXTINT = 1<<3;         						// 清除EINT3中断标志
	EXTMODE = 1<<3;         					// 设置EINT3中断为边沿触发模式
	EXTPOLAR = 0x00;           					// 设置EINT3中断为下降沿触发
	}
	F_flag = 0x20;
	i = IOSET;                         			//读出当前LED2控制值
	if((i&(1<<LED2))==0)               			//控制LED2控制值
	{ 	//LED2 is on
		GUI_PutString(x+94, y+12*2, "ON ");
	}
	else
	{ //LED2 is off
		GUI_PutString(x+94, y+12*2, "OFF");
	}
	sprintf(str, "%d", EINT3_Time);
	GUI_PutString(x+152,y+12*4,str);
}
/*********************************************************************************************************
** 函数名称: Function_7_Info()
** 功能描述: 
** 输 入: 无 
** 输 出: 无       
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  Function_7_Info(void)
{
	if((F_flag&0x40)==0)
	{
		GUI_PutString(5,20,"TaskName");
		GUI_PutString(70,20,"EXc ");
		GUI_PutString(110,20,"Ctr");
		GUI_PutString(155,20,"TOT.Exc");
		GUI_PutString(210,20,"PCT");
		GUI_PutString(5,30,"Start:");
		GUI_PutString(5,40,"LED1:");
		GUI_PutString(5,50,"Key/App:");
		GUI_PutString(5,60,"LED3:");
		GUI_PutString(5,70,"PowerIDLE:");
		
		GUI_PutString(5,80, "EXc    :Execute Time");
		GUI_PutString(5,90, "Ctr    :Counter Times");
		GUI_PutString(5,100,"TOT.Exc:Total Execute Time");
		GUI_PutString(5,110,"PCT    :Percentage Of Each Task");
	}
	F_flag = 0x40;
}
/*********************************************************************************************************
** 函数名称: Function_8_Help()
** 功能描述: 
** 输 入: 无 
** 输 出: 无       
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  Function_8_Help(void)
{
	if((F_flag&0x80)==0)
	{
		GUI_PutString(5,20,"HELP TIPS:");
	
		GUI_PutString(5,30,"1.ADC ");

		GUI_PutString(55,30,"2.I2C ");
	
		GUI_PutString(105,30,"3.GUI ");
	
		GUI_PutString(155,30,"4.UART0");
	
		GUI_PutString(5,40,"5.SPI ");
		
		GUI_PutString(55,40,"6.EINT");
		
		GUI_PutString(105,40,"7.INFO");
		
		GUI_PutString(155,40,"8.HELP");
	}
	F_flag = 0x80;
}
/*********************************************************************************************************
** 函数名称: EINT3_Exception()
** 功能描述: EINT3中断函数
** 输 入: 无 
** 输 出: 影响EINT3_Time,统计进入外部中断3的次数       
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void  EINT3_Exception(void)
{
  uint32  IOState;
  OS_ENTER_CRITICAL();
  //IOState=VICIRQStatus;                //读出VICIRQStatus的值
  IOState=IOSET;                         //读出当前LED2控制值
  if((IOState&(1<<LED2))==0){            //控制LED2控制值
        //LED2 is on
     LED2_OFF();
  }
  else{ //LED2 is off
     LED2_ON();
  }
  EINT3_Time++;
  
  while((EXTINT&0x08)!=0)          //等待外部中断信号恢复为高电平
  { EXTINT=0x08;                   //清除EINT1中断标志
  }
  VICVectAddr=0x00;
  OS_EXIT_CRITICAL();
}
/*********************************************************************************************************
** 函数名称: Uart_Data_Decode()
** 功能描述: 解码执行串口发送的数据
** 输 入: 无 
** 输 出: 错误代码或者正确命令的类型      
** 全局变量: 无
** 调用模块: 无
**------------------------------------------------------------------------------------------------------
** Created by    Rein Lee
** Created date: 2007-12-20
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define NULL_COMMAND  0x00
#define WRONG_COMMAND 0x01
#define HELP_COMMAND  0x02
#define QUIT_COMMAND  0x03
#define EXEC_COMMAND  0x04
uint8 Uart_Data_Decode(uint8 flag,uint8 index)
{
    char str[80];
    uint8 taskprio = 0;
    uint8 queryerr;
    uint8 err = WRONG_COMMAND;
    OS_TCB dtcb,*ptcb;
    switch(flag){
      case WRONG_FLAG:
        err = WRONG_COMMAND;
      break;
      default:
        if(!strcmp(Cmd_Buf,"ostaskquery")){
           if(flag==CMD_FLAG)index = 0;
           if(index == 2){taskprio = (Data_Buf[0]-'0')*10+(Data_Buf[1]-'0');}
           if(index == 1){taskprio = (Data_Buf[0]-'0');}
           if(index == 0){
               UartSendString("Warnning0:Please input the priority you want to specify.\r\n");
               UartSendString("\r\nReady\r\n\\> ");
               err = EXEC_COMMAND;
               break;
           }
           queryerr = OSTaskQuery(taskprio,&dtcb);
           if(index > 2) queryerr = OS_PRIO_INVALID;
           switch(queryerr){
              case OS_PRIO_INVALID:
                   UartSendString("Warnning1:The priority you specify is higher that the maximum allowed.\r\n");
              break;
              
              case OS_PRIO_ERR:
                   UartSendString("Warnning2:The desired task has not been created.\r\n");
              break;
              
              case OS_NO_ERR:
                   OSTaskQuery(taskprio,&dtcb);
                   if(taskprio<OS_LOWEST_PRIO-1){
	               sprintf(str,"Name         : %s\r\n",
	                       TaskUserData[dtcb.OSTCBId].TaskName);
	               UartSendString(str);
	               }
	               else if(taskprio ==  OS_LOWEST_PRIO-1)
	                  UartSendString("Name         : OS Statistic Task\r\n");
	               else
	                  UartSendString("Name         : OS Idle Task\r\n");        
	               sprintf(str,"Prio         : %d\r\nID           : %d\r\nTaskDelay    : %d ticks\r\n",
	                       dtcb.OSTCBPrio,
	                       dtcb.OSTCBId,
	                       dtcb.OSTCBDly);      
	               UartSendString(str);
	               sprintf(str,"StackSize    : %3d\r\nStackPointer : 0x%8x\r\nStackLimit   : 0x%8x\r\n",
	                       dtcb.OSTCBStkSize,
	                       (int)dtcb.OSTCBStkBottom,
	                       (int)dtcb.OSTCBStkPtr);
	               UartSendString(str);
	               if(dtcb.OSTCBStat==OS_STAT_RDY)
	                  UartSendString("TaskStatus   : Task is ready to run.\r\n");
	               else 
	                  UartSendString("TaskStatus   : Task is is suspended or is pending on semaphore,mailbox or something else.\r\n");    
              break;
           }
           UartSendString("\r\nReady\r\n\\> ");
           err = EXEC_COMMAND;
        }
  	   if(!strcmp(Cmd_Buf,"quit")){//Uart0_Buffer == quit
	       KeyDecode(0x0b); 
	       err =  QUIT_COMMAND; 
	   }
	   if(!strcmp(Cmd_Buf,"help")){//Uart0_Buffer == help
	      UartSendString("Command       Parameter\r\n");
	      UartSendString("ListAll                  ---- List all the prio of sys task.\r\n");
	      UartSendString("OsTaskQuery   taskprio   ---- Query the info of task.\r\n");
	      UartSendString("Quit                     ---- Quit this Function.\r\n");
	      UartSendChar(0x0d);
          sprintf(str, "uC/OS-II V%1d.%02d\r\n", OSVersion() / 100, OSVersion() % 100); //显示uC/OS-II版本号	
          UartSendString(str);
		  UartSendString("\r\nReady\r\n\\> ");
	      err =  HELP_COMMAND;
	   }
	   if(!strcmp(Cmd_Buf,"listall")){//Uart0_Buffer == listall,no input, Press Enter directly.
	      UartSendString("Here list all the priority of avilable system tasks.\r\n\r\n"); 
	      OS_ENTER_CRITICAL();
	      ptcb = OSTCBList;                                  // Point at first TCB in TCB list
          while (ptcb->OSTCBPrio != OS_IDLE_PRIO) {          //   Go through all TCBs in TCB list
            ptcb = ptcb->OSTCBNext; 
            taskprio = ptcb->OSTCBPrio;
            sprintf(str," %d ",taskprio);
            UartSendString(str);                        
	      OS_EXIT_CRITICAL();
	      }
	      UartSendString("\r\n\r\nReady\r\n\\> ");
	      err =  NULL_COMMAND;
	   }
	   if(!strcmp(Cmd_Buf,"")){//Uart0_Buffer == null,no input, Press Enter directly.
	      UartSendString("\r\n\\> ");
	      err =  NULL_COMMAND;
	   }
	  break;             
    }
	if(err == WRONG_COMMAND ){
	   UartSendString("\r\nERROR:BAD SYNAX!\r\n");
	   //换行
	   UartSendString("\r\nReady\r\n\\> ");
	}    
    return err;    
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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