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

📄 main.c

📁 周立功的EASYARM2131的测试程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:			Chenxibing
** Modified date:		2005-03-10
** Version:
** Descriptions:		EasyARM2131 基于uCOS-II的GPIO输出实验2。
**
********************************************************************************************************/
#define  TASK_STK_SIZE    64
#define  TASK_STK_LARGE_SIZE    128
#include "config.h"
OS_STK   TaskStartStk[TASK_STK_LARGE_SIZE];
OS_STK   Task1Stk[TASK_STK_SIZE];
OS_STK   Task2Stk[TASK_STK_SIZE];
OS_STK   Task3Stk[TASK_STK_SIZE];
OS_STK   Task4Stk[TASK_STK_SIZE];
//OS_STK   Task5Stk[TASK_STK_LARGE_SIZE];
OS_STK   Task6Stk[TASK_STK_SIZE];
OS_STK   Task7Stk[TASK_STK_SIZE];
/* 函数声明 */
void  TaskStart(void *pdata);
void  Task1(void *pdata);
void  Task2(void *pdata);
void  Task3(void *pdata);
void  Task4(void *pdata);
//void  Task5(void *pdata);
void  Task6(void *pdata);
void  Task7(void *pdata);
void  UART0_SendByte(uint8 dat);
void  UART0_SendStr(uint8 const *str);

void  BeepMoo(void);
void  BeepNoMoo(void);
uint32 GetKey(void);
OS_EVENT  *LEDBox ;
OS_EVENT  *DispSem;
#define 	KEY1	1 << 16		// P0.16-KEY1
#define		BEEP	1 << 7		// P0.7-BEEP
#define		LED1	1 << 18		// P0.7-BEEP
#define		LED2	1 << 19   	// P0.7-BEEP

/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :c语言的主函数,由它启动多任务环境
*********************************************************************************************************
*/
int main (void)
{
	OSInit ();
	LEDBox = OSMboxCreate((void *)0);	
	DispSem = OSSemCreate(1);																									
	OSTaskCreate(TaskStart,(void *)0, &TaskStartStk[TASK_STK_LARGE_SIZE - 1], 0);		
	OSStart ();
	return 0;															
}

/*
********************************************************************************************************
** 									TaskStart 任务0
** 							完成目标板初始化和创建TaskLED1/2任务
********************************************************************************************************
*/
void  TaskStart(void *pdata)
{
	struct time now;
	struct date today;
	char s[40];
	pdata = pdata ;
	
	TargetInit();
	PINSEL0 = (PINSEL0 & 0xffff3fff);
	PINSEL1 = (PINSEL1 & 0xfffffffc);
	IO0DIR &= ~KEY1 ;
	IO0SET = BEEP ;
	IO0DIR |= BEEP ;
	
    OSTaskCreate(Task1,(void *)0, &Task1Stk[TASK_STK_SIZE - 1], 1);
    OSTaskCreate(Task2,(void *)0, &Task2Stk[TASK_STK_SIZE - 1], 2);
    OSTaskCreate(Task3,(void *)0, &Task3Stk[TASK_STK_SIZE - 1], 3);
    OSTaskCreate(Task4,(void *)0, &Task4Stk[TASK_STK_SIZE - 1], 4);
   // OSTaskCreate(Task5,(void *)0, &Task5Stk[TASK_STK_LARGE_SIZE - 1], 5);
    OSTaskCreate(Task6,(void *)0, &Task6Stk[TASK_STK_SIZE - 1], 6);
    OSTaskCreate(Task7,(void *)0, &Task7Stk[TASK_STK_SIZE - 1], 7);
    while(1)
    {
    	gettime(&now);
    	getdate(&today);
    	sprintf(s,"%04d - %02d - %02d  %02d:%02d:%02d",
    	        today.da_year,
    	        today.da_mon,
    	        today.da_day,
    	        now.ti_hour,
    	        now.ti_min,
    	        now.ti_sec);
    //	PC_DispStr(1,1,s,DISP_FGND_YELLOW + DISP_BGND_BLUE);
    	OSTimeDly(OS_TICKS_PER_SEC / 2);
    }
}

/*
********************************************************************************************************
** 									TaskLED1
** 								    LED1任务
********************************************************************************************************
*/
void  Task1(void *pdata)
{
  uint8 err;
  uint32 *msg;
  pdata = pdata ;
  
  PINSEL2 = PINSEL2 & (~0x08);
  IO1DIR |= LED1;
  IO1SET = LED1;
  for(;;)
  {
  // 	msg = OSMboxPend(LEDBox,0,&err);
   	IO1CLR = LED1;
   	OSTimeDly(OS_TICKS_PER_SEC);
   	IO1SET = LED1;
   	OSTimeDly(OS_TICKS_PER_SEC);
   //	OSTimeDly(*msg);
  }
  
}

/*
********************************************************************************************************
** 									TaskLED2
** 								    LED2任务
********************************************************************************************************
*/
void  Task2(void *pdata)
{
  pdata = pdata ;
 
  PINSEL2 = PINSEL2 & (~0x08);
  IO1DIR |= LED2;
  IO1SET = LED2;
  for(;;)
  {
   	IO1CLR = LED2;
   	OSTimeDly(OS_TICKS_PER_SEC/2);
   	IO1SET = LED2;
   	OSTimeDly(OS_TICKS_PER_SEC/2);
  }
  
}

/*
********************************************************************************************************
** 									TaskLED3
** 								    LED2任务
********************************************************************************************************
*/
void  Task3(void *pdata)
{
 
  pdata = pdata ;  
  
  for(;;)
  {
   	OSTaskSuspend(OS_PRIO_SELF);
   	IO0CLR = BEEP ;
   	OSTimeDly(OS_TICKS_PER_SEC/2);
   	IO0SET = BEEP ;
   	OSTimeDly(OS_TICKS_PER_SEC/2);
   	IO0CLR = BEEP ;
   	OSTimeDly(OS_TICKS_PER_SEC/2);
   	IO0SET = BEEP ;
   	OSTimeDly(OS_TICKS_PER_SEC/2);
   	
   	
   	
   	
  }
  
}

/*
********************************************************************************************************
** 									TaskLED3
** 								    LED2任务
********************************************************************************************************
*/
void  Task4(void *pdata)
{
  uint8 err;
  volatile uint32 freq = OS_TICKS_PER_SEC / 2 ;
  struct time now;
  struct date today;
  pdata = pdata ;  
  today.da_year = 2007 ;
  today.da_mon = 3 ;
  today.da_day = 4;
  today.da_dow = 7;
  now.ti_hour  = 17;
  now.ti_min   = 10; 
  now.ti_sec   = 00;
  setdate(&today);
  settime(&now);
  for(;;)
  {
   	OSTimeDly(OS_TICKS_PER_SEC/50);
   	if((IO0PIN & KEY1) != 0)
   		continue ;
   	OSTimeDly(OS_TICKS_PER_SEC/50);
   	if((IO0PIN & KEY1) != 0)
   		continue ;
  /* 	OSTaskResume(3);
    freq += OS_TICKS_PER_SEC / 2 ;
    err = OSMboxPost(LEDBox,(void *)&freq);*/
    setdate(&today);
    settime(&now);
    today.da_year++;
    now.ti_hour = (now.ti_hour + 1) % 24;
   	while((IO0PIN & KEY1) == 0)
   		OSTimeDly(OS_TICKS_PER_SEC/2);
   	
  }
  
}

/*
********************************************************************************************************
** 									TaskLED4
** 								    LED2任务
********************************************************************************************************
*/
void  Task5(void *pdata)
{
  char s[40];
  pdata = pdata;  
  T1MCR = 0x00;
  T1CCR = 0x00;
  for(;;)
  {
   	T1TC = 0x00;
   	T1TCR = 0x01 ;
   	OSTimeDly(OS_TICKS_PER_SEC);
   	T1TCR = 0x00;
   	sprintf(s,"OSC is %uHz.",(uint32)T1TC);
   //	PC_DispStr(1,1,s,DISP_FGND_YELLOW + DISP_BGND_BLUE);
   	
  }
  
}

/*
********************************************************************************************************
** 									TaskLED4
** 								    LED2任务
********************************************************************************************************
*/
void  Task6(void *pdata)
{
  uint8 err;
  uint8 str0[]=" I AM WBB";
  pdata = pdata;  
 
  for(;;)
  {
  	OSSemPend(DispSem,0,&err);
  	UART0_SendStr(str0);
  	OSTimeDly(2);
  	err = OSSemPost(DispSem);
   	
  }
  
}

/*
********************************************************************************************************
** 									TaskLED4
** 								    LED2任务
********************************************************************************************************
*/
void  Task7(void *pdata)
{
  uint8 err;
  uint8 str1[]=" I AM SYY";
  pdata = pdata;  
 
  for(;;)
  {
  	OSSemPend(DispSem,0,&err);
  	UART0_SendStr(str1);
  	OSTimeDly(2);
  	err = OSSemPost(DispSem);
   	
  }
  
}
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

void  BeepMoo(void)
{
   IO0CLR = BEEP;  
} 

void  BeepNoMoo(void)
{
   IO0SET = BEEP;  
}

uint32 GetKey(void)
{
   	volatile uint32 key;

	key = IO0PIN & KEY1;
	return key;
} 

void UART0_SendByte(uint8 dat)
{
	U0THR = dat ;
	while((U0LSR & 0x40) == 0)
	{
		OSTimeDly(2);
	}
	
} 
 
void UART0_SendStr(uint8 const *str)
{
 	while(1)
 	{
 		if(*str == '\0') break;
 		UART0_SendByte(*str ++);
 	}
}

⌨️ 快捷键说明

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