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

📄 main.c

📁 适用于MPC555的uCOS接口程序
💻 C
字号:
//////////////////////////
//	main.c 
//  
//  Description:  Starting point for C program development
//////////////////////////
#define GLOBAL_DEFINE		/* Define globals in this file */ 

#include "includes.h"	
#include "mpc555.h"


#define	TASK_STK_SIZE     256


#define AppTask1_PRIO	10
#define AppTask2_PRIO	15
#define AppTask3_PRIO	20
#define AppTask4_PRIO	25
#define StartTask_PRIO	5

static OS_STK     StartTask_STK[TASK_STK_SIZE];
static OS_STK     AppTask1_STK[TASK_STK_SIZE];
static OS_STK     AppTask2_STK[TASK_STK_SIZE];
static OS_STK     AppTask3_STK[TASK_STK_SIZE];
static OS_STK     AppTask4_STK[TASK_STK_SIZE];


OS_EVENT *Sem_AppTask1;
OS_EVENT *Sem_AppTask2;
OS_EVENT *Sem_AppTask3;
OS_EVENT *Sem_AppTask4;


VUINT8 pitctr;

void initPIT();
void init555();
void initSCI();
void TickerStart(INT32S ticks_per_second);

static void StartTask(void *pdata);

static void AppTask1(void *pdata);
static void AppTask2(void *pdata);
static void AppTask3(void *pdata);
static void AppTask4(void *pdata);

void init555()
{
	USIU.SYPCR.R = 0xffffff03;		/* Disable the watchdog timer */
	USIU.PLPRCR.B.MF = 0x009;		/* Set 40 MHz system clock for a 4MHz crystal */
	UIMB.UMCR.B.HSPEED = 0;			/* Set the IMB to run at full clock speed */	
	while(USIU.PLPRCR.B.SPLS == 0);
	USIU.SIMASK.R = 0x00000000;		//mask all interrupt}
}


void initPIT()
{								// SPECIFIC INITIALIZATIONS FOR PIT:
	USIU.PITC.B.PITC=0x500;	// Load desired count value, e.g. 1000
	USIU.PISCR.B.PITF=0x1;		// Freeze enabled to stop PIT during debug mode
	USIU.PISCR.B.PTE=0x01;		// Enable PIT to start counting
		

	USIU.PISCR.B.PIRQ=0x40;		// LEVEL ASSIGNMENT:
								// Assign PIT interrupt to Level 1
	USIU.PISCR.B.PIE=0x01;		// ENABLE INTERRUPT
								// Enable PIT interrupt
								// SET APPROPRIATE MASK
	USIU.SIMASK.B.LVM1=0b1;		//Enable level 0 interrupt;
}

void initSCI()
{
QSMCM.QSMCR.R= 0x0000;
QSMCM.QDSCI_IL.B.ILDSCI=2;
QSMCM.SCC1R0.R=130;
QSMCM.SCC1R1.R=0x000C;
/*
QSMCM.QSMCR.R= 0x0000;
QSMCM.SCC2R0.R=130;
QSMCM.SCC2R1.R=0x000C;
*/
}



void TickerStart (INT32S ticks_per_second)
{
	OS_ENTER_CRITICAL();	

	dec_init = COUNT_PER_SEC/ticks_per_second;		// This defines the decrement counts,

	Set_decrementer(); 

	USIU.TBSCR.B.TBIRQ=0x80;
	USIU.TBSCR.B.TBE=0b1;

	OS_EXIT_CRITICAL();	

}

static void StartTask(void *pdata)
{

    pdata = pdata;
    OS_ENTER_CRITICAL();    
    TickerStart(OS_TICKS_PER_SEC);                       		  /* Initialize the ticker                                   */
    OS_EXIT_CRITICAL();    
    OSStatInit();							//add a statistic task


Sem_AppTask1= OSSemCreate (0);
Sem_AppTask2= OSSemCreate (0);

Sem_AppTask3= OSSemCreate (0);
Sem_AppTask4= OSSemCreate (0);



	OSTaskCreate (	AppTask1,
					(void *)0L,
					(void *)&AppTask1_STK[TASK_STK_SIZE],
					AppTask1_PRIO);

	OSTaskCreate (	AppTask2,
					(void *)0L,
					(void *)&AppTask2_STK[TASK_STK_SIZE],
					AppTask2_PRIO);

	OSTaskCreate (	AppTask3,
					(void *)0L,
					(void *)&AppTask3_STK[TASK_STK_SIZE],
					AppTask3_PRIO);

	OSTaskCreate (	AppTask4,
					(void *)0L,
					(void *)&AppTask4_STK[TASK_STK_SIZE],
					AppTask4_PRIO);
					
initPIT();
				
	while(TRUE)
	{
	OSSemPost(Sem_AppTask4);
	OSTimeDly(3);
	}
	

}



static void AppTask1(void *pdata)
{
    UINT8  err;
	UINT8  cpu_usage;

    pdata = pdata;

    while (TRUE)
     	{
     	 OSSemPend(Sem_AppTask1,0,&err);
   	 	cpu_usage=OSCPUUsage;
   	 	while(QSMCM.SC1SR.B.TDRE!=0b1);
		QSMCM.SC1DR.R=cpu_usage;

		// OSSemPost(Sem_AppTask2);
		// OSTimeDly(2);
		}
}



static void AppTask2(void *pdata)
{
    UINT8  err;


    pdata = pdata;

    while (TRUE)
     	{
     	 OSSemPend(Sem_AppTask2,0,&err);

	 	while(QSMCM.SC1SR.B.TDRE!=0b1);
		QSMCM.SC1DR.R=0x42;

		 OSSemPost(Sem_AppTask1);

		}
}



static void AppTask3(void *pdata)
{
    UINT8  err;


    pdata = pdata;

    while (TRUE)
     	{
     	 OSSemPend(Sem_AppTask3,0,&err);

   	 	while(QSMCM.SC1SR.B.TDRE!=0b1);
		QSMCM.SC1DR.R=0x43;

		 OSSemPost(Sem_AppTask2);
		}
}


static void AppTask4(void *pdata)
{
    UINT8  err;


    pdata = pdata;

    while (TRUE)
     	{
     	 OSSemPend(Sem_AppTask4,0,&err);

   		 	while(QSMCM.SC1SR.B.TDRE!=0b1);
			QSMCM.SC1DR.R=0x44;

		 OSSemPost(Sem_AppTask3);
		}
}


void main()
{
                    
init555();	
initSCI();

OSInit ();

	OSTaskCreate (	StartTask,
					(void *)0L,
					(void *)&StartTask_STK[TASK_STK_SIZE],
					StartTask_PRIO);
	OSStart();
	/* No, it never returns... */ 
//while(1);

}



⌨️ 快捷键说明

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