📄 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 12 /* 任务的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 TASKI2CTEST_ID 6 /* 任务的ID */
#define TASKI2CTEST_PRIO TASKI2CTEST_ID /* 任务的优先级 */
#define TASKI2CTEST_STACK_SIZE 512 /* 定义用户堆栈长度 */
OS_STK TASKI2CTEST_STACK[TASKI2CTEST_STACK_SIZE]; /* 定义任务1 堆栈 */
void taskI2cTest(void *pdata); /* 声明任务1 */
/*********************************************************************************************************
TASK2 任务ID、优先级、堆栈设置及函数声明
*********************************************************************************************************/
#define TASK_TEST_RESULT_ID 13 /* 任务的ID */
#define TASK_TEST_RESULT_PRIO TASK_TEST_RESULT_ID /* 任务的优先级 */
#define TASK_TEST_RESULT_STACK_SIZE 512 /* 定义用户堆栈长度 */
OS_STK TASK_TEST_RESULT_STACK[TASK_TEST_RESULT_STACK_SIZE]; /* 定义任务2 堆栈 */
void taskTestResult (void *pdata); /* 声明任务2 */
/*********************************************************************************************************
定义FRAM存储器的地址
*********************************************************************************************************/
#define CAT24WC04_ADDR 0xA4
#define ZLG7290_ADDR 0x70
/*********************************************************************************************************
定义一个各个任务之间通讯的邮箱
*********************************************************************************************************/
OS_EVENT *GposeI2cStatMbox;
OS_EVENT *Gpose7290IntSem;
/*********************************************************************************************************
** Function name : main
** Descriptions : 主函数
** Input : 无
** Output : 无
** Created Date : 2006-04-11
*********************************************************************************************************/
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();
}
/*********************************************************************************************************
** Function name: TASK0
** Descriptions: 无
** Input: 无
** Output: 无
*********************************************************************************************************/
void task0 (void *pdata)
{
pdata = pdata;
TargetInit();
GposeI2cStatMbox = OSMboxCreate((void*)NULL); /* 创建一个邮箱 */
Gpose7290IntSem = OSSemCreate(0); /* 创建一个信号量 */
if (!GposeI2cStatMbox) {
OSTaskSuspend(OS_PRIO_SELF);
}
if (!Gpose7290IntSem) {
OSTaskSuspend(OS_PRIO_SELF);
}
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/5);
OSTimeDly(1*OS_TICKS_PER_SEC); /* 延时1秒好区别后面蜂鸣器 */
OSTaskCreateExt(taskTestResult,
(void *)0,
&TASK_TEST_RESULT_STACK[TASK_TEST_RESULT_STACK_SIZE - 1],
TASK_TEST_RESULT_PRIO,
TASK_TEST_RESULT_ID,
&TASK_TEST_RESULT_STACK[0],
TASK_TEST_RESULT_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(taskI2cTest,
(void *)0,
&TASKI2CTEST_STACK[TASKI2CTEST_STACK_SIZE - 1],
TASKI2CTEST_PRIO,
TASKI2CTEST_ID,
&TASKI2CTEST_STACK[0],
TASKI2CTEST_STACK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
while (1)
{
OSTimeDly(OS_TICKS_PER_SEC);
}
}
/*********************************************************************************************************
** Function name: beepCpl
** Descriptions: 让蜂鸣器鸣叫指定次数
** Input: uiParmCout 指定鸣叫的次数
** Output: 无
*********************************************************************************************************/
void beepCpl ( uint32 uiParmCout )
{
uint32 i;
for (i = 0; i < uiParmCout; i++ ) {
BUZZER_Set();
OSTimeDly(OS_TICKS_PER_SEC / 2);
BUZZER_Clr();
OSTimeDly(OS_TICKS_PER_SEC / 2);
}
}
/*********************************************************************************************************
** Function name: testResult
** Descriptions: 无
** Input: 无
** Output: 无
*********************************************************************************************************/
void taskTestResult (void *pdata)
{
uint8 ucerr;
uint8 *ucResult;
pdata = pdata;
while(1) {
ucResult = (uint8 *)OSMboxPend(GposeI2cStatMbox, 0, &ucerr); /* 等待消息邮箱 */
if (ucerr == OS_NO_ERR) {
switch(*ucResult) { /* 检查邮箱传送过来的结果 */
case 1: /* 结果是I2C读写结果正确 */
beepCpl(1);
break;
case 3: /* 结果是I2C读写结果错误 */
beepCpl(3);
break;
default: /* 其他未知情况 */
beepCpl(4); /* 蜂鸣四下 */
break;
}
}
}
}
/*********************************************************************************************************
** Function name: GpioIntISR
** Descriptions: Gpio中断服务程序
** Input: 无
** Output: 无
*********************************************************************************************************/
void GpioIntISR (void)
{
IO0IntClr = 1<<15; /* 清除中断源 */
OSSemPost(Gpose7290IntSem); /* 发送信号量 */
VICVectAddr = 0; /* 清除VIC */
}
/*********************************************************************************************************
** Function name: TASKI2CTEST
** Descriptions: 无
** Input: 无
** Output: 无
*********************************************************************************************************/
void taskI2cTest (void *pdata)
{
uint8 ucReadFramBuf[40];
uint8 ucI2cStat;
uint8 ucerr; /* 操作系统错误返回变量 */
uint8 ucKey;
char str[] = "www.zlgmcu.com";
pdata = pdata;
PINSEL1 &= ~((3 << 22) | (3 << 24)); /* 设置I2C管脚功能 */
PINSEL1 |= (1 << 22) | (1 << 24); /* 设置I2C管脚功能 */
PINSEL1 |= (3 << 6) | (3 << 8);
PINSEL0 &= 0x3fffffff;
IO0IntEnF |= 1 << 15;
SetVICIRQ(9, 2, (int)i2c0IRQ); /* I2C中断设置 */
SetVICIRQ(19, 3, (int)i2c1IRQ);
SetVICIRQ(17,4, (int)GpioIntISR); /* GPIO中断设置 */
i2cInit(0, "Speed=10000", NULL);
i2cInit(1, "Speed=10000", NULL); /* 初始化I2C0 */
OSTimeDly(50);
i2cWrite(0, /* I2C0 */
CAT24WC04_ADDR, /* 器件地址 */
(uint8*)str, /* 要写入数据的缓冲区 */
0, /* 器件子地址 */
1, /* 器件子地址类型为单字节型 */
sizeof(str)); /* 写入的数量 */
OSTimeDly(50);
i2cRead( 0, /* I2C0 */
CAT24WC04_ADDR, /* 器件地址 */
ucReadFramBuf, /* 接收数据的缓冲区 */
0, /* 器件子地址 */
1, /* 器件子地址类型为单字节型 */
sizeof(str)); /* 读取数据的长度 */
while (i2cGetFlag(0) == I2C_BUSY); /* 等待I2C总线操作结束 */
if (strcmp((char*)ucReadFramBuf, (char *)str) == 0) {
ucI2cStat = 1;
} else {
ucI2cStat = 3;
}
OSMboxPost(GposeI2cStatMbox, &ucI2cStat); /* 发送I2C状态信号量 */
zlg7290LEDTest();
while(1) {
OSSemPend(Gpose7290IntSem, 0, &ucerr); /* 等待7290是否有键按下 */
if (ucerr != OS_NO_ERR) {
continue;
}
ucKey = zlg7290GetKey(); /* 获取键值 */
if (ucKey > 8) { /* 键值判断 */
ucKey = 8;
}
if (ucKey == 0) {
continue;
}
zlg7290FlashContrl((ucKey - 1), 1); /* 根据不同的键值闪烁不同的LED*/
}
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -