久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

ARM9舵機(jī)程序

作者:藍(lán)夢(mèng)荒   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2013年12月09日   【字體:

/*****************************************************************************************************************************
S3C2440A 具有5 個(gè)16 位定時(shí)器,每個(gè)定時(shí)器可以按照中斷模式或DMA 模式工作。定時(shí)器0,1,2,3 具有PWM 功能。定時(shí)器4 是一個(gè)內(nèi)部定時(shí)器,不具有對(duì)外輸出口線。定時(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的初值

編程方法如下:
定時(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)對(duì)于PCLK=50MHZ的開發(fā)板可以直接添加到工程中使用,GPG14引腳對(duì)應(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)\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)閉窗口

相關(guān)文章

主站蜘蛛池模板: 国产一区精品 | 中文字幕综合 | 国产伦精品一区二区三区精品视频 | 日韩精品不卡 | 久久精品一区二区三区四区 | 国产精品成人一区二区三区夜夜夜 | 在线视频国产一区 | 2020亚洲天堂 | 一区二区精品视频 | 国产亚洲精品美女久久久久久久久久 | 免费看a| 亚洲国产精品久久 | 奇米四色在线观看 | h肉视频| 日本午夜免费福利视频 | 激情五月婷婷综合 | 亚洲综合在线视频 | 国产婷婷色综合av蜜臀av | 国产一级黄色网 | 91亚洲精品国偷拍自产在线观看 | 国产99小视频 | 国产激情一区二区三区 | 手机三级电影 | 国产网站在线播放 | 成人污污视频 | 九九久久国产 | 黄色播放 | 成人国产免费视频 | 欧美日本高清 | 久久综合一区二区 | 在线视频国产一区 | 91精品国产日韩91久久久久久 | 高清国产一区二区 | 亚洲高清免费视频 | xxx视频 | 人人种亚洲 | 午夜大片| 亚洲精品成人 | 激情五月综合 | 瑞克和莫蒂第五季在线观看 | 特级毛片爽www免费版 |