本帖最后由 dong_abc 于 2011-5-29 20:07 编辑
#include <ucos_ii.h>
//#include "app_cfg.h"
#include "cpu.h"
#include <stdio.h>
#include "DrvUART.h"
#include "DrvGPIO.h"
#include "NUC1xx.h"
#include "DrvSYS.h"
#include <includes.h>
//用户自定义任务栈配置
#define STACKSIZE 128
//用户自定义任务信息
OS_STK TaskMain_Stack[STACKSIZE];
void TaskMain(void *Id);
#define TaskMain_Prio 20
//用户自定义消息
char EINT0_Msg=0x01;
char EINT1_Msg=0x02;
//用户自定义消息邮箱
OS_EVENT *EINT0_Mbox;
OS_EVENT *EINT1_Mbox;
void SysTick_Handler(void)
{
OS_CPU_SR cpu_sr;
OS_ENTER_CRITICAL();;
OSIntNesting++;
OS_EXIT_CRITICAL();
OSTimeTick();
OSIntExit();
}
void EINT0Callback(void)
{
printf("EINT0 Interrupt!\n");
OSMboxPost(EINT0_Mbox, (void *)&EINT0_Msg);
}
void EINT1Callback(void)
{
printf("EINT1 Interrupt!\n");
OSMboxPost(EINT1_Mbox, (void *)&EINT1_Msg);
}
void Uart_Init(void)
{
STR_UART_T param;
DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0); // 使能UART时钟
DrvGPIO_InitFunction(E_FUNC_UART0); // 复用功能引脚设置
param.u32BaudRate = 115200; // 波特率
param.u8cDataBits = DRVUART_DATABITS_8; // 数据位
param.u8cStopBits = DRVUART_STOPBITS_1; // 停止位
param.u8cParity = DRVUART_PARITY_NONE; // 校验位
param.u8cRxTriggerLevel = DRVUART_FIFO_1BYTES; // FIFO存储深度 1 字节
param.u8TimeOut = 0; // FIFO超时设定
DrvUART_Open(UART_PORT0, ¶m); // 串口开启、结构体整体赋值
}
void Buzzer_Disable(void)
{
DrvGPIO_Open(E_GPB, 10, E_IO_OUTPUT); // 设置GPB10端口为输出模式
DrvGPIO_ClrBit(E_GPB, 10); // 清GPB10端口 蜂鸣器不叫唤
}
void Buzzer_Enable(void)
{
DrvGPIO_Open(E_GPB, 10, E_IO_OUTPUT); // 设置GPB10端口为输出模式
DrvGPIO_SetBit(E_GPB, 10); // 清GPB10端口 蜂鸣器不叫唤
}
int main (void)
{
UNLOCKREG(); // 芯片注册解锁
SYSCLK->WRCON.XTL12M_EN = 1; // 设定12M外部晶振
DrvSYS_Delay(5000); // 等待时钟就绪
OSInit();
Uart_Init();
Buzzer_Disable();
DrvGPIO_InitFunction(E_FUNC_EXTINT0);
DrvGPIO_InitFunction(E_FUNC_EXTINT1);
DrvGPIO_EnableEINT0(E_IO_FALLING, E_MODE_LEVEL, EINT0Callback);
DrvGPIO_EnableEINT1(E_IO_BOTH_EDGE, E_MODE_EDGE, EINT1Callback);
EINT0_Mbox = OSMboxCreate((void *)0);
EINT1_Mbox = OSMboxCreate((void *)0);
OSTaskCreate(TaskMain, (void *)0, (OS_STK *)&TaskMain_Stack[STACKSIZE-1], TaskMain_Prio);
OSStart();
}
void TaskMain(void *Id)
{
INT8U err;
char *pmsg;
for(;;)
{
//EINT0消息处理
pmsg = (char*)OSMboxPend(EINT0_Mbox, 0, &err);
if (err == OS_ERR_NONE)
{
printf("get EINT0_Msg:0x%02x!\n", *pmsg);
Buzzer_Enable();
}
else
{
//printf("TaskMain get EINT0_Msg timeout\n");
}
/*
//EINT1消息处理
pmsg = (char*)OSMboxPend(EINT1_Mbox, 0, &err);
if (err == OS_ERR_NONE)
{
//printf("get EINT1_Msg:0x%02x!\n", *pmsg);
Buzzer_Disable();
}
else
{
//printf("TaskMain get EINT1_Msg timeout\n");
}
*/
}
}
纠结了老半天了,工程如下。
NUC1xx_uCOS_II.rar
(313.26 KB)
|