本帖最后由 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");
- }
- */
- }
- }
纠结了老半天了,工程如下。
|