亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? msp430-fw-interrupts.c

?? 老外用DDSAD9854和MSP430做的一個(gè)收音機(jī)的源程序.
?? C
?? 第 1 頁 / 共 2 頁
字號:
      inBit = P2IN & BIT1;
      if(inBit!=0 && wheel_counter<32000)
         { wheel_counter += 1; }
      else if(inBit==0 && wheel_counter>-32000)
         { wheel_counter -= 1; }
         
      // reset interrupt flag
      P2IFG &= ~BIT0;
   }

   if ((P2IFG&KBD_CLK)!=0) {

      // -- AT keyboard
      
      // keyboard serial stream:
      //  falling clock edge data in
      //  start bit 0, 8 bit LSB ... MSB, odd parity, stop bit 1
      // 
      //  from scope traces and 
      //  http://www.beyondlogic.org/keyboard/keybrd.htm
      //
      //    (A)      B      C      D      E
      // ----+       +------+      +------+
      // CLK | <int  |      |      |      |         5..25 kHz
      //     +-------+      +------+      +-----...
      //
      // -+ DATA    +----------+
      //  |  0      |       1  |           0
      //  +---------+          +---------------...
      
      // timeout loop: xtal 4MHz/16000=250 Hz (plenty for 5..25kHz AT kbd clock)

      #ifdef NEW_KBD_FUNCS
      if(risingedge==1) {
         // trigged on rising edge (data done), switch back to falling edge trig
         P2IES |= KBD_CLK;
         risingedge=0;
      } else {
         // trigged on falling edge (data in), change to rising edge trig
         P2IES &= ~KBD_CLK;
         risingedge=1;         
            
         // read the bit
         inBit = P2IN & KBD_DAT;
      
   intPort2_kbdRetry:
         // start of new sequence?
         if(kbdBitcount==0) {
         
            // start bit 0
            if(inBit==0) { 
               ++kbdBitcount; 
               kbdData=0; 
            } else { 
               // out of sync, wait for next bit 
               P6OUT |= LED_1;
            }
            
            // continue current sequence: databits, parity, stopbit
            } else {

            // if previous bit over 3 ticks ago, reset sequence
            if((sys_ticks-old_sys_ticks)>20) { 
               kbdBitcount=0;
               kbdData=0;
         //   P6OUT ^= LED_1; // toggle diagnostic LED            
               goto intPort2_kbdRetry; // reinterpret as start bit
            }
            
            // data bits
            if(kbdBitcount<=(1+8)) {
               // LSB comes first, so shift bits in from left side
               kbdData /= 2;
            if(inBit!=0) 
               { kbdData |= 0x80; }
            ++kbdBitcount;
            // parity - ignored
            } else if (kbdBitcount==(1+8+1)) {
               ++kbdBitcount;
            // stop bit 1
            } else {
               if(inBit==0) {
                  // out of sync
                   P6OUT ^= LED_1; // toggle diagnostic LED
                  FWConfig.KBD_failure = 1; 
               } else {
                  if(!(kbdUnreadCount>=(KBD_BUFSIZE-1)))
                     { kbdUnreadCount++; }
                  kbdBufPos=(kbdBufPos+1)%KBD_BUFSIZE;
                  kbdBuf[kbdBufPos] = kbdData;
                  P6OUT &= ~LED_1;
               }
               kbdBitcount = 0;
            }
         }
      }
      old_sys_ticks = sys_ticks;
      #else
      // check start bit 0, cont B (wait for rising edge)
      if((P2IN&KBD_DAT)!=0) fail=1;
      timeout=0; 
      while((P2IN&KBD_CLK)==0 && (timeout++)<KBD_DLY && fail==0) { _NOP(); }
      if(timeout>KBD_DLY-1) fail=1;
   
      // cont C, wait for falling edges, read in 8 bits
      for(i=0;i<8 && fail==0;++i) { // &&fail==0

         // falling edge
         timeout=0; 
         while((P2IN&KBD_CLK)!=0 && (timeout++)<KBD_DLY) { _NOP(); }
         if(timeout>KBD_DLY-1) fail=1;
         
         // data, LSB first MSB last
         kbdChar /= 2;
         if((P2IN&KBD_DAT)!=0) kbdChar+=0x80;
      
         // rising edge
         timeout=0; while((P2IN&KBD_CLK)==0 && (timeout++)<KBD_DLY && fail==0) _NOP(); if(timeout>KBD_DLY-1) fail=1;
      }
   
      // skip parity bit, falling + rising edge
      timeout=0; while((P2IN&KBD_CLK)!=0 && (timeout++)<KBD_DLY && fail==0) _NOP(); if(timeout>KBD_DLY-1) fail=1;
      timeout=0; while((P2IN&KBD_CLK)==0 && (timeout++)<KBD_DLY && fail==0) _NOP(); if(timeout>KBD_DLY-1) fail=1;
   
      // check stop bit 1, falling + rising edge
      timeout=0; while((P2IN&KBD_CLK)!=0 && (timeout++)<KBD_DLY && fail==0) _NOP(); if(timeout>KBD_DLY-1) fail=1;
      if((P2IN&KBD_DAT)==0) fail=1;
      timeout=0; while((P2IN&KBD_CLK)==0 && (timeout++)<KBD_DLY && fail==0) _NOP(); // last rising edge
      
      if(fail==0) {
         if(!(kbdUnreadCount>=(KBD_BUFSIZE-1)))
         { kbdUnreadCount++; }

         kbdBufPos=(kbdBufPos+1)%KBD_BUFSIZE;
         kbdBuf[kbdBufPos] = kbdChar;
      } else {
         // P6OUT |= LED_1; // kbd error led on
         FWConfig.KBD_failure = 1; 
      }
      #endif
      
      // reset interrupt flag
      P2IFG &= ~KBD_CLK;
   }

}


//===================================================================
//
//       KEYBOARD HELPER FUNCTIONS
//

//-------------------------------------------------------------------
// kdbSuspend ( )
// Tell the AT keyboard to momentarily pause sending of any data.
//
void kbdSuspend(void) 
{
  /*
   _DINT();
   P2IES &= ~KBD_CLK;   // int off
   P2DIR |= KBD_CLK;    // clock line as output
   P2OUT &= ~KBD_CLK;   // set line low = keyboard doesn't transmit
   P2IFG &= ~KBD_CLK;   // clear int flag
   _EINT();
  */
   return;
} 

//-------------------------------------------------------------------
// kbdResume ( )
// Allow the AT keyboard to send data. If the keyboard was previously
// suspended and new button press data accumulated in the keyboards
// own memory buffer, it will start sending that data soon.
//
void kbdResume(void) 
{
  /*
   _DINT();
   P2DIR &= ~KBD_CLK;   // clock line as input
   P2IES |= KBD_CLK;    // int on
   P2IFG &= ~KBD_CLK;   // clear int flag
   _EINT();
  */
   return;
}

//-------------------------------------------------------------------
// unsigned char kbdGetChar ( )
// Returns the next character from our keyboard buffer, or 0 if
// the buffer was empty.
//
unsigned char kbdGetChar(void) 
{
   unsigned char tmp;

   if(kbdUnreadCount<=0) return '\0';

   _DINT();

   if(kbdBufPos>KBD_BUFSIZE)
   { kbdBufPos = 0; kbdUnreadCount=1; }

   kbdUnreadCount--;
   tmp = (kbdBufPos-kbdUnreadCount)%KBD_BUFSIZE;
   tmp = kbdBuf[tmp]; 

   _EINT();

   return tmp;
}



//===================================================================
//
//       PC SERIAL COMM HELPER FUNCTIONS
//

//-------------------------------------------------------------------
// PC_writeChar ( unsigned char )
// Queue a new data byte to transmit to the PC.
//
void PC_writeChar(unsigned char out) 
{

   // currently not sending?
   if(pcTxDone==1) {
      // just place the new char into the hardware buffer
      TXBUF1 = out; pcTxUnsentCount=0;
      pcTxDone = 0;
      return;
   }

   // already sending, add to software buffer for sending later
   while(pcTxUnsentCount>=PC_TXBUF) // buffer overflow
      { _NOP(); } // wait for tx interrupt driver to 'free' 1 byte

   _DINT();
   ++pcTxBufPos;              // append byte to the buffer
   pcTxBufPos%=PC_TXBUF;    
   pcTxUnsentCount++;
   pcTxBuf[pcTxBufPos] = out;
   _EINT();

   return;
}

//-------------------------------------------------------------------
// PC_writeString ( char * )
// Write a null-terminated string to the serial port 
//
void PC_writeString(char *str) 
{
   int i;
   for(i=0;i<100 && *(str+i)!='\0';i++)
      { PC_writeChar(*(str+i)); }
   return;
}

//-------------------------------------------------------------------
// PC_writeLine ( char * )
// Write a null-terminated string to the serial port.
// Precedes the string with a # and adds a newline.
//
void PC_writeLine(char *str)
{
   PC_writeString("# ");
   PC_writeString(str);
   PC_writeString((char*)STR_CRLF);
}

//-------------------------------------------------------------------
// unsigned char PC_readChar ( )
// Returns the next character from our serial input buffer, or 0 if
// the buffer was empty.
//
unsigned char PC_readChar(void) 
{
   unsigned char tmp;

   if(pcRxUnreadCount<1) { return 0; }

   _DINT();
   if(pcRxBufPos>PC_RXBUF) { 
      pcRxBufPos = 0; 
      pcRxUnreadCount = 1; 
   }

   do {
      tmp = pcRxBuf[pcRxBufPos];
      --pcRxBufPos; 
      pcRxBufPos%=PC_RXBUF;
      pcRxUnreadCount--;
   } while((tmp==0) && (pcRxUnreadCount>0));
   _EINT();

   return tmp;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区小说| 欧美mv日韩mv国产网站app| 国产区在线观看成人精品| 国内久久精品视频| 欧美极品另类videosde| 99国产精品久久久久久久久久| 中文字幕巨乱亚洲| 一本色道久久综合狠狠躁的推荐 | 中文字幕在线不卡| 97精品超碰一区二区三区| 亚洲精品欧美激情| 欧美喷水一区二区| 韩日欧美一区二区三区| 久久免费看少妇高潮| www.一区二区| 亚洲成人777| 久久婷婷一区二区三区| 粉嫩aⅴ一区二区三区四区| 亚洲欧美在线高清| 在线不卡a资源高清| 日本亚洲欧美天堂免费| 久久久久久电影| 一本大道久久a久久综合| 日韩av在线发布| 欧美韩国日本一区| 欧洲亚洲国产日韩| 国产一区福利在线| 亚洲欧美电影一区二区| 欧美一级二级三级蜜桃| 风间由美性色一区二区三区| 亚洲成精国产精品女| 久久精品综合网| 欧美日韩另类国产亚洲欧美一级| 久久精品国产亚洲一区二区三区| 中文一区一区三区高中清不卡| 欧美视频一区在线| 国产传媒久久文化传媒| 日韩精品午夜视频| 国产精品久久久久久久久免费桃花| 欧美日韩国产美| 99精品欧美一区二区三区综合在线| 亚洲成人免费视| 中文字幕一区二区三区在线播放| 欧美精品日韩一区| 99久久婷婷国产| 久久精品99国产精品日本| 亚洲免费色视频| 久久久国产午夜精品 | 日韩精品一卡二卡三卡四卡无卡| 国产精品看片你懂得| 337p亚洲精品色噜噜| 一本色道a无线码一区v| 国产福利一区二区三区在线视频| 日韩福利视频网| 一区二区在线观看av| 欧美激情一区二区三区| 久久一区二区三区四区| 5月丁香婷婷综合| 色成年激情久久综合| 成人ar影院免费观看视频| 激情综合网av| 美日韩黄色大片| 日本视频一区二区| 亚洲超丰满肉感bbw| 亚洲精品日韩专区silk| 亚洲免费av网站| 亚洲手机成人高清视频| 亚洲国产经典视频| 国产亚洲自拍一区| 国产亚洲欧美日韩在线一区| 精品日韩一区二区三区免费视频| 6080国产精品一区二区| 欧美日韩午夜在线| 欧美日本在线播放| 欧美高清激情brazzers| 欧美精品一级二级三级| 欧美性欧美巨大黑白大战| 色综合天天视频在线观看 | 欧美综合欧美视频| 在线观看日韩av先锋影音电影院| 91视频一区二区三区| 97se亚洲国产综合自在线| 91麻豆国产在线观看| 一本久久a久久精品亚洲| 91论坛在线播放| 欧美性生活久久| 日韩欧美中文字幕公布| 精品国产凹凸成av人网站| 久久亚洲一区二区三区明星换脸| 国产欧美一区二区在线观看| 亚洲国产精品成人综合色在线婷婷| 国产欧美日韩视频一区二区| 国产精品福利影院| 亚洲第一在线综合网站| 美女尤物国产一区| 国产成人精品一区二区三区四区| 成人午夜视频网站| 日本道免费精品一区二区三区| 欧美日韩亚洲高清一区二区| 欧美一区二区三区免费大片| 久久在线免费观看| 1024成人网色www| 亚洲一区二区在线免费看| 日本特黄久久久高潮| 国产另类ts人妖一区二区| 成人a区在线观看| 欧美色成人综合| 亚洲精品一区二区三区蜜桃下载| 国产精品无人区| 调教+趴+乳夹+国产+精品| 国产精品自产自拍| 欧美性欧美巨大黑白大战| 久久综合色天天久久综合图片| 国产精品国产三级国产aⅴ无密码| 亚洲一区日韩精品中文字幕| 久久成人久久爱| 色综合欧美在线视频区| 日韩欧美激情在线| 亚洲视频精选在线| 六月丁香综合在线视频| 成人av集中营| 日韩美一区二区三区| 亚洲女性喷水在线观看一区| 久久精品国产亚洲一区二区三区| 99久久精品免费看| 欧美成人a在线| 亚洲精品视频自拍| 国产精品一区二区三区网站| 91国产丝袜在线播放| 久久久久综合网| 日韩精品视频网站| 日本韩国精品一区二区在线观看| 2023国产精品自拍| 午夜精品一区二区三区免费视频| 国产99久久久久| 精品剧情在线观看| 午夜欧美大尺度福利影院在线看 | 日韩毛片一二三区| 精品亚洲国产成人av制服丝袜| 色妞www精品视频| 国产精品午夜电影| 久久国产精品色| 欧美精选在线播放| 一区二区三区免费网站| 国产成a人亚洲| 欧美大片在线观看一区二区| 亚洲一区二区美女| 91美女片黄在线观看91美女| 欧美激情一区二区三区四区| 激情综合色播五月| 日韩一区二区免费在线观看| 亚洲一区二区三区美女| 成人免费毛片a| 国产网红主播福利一区二区| 免费在线观看日韩欧美| 宅男噜噜噜66一区二区66| 亚洲制服丝袜av| 在线日韩国产精品| 综合亚洲深深色噜噜狠狠网站| 风间由美中文字幕在线看视频国产欧美| 91麻豆精品91久久久久同性| 亚洲国产欧美一区二区三区丁香婷| 91视频在线看| 亚洲女人****多毛耸耸8| 99国产精品久久久| 亚洲黄色免费电影| 欧美综合色免费| 亚洲一区二区偷拍精品| 欧美亚洲动漫制服丝袜| 午夜伦理一区二区| 欧美一区二区三区电影| 久久国产综合精品| 久久久久久一级片| 高清不卡在线观看| 国产精品国产三级国产aⅴ中文| aaa欧美色吧激情视频| 国产精品美女视频| 色婷婷激情一区二区三区| 亚洲欧美电影院| 欧美三级韩国三级日本一级| 亚洲成a人片在线观看中文| 欧美日韩日日骚| 免费观看日韩av| 久久九九久久九九| 91蜜桃在线观看| 亚洲va国产va欧美va观看| 欧美一级二级三级乱码| 国产麻豆精品一区二区| 国产精品区一区二区三区| 91成人免费电影| 人人狠狠综合久久亚洲| 久久久国际精品| 色综合久久天天综合网| 婷婷久久综合九色综合伊人色| 欧美大片在线观看一区二区| 成人黄色在线网站| 亚洲在线中文字幕| 亚洲精品一区二区三区99| 本田岬高潮一区二区三区| 亚洲卡通动漫在线|