LPC1788定時器使用

來源:互聯網
上載者:User

標籤:

#ifndef __TIM_H_

#define __TIM_H_

 

#include "common.h"

 

extern u8 tim1_mr0_flag;

 

void tim0_ch0_count_int_init(u32 pr,u32 count);//定時器0 通道0 計數模式 中斷模式 初始化

 

 

 

 

#endif

 

 

 

 

 

 

#include "tim.h"

 

u8 tim1_mr0_flag = 0;

 

void tim0_ch0_count_int_init(u32 pr,u32 count)  //定時器0 通道0 計數模式 中斷模式 初始化

{

    //開啟TIM0時鐘

    LPC_SC->PCONP |= (1<<1);//開啟時鐘

    LPC_TIM0->TCR |= (1<<1);//複位定時器   因為此處複位了寄存器,所以系統中使用多個定時器通道的時候這一位一定要改

    LPC_TIM0->TCR = 0x00;//禁止定時器 退出複位

    LPC_TIM0->PR = pr;//設定預分頻值

    LPC_TIM0->MR0 = count;//預設計數值

    LPC_TIM0->MCR |= (1<<1)|(1<<0);//mr0 匹配時複位 並且中斷開啟

    LPC_TIM0->CTCR &= ~(3<<0);//工作在計數模式

   

    //此時,需要配置中斷

    NVIC_SetPriority(TIMER0_IRQn,NVIC_EncodePriority(PriorityGroup2,TIM0_PreemptPriority,TIM0_SubPriority));

    LPC_TIM0->IR |= (1<<0);//清除中斷

    NVIC_ClearPendingIRQ(TIMER0_IRQn);//清除中斷

    NVIC_EnableIRQ(TIMER0_IRQn);//開啟中斷通道

   

    //開啟定時器

    LPC_TIM0->TCR |= (1<<0);

}

 

void TIMER0_IRQHandler(void)

{

    if((LPC_TIM0->IR & 0x01))//如果是通道1發生中斷

    {

        LPC_TIM0->IR |= (1<<0);//清除中斷

        NVIC_ClearPendingIRQ(TIMER0_IRQn);//清除中斷

        tim1_mr0_flag = 1;

    }

    else

    {

        //現在還沒做其他的通道的中斷

        LPC_TIM0->IR = 0xff;//清除中斷

        NVIC_ClearPendingIRQ(TIMER0_IRQn);//清除中斷

    }

}

 

 

 

 

 

 

 

 

 

 

 

LPC1788定時器使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.