新聞中心

        K60 PIT定時器

        作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
        感覺K60PIT定時器就像是51,PIC中的timer(貌似K60有很多種定時器Systick、LPTMR、PDB)



        Systick是什么呢,它是Cortex內(nèi)核的定時器,也就是說不管是M3M4,不管是ST的單片機還是飛思卡爾的單片機,這個定時器的結(jié)構(gòu)和用法是一樣的,它也可以產(chǎn)生周期中斷,也可以作為精準(zhǔn)延時函數(shù)。但是他的真正用武之地值操作系統(tǒng)的嘀嗒時鐘,也就是為uC/OS等操作系統(tǒng)提供時鐘節(jié)拍。一來他是內(nèi)核級別的時鐘,中斷優(yōu)先級比其他外設(shè)模塊要高;二來他比較通用,可以不用改任何代碼就移植到其他單片機上。

        那么LPTMR、PDB呢?這兩個是飛思卡爾Kinetis特有的外設(shè)模塊,也可以用來做定時器,產(chǎn)生周期中斷,但是他們也是各自有各自特殊的用途的,LPTMR可以用來做脈沖累加器,用來測量脈沖波的頻率;PDB是可編程延時模塊,他的主打功能是產(chǎn)生DAC、ADC模塊的硬件觸發(fā)信號,來使他們能夠自主的、不需要用戶軟件來進行工作。

        總結(jié)上面說的就是,Systick使用在操作系統(tǒng)里的(較高端的樣子),LPTMR用來計數(shù)脈沖,PDB用來觸發(fā)其他外圍設(shè)備。而PIT則是簡簡單單的周期定時,利用拉普蘭德庫庫函數(shù),可以輕松掌握。

        先說說和之前單片機不同之處;PIT可以定時Us,Ms,S定時單位很多,因為底層庫函數(shù)已經(jīng)幫你寫好了。所以要定時多長一段時間,個人感覺比51和PIC都簡單。貼上初始化

        voidpit_init(void)
        {
        //配置PIT0參數(shù)
        pit0_init_struct.PIT_Pitx=PIT0;
        pit0_init_struct.PIT_PeriodMs=100;//定時周期1秒
        pit0_init_struct.PIT_Isr=pit0_isr;//設(shè)置中斷函數(shù)
        //初始化PIT0
        LPLD_PIT_Init(pit0_init_struct);

        //配置PIT1參數(shù)
        pit1_init_struct.PIT_Pitx=PIT1;
        pit1_init_struct.PIT_PeriodMs=500;//定時周期1000毫秒
        pit1_init_struct.PIT_Isr=pit1_isr;//設(shè)置中斷函數(shù)
        //初始化PIT1
        LPLD_PIT_Init(pit1_init_struct);

        //使能PIT0和PIT1
        LPLD_PIT_EnableIrq(pit0_init_struct);
        LPLD_PIT_EnableIrq(pit1_init_struct);
        }

        然后就是中斷函數(shù)

        voidpit0_isr(void)
        {
        //LPLD_GPIO_Toggle_b(PTA,10);
        sec++;
        }

        voidpit1_isr(void)
        {
        //sec++;
        }

        我想達到的效果是有4個LED,第一個LED亮3下后第二個LED翻轉(zhuǎn),第二個LED亮3下后第三個LED翻轉(zhuǎn),以此類推

        voidmain(void)
        {
        //初始化PIT
        pit_init();
        init_gpio();
        PTA10_O=1;
        PTA11_O=1;
        PTA28_O=1;
        PTA29_O=1;
        while(1)
        {
        if(sec==1)
        {
        LPLD_GPIO_Toggle_b(PTA,10);
        sec1++;
        sec=0;
        }
        if(sec1==6)
        {
        LPLD_GPIO_Toggle_b(PTA,11);
        sec1=0;
        sec2++;
        }
        if(sec2==6)
        {
        LPLD_GPIO_Toggle_b(PTA,28);
        sec2=0;
        sec3++;
        }
        if(sec3==6)
        {
        LPLD_GPIO_Toggle_b(PTA,29);
        sec3=0;
        }
        }
        }

        還是提醒一下,不要忘了初始化,聲明函數(shù)和結(jié)構(gòu)體變量

        還有有木有發(fā)現(xiàn)(學(xué)51的不用看),和PIC不同,它沒有涉及中斷標(biāo)志位,沒有軟件清零。因為對應(yīng)寄存器PIT_CVALn(自減)減到0時,另一個寄存器PIT_LDVALn會把我們之前存進去的初始值重新賦給PIT_CVALn。中斷標(biāo)志位自動清。注意它是減,不是加,所以一開始不用去算該給多少初值,直接給我們想要定時的時間就可以了。


        關(guān)鍵詞: K60PIT定時

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 枣阳市| 大足县| 化德县| 太保市| 普洱| 当雄县| 油尖旺区| 苍溪县| 无为县| 汉寿县| 台湾省| 林西县| 普格县| 马关县| 和林格尔县| 定襄县| 烟台市| 望城县| 增城市| 高邮市| 泉州市| 乌拉特后旗| 锡林郭勒盟| 寿阳县| 霍城县| 彭山县| 潢川县| 唐海县| 英德市| 修水县| 宽城| 四川省| 铅山县| 周至县| 长宁区| 海丰县| 莎车县| 宣城市| 乐陵市| 凭祥市| 清河县|