📄 main.c
字号:
/****************************************Copyright (c)*****************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.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:
** Modified date:
** Version:
** Descriptions:
**
**********************************************************************************************************/
#include "main.h"
/**********************************************************************************************************
TASK0 任务ID、优先级、堆栈设置及函数声明
**********************************************************************************************************/
#define TASK0_ID 11 /* 任务的ID */
#define TASK0_PRIO TASK0_ID /* 任务的优先级 */
#define TASK0_STACK_SIZE 512 /* 定义用户堆栈长度 */
OS_STK TASK0_STACK[TASK0_STACK_SIZE]; /* 定义任务0 堆栈 */
void TASK0(void *pdata); /* 声明任务0 */
/**********************************************************************************************************
TASK1 任务ID、优先级、堆栈设置及函数声明
**********************************************************************************************************/
#define TASK1_ID 12 /* 任务的ID */
#define TASK1_PRIO TASK1_ID /* 任务的优先级 */
#define TASK1_STACK_SIZE 512 /* 定义用户堆栈长度 */
OS_STK TASK1_STACK[TASK1_STACK_SIZE]; /* 定义任务1 堆栈 */
void TASK1(void *pdata); /* 声明任务1 */
/**********************************************************************************************************
TASK2 任务ID、优先级、堆栈设置及函数声明
**********************************************************************************************************/
#define TASK2_ID 13 /* 任务的ID */
#define TASK2_PRIO TASK2_ID /* 任务的优先级 */
#define TASK2_STACK_SIZE 1024 /* 定义用户堆栈长度 */
OS_STK TASK2_STACK[TASK2_STACK_SIZE]; /* 定义任务2 堆栈 */
void TASK2(void *pdata); /* 声明任务2 */
/**********************************************************************************************************
TASK3 任务ID、优先级、堆栈设置及函数声明
**********************************************************************************************************/
#define TASK3_ID 14 /* 任务的ID */
#define TASK3_PRIO TASK3_ID /* 任务的优先级 */
#define TASK3_STACK_SIZE 512 /* 定义用户堆栈长度 */
OS_STK TASK3_STACK[TASK3_STACK_SIZE]; /* 定义任务3 堆栈 */
void TASK3(void *pdata); /* 声明任务3 */
/**********************************************************************************************************
** Function name: main
** Descriptions: 主函数
** Input parameters: None
** output parameters: None
** Created Date:
**********************************************************************************************************/
int main (void)
{
OSInit();
OSTaskCreateExt(TASK0,
(void *)0,
&TASK0_STACK[TASK0_STACK_SIZE-1],
TASK0_PRIO,
TASK0_ID,
&TASK0_STACK[0],
TASK0_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSStart();
return 0;
}
/**********************************************************************************************************
** Function name: TASK0
** Descriptions: None
** input parameters: None
** output parameters: None
**********************************************************************************************************/
void TASK0 (void *pdata)
{
TargetInit();
BUZZER_Set();
OSTimeDly(OS_TICKS_PER_SEC / 10);
BUZZER_Clr();
OSTimeDly(OS_TICKS_PER_SEC / 10);
BUZZER_Set();
OSTimeDly(OS_TICKS_PER_SEC / 10);
BUZZER_Clr();
OSTimeDly(OS_TICKS_PER_SEC / 10);
pdata = pdata;
OSTaskCreateExt(TASK1,
(void *)0,
&TASK1_STACK[TASK1_STACK_SIZE-1],
TASK1_PRIO,
TASK1_ID,
&TASK1_STACK[0],
TASK1_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(TASK2,
(void *)0,
&TASK2_STACK[TASK2_STACK_SIZE-1],
TASK2_PRIO,
TASK2_ID,
&TASK2_STACK[0],
TASK2_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(TASK3,
(void *)0,
&TASK3_STACK[TASK3_STACK_SIZE-1],
TASK3_PRIO,
TASK3_ID,
&TASK3_STACK[0],
TASK3_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
while(1) {
OSTimeDly(OS_TICKS_PER_SEC);
}
}
/**********************************************************************************************************
** Function name: TASK1
** Descriptions: None
** input parameters: None
** output parameters: None
**********************************************************************************************************/
void TASK1 (void *pdata)
{
uint32 i;
pdata = pdata;
SPIInit();
while(1){
for (i = 0;i < 42;i++){
OSTimeDly(OS_TICKS_PER_SEC/3);
SPISndByte(LED_TBL[i]); /* 发送显示数据 */
}
}
}
OS_EVENT *MiniSem; /* MiniISA中断信号量 */
/**********************************************************************************************************
** Function name: TASK2
** Descriptions: None
** input parameters: None
** output parameters: None
**********************************************************************************************************/
void TASK2 (void *pdata)
{
uint8 cmd[4], i, err,relay; /* 命令寄存器 */
pdata = pdata;
MiniSem = OSSemCreate(0); /* 建立信号量 */
EMCInit(); /* 初始化外部总线 */
MISAInit(); /* 外部函数 */
/*
* MiniISA中断初始化
*/
InitExInt();
OSTimeDly(500); /* 等待8016A复位完成 */
cmd[0] = 6; /* 6 * 5ms = 30ms */
cmd[1] = 0;
cmd[2] = 0x30;
WriteCmd8016A(cmd, BoardB0);
cmd[2] = 0x31;
WriteCmd8016A(cmd, BoardB0); /* 设置IDI0滤波器参数 */
cmd[0] = 0x01;
cmd[2] = 0x20;
WriteCmd8016A(cmd, BoardB0); /* 使能IDI0的数字滤波功能 */
cmd[0] = 10; /* 10 * 100us */
cmd[1] = 0;
cmd[2] = 0x10;
WriteCmd8016A(cmd, BoardB0); /* 设置PWM0高电平 */
cmd[0] = 10;
cmd[1] = 0;
cmd[2] = 0x11;
WriteCmd8016A(cmd, BoardB0); /* 设置PWM0低电平 */
cmd[0] = 20;
cmd[1] = 0;
cmd[2] = 0x12;
WriteCmd8016A(cmd, BoardB0); /* 设置PWM1高电平 */
cmd[0] = 20;
cmd[1] = 0;
cmd[2] = 0x13;
WriteCmd8016A(cmd, BoardB0); /* 设置PWM1高电平 */
cmd[0] = 0x03;
cmd[1] = 0;
cmd[2] = 0x1f;
WriteCmd8016A(cmd, BoardB0); /* 使能PWM输出 */
cmd[0] = 0x40;
cmd[1] = 0;
cmd[2] = 0x40;
WriteCmd8016A(cmd, BoardB0); /* 设置IDI0计数初始为100 */
cmd[0] = 0x48;
cmd[1] = 0;
cmd[2] = 0x48;
WriteCmd8016A(cmd, BoardB0); /* 设置IDI0计数匹配值为106 */
cmd[0] = 0xff;
cmd[1] = 0;
cmd[2] = 0x2B;
WriteCmd8016A(cmd, BoardB0); /* 使能IDI0计数器匹配中断 */
cmd[0] = 1;
cmd[1] = 0;
cmd[2] = 0x28;
WriteCmd8016A(cmd, BoardB0); /* 使能IDI0加法计数功能 */
Wreg8016A(M8016_INT_EN, BoardB0, INTCTR); /* 总中断 */
cmd[2] = 0x01; /* 禁能继电器命令 */
while(1)
{
for (relay = 0x00; relay<10; relay++)
for (i=0; i<9; i++){ /* 继电器激活 */
cmd[0] = LED_TBL[i];
Write8016A(cmd, BoardB0);
OSTimeDly(OS_TICKS_PER_SEC / 50);
}
for (i=0; i<10; i++){ /* 继电器输出测试 */
cmd[0] = LED_TBL[i];
Write8016A(cmd, BoardB0);
OSTimeDly(OS_TICKS_PER_SEC / 2);
}
for (;;){ /* 输入测试 */
cmd[0] = Rreg8016A(BoardB0, IMB3); /* 读取输入状态 */
Write8016A(cmd, BoardB0);
OSSemPend(MiniSem, 10, &err); /* 等待中断信号 */
if (err == OS_NO_ERR){
break;
}
}
Int8016A(); /* 8016A中断处理函数 */
while (1)
OSTimeDly(OS_TICKS_PER_SEC * 3);
}
}
/**********************************************************************************************************
** Function name: TASK3
** Descriptions: None
** input parameters: None
** output parameters: None
**********************************************************************************************************/
void TASK3 (void *pdata)
{
pdata = pdata;
while(1) {
BUZZER_Set();
OSTimeDly(OS_TICKS_PER_SEC / 2);
BUZZER_Clr();
OSTimeDly(OS_TICKS_PER_SEC / 2);
}
}
/**********************************************************************************************************
END FILE
**********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -