📄 main.c
字号:
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 + -