📄 main.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 + -