打印
[新手园地]

【第三批】学习笔记3:定时器中断的使用

[复制链接]
1518|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
564451696|  楼主 | 2011-10-20 07:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本次简单地使用了定时器0,熟悉定时器API的使用;
/*********************************************************************************************
*                    菜农新唐M0助学交流(Q群:12047788)
* 模块名称:定时器中断的使用
* 创建时间:2011-10-19
* 所属公司 : 火星菜农集团
* 文件名称:         Main.c
* 作者 :  周炳权
* 功能描述:        按KEY2进入中断驱动蜂鸣器;按KEY2进入,点亮流水灯驱动蜂鸣器。
                        定时器0关蜂鸣器(500ms)
*----------------------------------------------------------------
修改记录:

修改日期:

修改人:

**********************************************************************************************************/

#include <stdio.h>
#include "NUC1xx.h"
#include "DrvGPIO.h"
#include "DrvSYS.h"
#include "DrvTIMER.h"
uint32_t uTimerEventNo[4];
/********************************************************************
*@作者:周炳权
*@功能:外部中断0回调函数
*
*@输入:          NONE
*@输出:        NONE
********************************************************************/
void EINT0CALLBACK( void )
{
        DrvGPIO_SetBit( E_GPB, 10);
//        DrvTIMER_ClearTimerEvent( E_TMR0, uTimerEventNo[0] );/*清除定时器事件*/
//        DrvTIMER_Close( E_TMR0 );                                  /*关闭定时器*/
        return;
}
/********************************************************************
*@作者:周炳权
*@功能:外部中断0回调函数
*
*@输入:          NONE
*@输出:        NONE
********************************************************************/
void TMR0_Callback( void )
{
       
        DrvGPIO_ClrBit( E_GPB, 10);
        return;
}
/********************************************************************
*@作者:周炳权
*@功能:流水灯函数
*
*@输入:          NONE
*@输出:        NONE
********************************************************************/
void LED_Gilde( void )
{
        DrvGPIO_ClrBit( E_GPA, 2);
        DrvSYS_Delay(50000);
        DrvGPIO_SetBit( E_GPA, 2);
    DrvSYS_Delay(50000);
        DrvGPIO_ClrBit( E_GPA, 3);
        DrvSYS_Delay(50000);
        DrvGPIO_SetBit( E_GPA, 3);
        DrvSYS_Delay(50000);
        DrvGPIO_ClrBit( E_GPA, 4);
        DrvSYS_Delay(50000);
        DrvGPIO_SetBit( E_GPA, 4);
        DrvSYS_Delay(50000);
        DrvGPIO_ClrBit( E_GPA, 5);
        DrvSYS_Delay(50000);
        DrvGPIO_SetBit( E_GPA, 5);
        DrvSYS_Delay(50000);
        DrvGPIO_SetBit( E_GPB, 10);
        return;
}
void SYS_Init( void )
{
        UNLOCKREG(x);                                                 /*芯片注册解锁*/
        SYSCLK->PWRCON.XTL12M_EN =1;                 /*设定12M外部晶振*/
//        LOCKREG(x);                                                         /*芯片上锁*/

        DrvSYS_Delay(5000);                                         /*等待时钟就绪*/

        DrvTIMER_Init();                                         /*初始化定时器*/

        DrvSYS_SelectIPClockSource(E_SYS_TMR0_CLKSRC, 0);          /*选择定时器时钟源为外部12MHz*/
    DrvSYS_SelectIPClockSource(E_SYS_TMR1_CLKSRC, 0);
    DrvSYS_SelectIPClockSource(E_SYS_TMR2_CLKSRC, 0);
    DrvSYS_SelectIPClockSource(E_SYS_TMR3_CLKSRC, 0);

        DrvGPIO_Open( E_GPA, 2, E_IO_OUTPUT);/*设置端口GPA2为输出模式*/
        DrvGPIO_Open( E_GPA, 3, E_IO_OUTPUT);/*设置端口GPA3为输出模式*/
        DrvGPIO_Open( E_GPA, 4, E_IO_OUTPUT);/*设置端口GPA4为输出模式*/
        DrvGPIO_Open( E_GPA, 5, E_IO_OUTPUT);/*设置端口GPA5为输出模式*/
        DrvGPIO_Open( E_GPB, 15, E_IO_INPUT);/*设置端口GPB15为输入模式*/
        DrvGPIO_Open( E_GPB, 14, E_IO_INPUT);/*设置端口GPB14为输入模式*/
        DrvGPIO_Open( E_GPB, 10, E_IO_OUTPUT);/*设置端口GPB10为输出模式*/
        DrvGPIO_ClrBit( E_GPB, 10);                        /*禁止蜂鸣器工作*/

        DrvGPIO_EnableInt( E_GPB, 14, E_IO_FALLING, E_MODE_EDGE);        /*设置端口GPB14为外部中断模式*/
        DrvGPIO_SetDebounceTime(10, E_DBCLKSRC_10K);   
    DrvGPIO_EnableDebounce(E_GPB, 14);
        DrvGPIO_InitFunction( E_FUNC_EXTINT0);                 /*指定外部中断0引脚功能*/
        DrvGPIO_EnableEINT0( E_IO_FALLING, E_MODE_EDGE, EINT0CALLBACK);

        DrvTIMER_Open(E_TMR0, 2, E_PERIODIC_MODE);        /*500ms,周期模式*/
        uTimerEventNo[0] = DrvTIMER_SetTimerEvent(E_TMR0, 2, (TIMER_CALLBACK)TMR0_Callback, 0);  /*设置定时处理事件*/
        DrvTIMER_EnableInt(E_TMR0); /*使能定时器0中断*/
        DrvTIMER_Start(E_TMR0);          /*开始计数*/

        return;
}
/********************************************************************
*@作者:周炳权
*@功能:主函数
*
*@输入:          NONE
*@输出:        NONE
********************************************************************/
int main( void )
{
        SYS_Init();

        while(1)
        {
                if(DrvGPIO_GetBit( E_GPB, 15) == 0)
                {
                        LED_Gilde();
                //        DrvTIMER_EnableInt(E_TMR0); /*使能定时器0中断*/
                //        DrvTIMER_Start( E_TMR0 );          /*开始计数*/                       
                }
/*                else if(DrvGPIO_GetBit( E_GPB, 14) == 0)
                {
                        DrvGPIO_SetBit( E_GPB, 10);
                    DrvSYS_Delay(500000);
                        DrvGPIO_ClrBit( E_GPB, 10);
                        DrvSYS_Delay(50000);
                }
*/       
        }

}

The Third Project.rar

1.05 MB

相关帖子

沙发
564451696|  楼主 | 2011-10-20 08:22 | 只看该作者
没人顶,自己顶。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Stay hungry,stay foolish.

1

主题

157

帖子

0

粉丝