<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          ARM9舵機(jī)程序

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

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

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

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

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

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

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

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

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

          #include "2440addr.h"
          #include "def.h"
          typedef unsigned int uint32;
          #define ClearPending(bit) {rSRCPND |= bit;rINTPND = rINTPND;}//宏定義清零中斷標(biāo)志位
          #define RGB(r,g,b) (unsigned int)(r << 16) + (g << 8) + b
          extern unsigned int pwm[8];
          extern unsigned int *p;//鎖定指針?biāo)傅臄?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中斷實(shí)驗(yàn)");
          //p=pwm; //指針初始化
          ClearPending(1<<10); //清楚中斷標(biāo)志
          pISR_TIMER0=(unsigned)timer0_ISR; //填入中斷例程地址于中斷向量表
          rINTMSK&=~(1<<10); //TIME0開中斷
          }

          void __irq timer0_ISR(void) //定時(shí)器中斷函數(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); //清楚中斷標(biāo)志
          }


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

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

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



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

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();