在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

  • <object id="1jp1h"></object>
    <address id="1jp1h"><nav id="1jp1h"></nav></address>
  • <label id="1jp1h"></label>
    
    

    <bdo id="1jp1h"></bdo>

    新聞中心

    ARM9舵機程序

    作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
    /*****************************************************************************************************************************

    S3C2440A 具有5 個16 位定時器,每個定時器可以按照中斷模式或DMA 模式工作。定時器0,1,2,3 具有PWM 功能。定時器4 是一個內(nèi)部定時器,不具有對外輸出口線。定時器0 還具有死區(qū)發(fā)生器,通常用于大電流設(shè)備。
    定時器特性總結(jié)如下。
    ● 5 個16 位定時器可以工作在中斷模式或DMA 模式。
    ● 包括2 個8 位預(yù)分頻器、2 個4 位分割器。
    ● 輸出波形的占空比可用編程控制(即進行脈寬調(diào)制)。
    ● 具有自動重載模式或單次觸發(fā)模式。
    ● 具有死區(qū)發(fā)生器。

    與定時器相關(guān)的寄存器有:TCFG0、TCFG1、TCON、TCMPBn、TCNTBn、TCNTOn
    定時器的頻率由PCLK分頻而來,即Ftimer = PCLK / (prescaler+1) / MUX
    prescaler位于TCFG0,MUX位于TCFG1
    TCON控制定時器的運行:是否自動裝載定時器初值,是否手動裝載,開始/停止 定時器。
    TCNTBn放定時器n的初值,裝載用
    TCMPBn放定時器n的匹配值,用于調(diào)至PWM
    TCNTOn,只讀,用于觀察定時器n的初值

    本文引用地址:http://www.biyoush.com/article/201612/324214.htm

    編程方法如下:
    定時器初始化()
    {
    設(shè)置預(yù)分頻器prescaler (TCFG0)
    設(shè)置MUX (TCFG1)
    賦初值TCNTB TCNTB = (PCLK / (prescaler+1) / MUX) * 中斷時間間隔(單位秒)
    TCON: 手動跟新打開
    手動跟新關(guān)閉
    自動裝載(計時器循環(huán)計數(shù))
    啟動定時器
    }

    中斷初始化()
    {
    清除SRCPNF、INTPND中的相應(yīng)中斷標志位(可以調(diào)用ClearPending函數(shù))
    填入中斷例程地址于中斷向量表 pISR_TIMER1
    使能相應(yīng)中斷 rINTMSK
    }

    中斷例程() __irq
    {
    ……中斷程序……
    清除SRCPND、INTPND中的相應(yīng)中斷標志位
    }

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

    //以下驅(qū)動對于PCLK=50MHZ的開發(fā)板可以直接添加到工程中使用,GPG14引腳對應(yīng)一路舵機,需要的話可以在添加7路

    #include "2440addr.h"
    #include "def.h"
    typedef unsigned int uint32;
    #define ClearPending(bit) {rSRCPND |= bit;rINTPND = rINTPND;}//宏定義清零中斷標志位
    #define RGB(r,g,b) (unsigned int)(r << 16) + (g << 8) + b
    extern unsigned int pwm[8];
    extern unsigned int *p;//鎖定指針所指的數(shù)組,防止跑偏
    void __irq timer0_ISR(void);
    void sifuTimer0(unsigned int);
    void Task1(void);
    void Glib_FilledRectangle(int x1,int y1,int x2,int y2,int color);
    void BUZZER_PWM_Test( void );
    void int_time0_init(void)
    {
    //Uart_Printf("Timer0中斷實驗");
    //p=pwm; //指針初始化
    ClearPending(1<<10); //清楚中斷標志
    pISR_TIMER0=(unsigned)timer0_ISR; //填入中斷例程地址于中斷向量表
    rINTMSK&=~(1<<10); //TIME0開中斷
    }

    void __irq timer0_ISR(void) //定時器中斷函數(shù)
    {
    static char n,biaozhi;
    static unsigned int hhe,good;
    good++;
    n++;
    switch(n)
    {
    case 1: sifuTimer0(*p-400); rGPGDAT|=1<<14; break;
    case 2: sifuTimer0(2900-*p); rGPGDAT&=~(1<<14);n=0; break;
    case 3: sifuTimer0(*(p+1)); break;
    case 4: sifuTimer0(2500-*(p+1)); break;
    case 5: sifuTimer0(*(p+2)); break;
    case 6: sifuTimer0(2500-*(p+2)); break;
    case 7: sifuTimer0(*(p+3)); break;
    case 8: sifuTimer0(2500-*(p+3)); break;
    case 9: sifuTimer0(*(p+4)); break;
    case 10: sifuTimer0(2500-*(p+4)); break;
    case 11: sifuTimer0(*(p+5)); break;
    case 12: sifuTimer0(2500-*(p+5)); break;
    case 13: sifuTimer0(*(p+6)); break;
    case 14: sifuTimer0(2500-*(p+6)); break;
    case 15: sifuTimer0(*(p+7)); break;
    case 16: sifuTimer0(2500-*(p+7)); n=0; break;
    }
    if(good==100)
    {
    // Task1();
    good=0;
    }
    /*biaozhi?(*p)++:(*p)--;
    if(*p>=2050)
    biaozhi=0;
    else if(*p<=50)
    biaozhi=1;*/
    ClearPending(1<<10); //清楚中斷標志
    }


    void time0_init(void)
    {
    rTCFG0 = (rTCFG0 &(~0xFF)) | 24;
    rTCFG1 = (rTCFG1 &(~0xF)) | 0;
    rTCNTB0 = 1500;
    rTCON |= 1<<1; //開啟手動更新,將TCNTB0的值載入定時器0
    rTCON &= ~(1<<1); //關(guān)閉手動更新(必須)
    rTCON |=0x1<<0; //開啟定時器,關(guān)閉自動裝載模式
    rGPGCON|=1<<28; //舵機輸出引腳初始化
    rGPGUP=0x00; //舵機輸出引腳初始化

    //關(guān)于中斷時間的設(shè)定: TCNTB =(PCLK / (prescaler+1) / MUX) * 中斷時間間隔(單位秒)
    }
    //裝載的頻率是1MHz
    void sifuTimer0(U32 us)
    {
    rTCON |= 1<<1; //開啟手動更新,將TCNTB0的值載入定時器0
    rTCNTB0=us;
    rTCON &= ~(1<<1); //關(guān)閉更新
    }

    //***********************************************************************************************************
    void Task1(void)
    {
    static unsigned int task1Cnt=0;
    //實現(xiàn)流水燈
    if((task1Cnt%5 == 0))
    rGPBDAT = 0x1E0; //全滅
    else
    rGPBDAT = rGPBDAT - (0x10<<(task1Cnt%5));
    task1Cnt++;
    }



    關(guān)鍵詞: ARM9舵機程

    評論


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

    關(guān)閉