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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 飛思卡爾那些事之定時(shí)中斷(PIT)

          飛思卡爾那些事之定時(shí)中斷(PIT)

          作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
          前言:
          上次說(shuō)到因?yàn)樵从趯?duì)英文的恐懼,沒(méi)有閱讀英文DATASHEET,想當(dāng)然的認(rèn)為XS128單片機(jī)中的定時(shí)器模塊也和DG128中定時(shí)器模塊一樣。結(jié)果造成了致命性的錯(cuò)誤,最后在瘋狂的熬夜中才將問(wèn)題檢測(cè)到。
          當(dāng)然,找到問(wèn)題,解決起來(lái)就簡(jiǎn)單多了。后頭拿起DATASHEET狂肯,終于有所收獲,同時(shí)也知道了在XS128單片機(jī)中用于定時(shí)的另一個(gè)模塊:PIT(定時(shí)中斷)。為了測(cè)試一下定時(shí)中斷的,同時(shí)也解決之前單片機(jī)一直沒(méi)辦法進(jìn)入中斷的問(wèn)題,特寫(xiě)了一個(gè)簡(jiǎn)單的基于定時(shí)器中斷的閃爍燈程序。
          目的:
          1、學(xué)習(xí)使用XS128PIT模塊。
          2、測(cè)試XS128核心板的中斷木塊。
          功能描述:
          通過(guò)定時(shí)中斷實(shí)現(xiàn)500MS定時(shí)。當(dāng)定時(shí)中斷觸發(fā)時(shí),對(duì)IO口進(jìn)行取反操作即可以實(shí)現(xiàn)LED500MS的閃爍。
          資源:
          1、XS128核心板,8個(gè)LED接X(jué)S128的B口。
          2、XS128的PIT模塊。
          PIT說(shuō)明:
          S12PIT24B4CV1是一個(gè)模數(shù)遞減計(jì)數(shù)器。首先給計(jì)數(shù)寄存器設(shè)定一個(gè)初值,每經(jīng)過(guò)一個(gè)總線(xiàn)周期,計(jì)數(shù)器進(jìn)行一次減一操作,當(dāng)計(jì)數(shù)器自減溢出時(shí),觸發(fā)中斷。因?yàn)榭偩€(xiàn)周期是已知的,即可以通過(guò)計(jì)數(shù)器自減實(shí)現(xiàn)定時(shí)。
          在XS128PIT模塊中,需要用到得是如下幾個(gè)寄存器。
          1)、PIT Contorl and force Lad Micro Timer Register(PITCFLMT)
          該寄存器用于PIT模塊的使能設(shè)置和工作方式設(shè)置。通常設(shè)置該寄存器中的PITE為即可,即PITCFLMT_PITE=1,使PIT使能。
          2)、PIT Channel Enable Register(PITCE)
          該寄存器用于對(duì)PIT模塊中的4個(gè)通道使能進(jìn)行設(shè)置。如果使用某個(gè)通道時(shí),對(duì)對(duì)應(yīng)位進(jìn)行置一即可,即PITCE_PCEx=1,其中x代表通道序號(hào),為0~3。
          3)、PIT Micro Timer Load Register 0 to 1 (PITMTLD0-1)
          該寄存器用于設(shè)置PIT模塊中的8位計(jì)數(shù)器初值,以實(shí)現(xiàn)24位的計(jì)數(shù)。設(shè)定值為0到255范圍。
          4)、PIT Load Register 0 to 3(PITLD0-3)
          該寄存器用于設(shè)置PIT模塊中的16位計(jì)數(shù)器初值,和8位計(jì)數(shù)器配合而成24位計(jì)數(shù)器。設(shè)定值范圍0-65535。
          5)、PIT Multiplex Register(PITMUX)
          該寄存器對(duì)定時(shí)器通道的8位時(shí)基進(jìn)行選擇。因?yàn)?位計(jì)數(shù)器只有兩個(gè),所以在將8位計(jì)數(shù)器和16位計(jì)數(shù)器連接時(shí),可以選擇不同的8位時(shí)基。
          當(dāng)設(shè)置為0時(shí),對(duì)應(yīng)通道選擇時(shí)基0;置一時(shí),對(duì)應(yīng)通道選擇時(shí)基1。
          如PITMUX_PMUX0=1為通道0選擇時(shí)基1。
          6)、PIT Interrupt Enable Register(PITINTE)
          該寄存器為中斷使能寄存器,為不同的PIT通道中斷使能。設(shè)定為0時(shí),相應(yīng)通道中斷禁止。置一時(shí),相應(yīng)通道使能。
          如PITINTE_PINTE0=1時(shí),PIT通道0定時(shí)中斷使能,當(dāng)計(jì)數(shù)器遞減溢出時(shí),申請(qǐng)中斷。
          7)、PIT Time-Out Flag Register(PITTF)
          該寄存器為溢出標(biāo)志位,當(dāng)某一通道的8位計(jì)數(shù)器和16位計(jì)數(shù)器遞減到0時(shí),該位置一。給改位寫(xiě)1則清除該標(biāo)志位。
          可以通過(guò)查詢(xún)?cè)撐粊?lái)判斷定時(shí)是否完成。

          CODE:
          #include
          #include
          #pragma LINK_INFO DERIVATIVE "mc9s12xs128"
          //==================================================
          //定時(shí)中斷函數(shù)
          //定時(shí)中斷0實(shí)現(xiàn)500MS定時(shí)
          //author:yangtze
          //time:2009/5/2
          //==================================================
          #define PITTIME5000//設(shè)定為50MS定時(shí)
          unsigned int vTmpPIT=0;

          void pllclk(void)//24MHz,外部時(shí)鐘為16MHz
          {
          CLKSEL=0X00;
          PLLCTL=0xe1;
          SYNR=2;//PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1)
          REFDV=1;
          PLLCTL=0X60;
          asmNOP;
          asmNOP;
          asmNOP;
          while((CRGFLG&0X08)==0);//時(shí)鐘校正同步
          CLKSEL=0X80;
          }
          void initIOBoutput(void)//IO口初始化,B口為輸出
          {
          DDRB=0XFF;
          PORTB=0XFF;
          }
          void initPIT(void)//定時(shí)中斷初始化函數(shù) 50MS定時(shí)中斷設(shè)置
          {
          PITCFLMT_PITE=0; //定時(shí)中斷通道0關(guān)
          PITCE_PCE0=1;//定時(shí)器通道0使能
          PITMTLD0=240-1;//8位定時(shí)器初值設(shè)定。240分頻,在24MHzBusClock下,為0.1MHz。即
          10us.
          PITLD0=PITTIME-1;//16位定時(shí)器初值設(shè)定。PITTIME*0.01MS
          PITINTE_PINTE0=1;//定時(shí)器中斷通道0中斷使能
          PITCFLMT_PITE=1;//定時(shí)器通道0使能
          }

          void main(void)
          {
          pllclk();
          initIOBoutput();
          initPIT();
          EnableInterrupts;
          for(;;) {}

          }

          #pragma CODE_SEG __NEAR_SEG NON_BANKED
          void interrupt 66 PIT0(void)
          {
          vTmpPIT++;
          if(vTmpPIT==10)
          {
          PORTB=~PORTB;//輸出取反
          vTmpPIT=0;
          }
          PITTF_PTF0=1;//清中斷標(biāo)志位
          }


          評(píng)論


          技術(shù)專(zhuān)區(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); })();