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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? msp430-fw-interrupts.c

?? 老外用DDSAD9854和MSP430做的一個收音機的源程序.
?? C
?? 第 1 頁 / 共 2 頁
字號:
//===================================================================
//
//  MSP430F149 based direct digital conversion
//  software defined radio receiver
//
//  (C) 2005 Jan Florian Wagner OH2GHR, jwagner@cc.hut.fi
//  http://users.tkk.fi/~jwagner/electr/dc-rx/
//
//  Firmware Version 1.03
//
//  Licence: free as per GNU GPL
//
//  This program is free software; you can redistribute it and/or
//  modify it under the terms of the GNU General Public License
//  as published by the Free Software Foundation; either version 2
//  of the License, or (at your option) any later version.
//  
//  This program is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//  
//  For further details see the included GPL.TXT 
//  or go to http://www.gnu.org/copyleft/gpl.html  
//
//===================================================================
//
//  Interrupt handlers, with PC serial port receive and transmit.
//  Also initializes the serial port to 9600 baud.
//  Provides helper functions for AT keyboard access.
//
// - keyboard (i/o pins 2.5 clock & 2.6 data)
// - serial comm (uart1)
// - tuning wheel (i/o pins 2.0 & 2.1)
//
//===================================================================

//#define NEW_KBD_FUNCS 1
//#define WDT_SYSTICK_DEBUG 1  // define to blink the LED at system ticks

#include "MSP430-fw-stdincludes.h"

volatile unsigned char kbdBuf[KBD_BUFSIZE+1];   // keyboard scancode buf
volatile unsigned char kbdBufPos;
volatile char kbdUnreadCount;

volatile unsigned char pcRxBuf[PC_RXBUF+1];     // PC rx
volatile unsigned char pcRxBufPos;
volatile char pcRxUnreadCount;

volatile unsigned char pcTxBuf[PC_TXBUF+1];     // PC tx
volatile unsigned char pcTxBufPos;
volatile char pcTxUnsentCount;
volatile char pcTxDone;

volatile signed int wheel_counter;              // wheel rx

#define KBD_DLY 2000

#ifdef __IAR_SYSTEMS_ICC__
  // empty interrupt table, IAR EWB v3 style of declaration
  #pragma vector=UART0TX_VECTOR
     __interrupt void intUart0Tx(void) {};
  #pragma vector=UART0RX_VECTOR
     __interrupt void intUart0Rx(void) {};   
  #pragma vector=PORT1_VECTOR
     __interrupt void intPort1(void) {};
  #pragma vector=ADC_VECTOR
     __interrupt void intADC(void) {};
  #pragma vector=TIMERA1_VECTOR
     __interrupt void intTimerA1(void) {};
  #pragma vector=TIMERA0_VECTOR
     __interrupt void intTimerA0(void) {};
  #pragma vector=TIMERB1_VECTOR
     __interrupt void intTimerB1(void) {};
  #pragma vector=TIMERB0_VECTOR
     __interrupt void intTimerB0(void) {};
  #pragma vector=COMPARATORA_VECTOR
     __interrupt void intComparator(void) {};
#else
  // empty interrupt table, MSP-GCC style of declaration
  interrupt (UART0TX_VECTOR) intUart0Tx(void) {};
  interrupt (UART0RX_VECTOR) intUart0Rx(void) {};  
  interrupt (PORT1_VECTOR) intPort1(void) {};
  interrupt (ADC_VECTOR) intADC(void) {};
  interrupt (TIMERA1_VECTOR) intTimerA1(void) {};
  interrupt (TIMERA0_VECTOR) intTimerA0(void) {};
  interrupt (TIMERB1_VECTOR) intTimerB1(void) {};
  interrupt (TIMERB0_VECTOR) intTimerB0(void) {};
  interrupt (COMPARATORA_VECTOR) intComparator(void) {};
#endif
   


//===================================================================
//
//       BASIC INIT
//

//-------------------------------------------------------------------
// initInterrupts ( )
// Set up the serial port, and wheel/keyboard port interrupts.
//
void initInterrupts(void) {

   _DINT();
   
   // -- reconfig watch dog timer as interval mode interrupt
   
   WDTCTL = WDTPW + WDTCNTCL + 
            WDTTMSEL + WDTIS0;   // clear counter, interval mode
                                 // WDTIS0: 470..540Hz (SMCLK/8192)
                                 // - : 122..135Hz (SMCLK/32768)
   sys_ticks = 0;
   
   // -- port 2 pin interrupts
    
   // enable tuning wheel interrupt on pin 2.0 and
   // AT keyboard clock int on 2.5   (users guide page 195 / 9-3)
   P2SEL &= ~(BIT0+BIT1+KBD_CLK+KBD_DAT);    // don't use modules, just i/o
   P2DIR &= ~(BIT0+BIT1+KBD_CLK+KBD_DAT);    // set 2.0 .1 .5 .6 as inputs
   P2IES |= BIT0+KBD_CLK;                    // P2.0 or P2.5 high->low generates interrupt
   P2IFG = 0x00;                             // clear interrupt flags
   P2IE  |= BIT0+KBD_CLK;                    // pin int enable
   wheel_counter = 0; 
   kbdBufPos = 0; 
   kbdUnreadCount = 0;
   
   // -- serial comm port config
    
   P3DIR = 0xFF;                      // all pins as outputs (utxd0, utxd1)
   P3DIR &= ~(BIT1+BIT3+BIT5+BIT7);   // simo0, uclk0, urxd0 and urxd1 as inputs
   P3SEL |= BIT1+BIT3+BIT5+BIT6+BIT7; // port 3 pins multiplexed to simo0, uclk0,
                                      // urxd0, urxd1, utxd1
   // PC serial comm : uart1 "9600,n,8,1"
   // (page 244, 12.5.2)
   U1CTL = SWRST;                     // reset, as in users guide
   U1CTL |= CHAR;
   U1TCTL |= SSEL0+SSEL1+TXEPT;
   U1RCTL = 0;
   U1MCTL = 0x0;
   U1BR0 = (XTAL_FREQ/PCBAUDRT)&0x00FF;
   U1BR1 = ((XTAL_FREQ/PCBAUDRT)&0xFF00)>>8;

   pcRxBufPos = 0; 
   pcTxBufPos = 0;
   pcRxUnreadCount = 0; 
   pcTxUnsentCount = 0;
   pcTxDone = 1;

   // enable uart modules (page 53, table 3-13)
   // (unused:ME1 |= USPIE0;  // uart 0 SPI enable
   ME2 |= URXE1+UTXE1;        // uart 1 rx tx enable

   //U0CTL &= ~(SWRST);   // USART init sequence last stage, as recommended
   U1CTL &= ~(SWRST);     // on page 242

   // -- enable interrupts (page 47, table 3-5)
   //IE1 |= URXIE0;      // uart 0 rx int enable
   IE2 |= URXIE1+UTXIE1;    // enable UART 1 rx&tx interrupt
   IE1 |= NMIIE+OFIE+WDTIE; // enable NMI, oscillator fault, watchdog/interval interrupt

   _EINT();
   
   return;
}



//===================================================================
//
//       INTERRUPT HANDLERS
//


//-------------------------------------------------------------------
// intWDT ( )
// Watchdog interrupt handler, with watchdog in interval counter mode.
// Advances the system tick counter. 1 tick = 8192/crystalfreq seconds.
// If using 4.433Mhz xtal clock: 1 tick = ~1.8ms
// 
#ifdef __IAR_SYSTEMS_ICC__
  #pragma vector=WDT_VECTOR
    __interrupt void intWDT(void)
#else
  interrupt (WDT_VECTOR) intWDT(void)
#endif
{
   ++sys_ticks;
   #ifdef WDT_SYSTICK_DEBUG
   if(sys_ticks%128==0) { P6OUT^=LED_1; } // blink the LED
   #endif
}

//-------------------------------------------------------------------
// intNMI ( )
// NMI handler, usually called when the crystal oscillator fails
//
#ifdef __IAR_SYSTEMS_ICC__
  #pragma vector=NMI_VECTOR
    __interrupt void intNMI(void)
#else
  interrupt (NMI_VECTOR) intNMI(void)
#endif
{
   int i;

   // osc fault?
   if((IFG1&OFIFG)!=0) {
      do {
         IFG1 &= ~OFIFG;           // clear osc fault flag
         for(i=0;i<256;i++) { _NOP(); }
         //if((IFG1)&OFIFG!=0) P6OUT=0xFF; else P6OUT=0;
      } while((IFG1&OFIFG)!=0);   // try restarting the xtal2
      IE1 |= OFIE;
   }
}


//-------------------------------------------------------------------
// intUart1Rx ( )
// Received data on UART1 RX line, from the PC
//
#ifdef __IAR_SYSTEMS_ICC__
  #pragma vector=UART1RX_VECTOR
    __interrupt void intUart1Rx(void)
#else
  interrupt (UART1RX_VECTOR) intUart1Rx(void)
#endif
{
   int tmp = RXBUF1;
   if(!(pcRxUnreadCount>=PC_RXBUF)) { pcRxUnreadCount++; }

   ++pcRxBufPos; 
   pcRxBufPos%=PC_RXBUF;
   pcRxBuf[pcRxBufPos] = tmp;
}


//-------------------------------------------------------------------
// intUart1Tx ( )
// One data byte has been sent, check transmitter buffer to send more
//
#ifdef __IAR_SYSTEMS_ICC__
  #pragma vector=UART1TX_VECTOR
    __interrupt void intUart1Tx(void)
#else
  interrupt (UART1TX_VECTOR) intUart1Tx(void)
#endif
{
   signed char tmpPos;

   if(pcTxUnsentCount==0) {
   
      pcTxDone = 1;
   
   } else {
   
      pcTxDone = 0;

      // pcTxUnsentCount = 1 : pcTxBuf[pcTxBufPos] newest
      // pcTxUnsentCount = 2 : pcTxBuf[pcTxBufPos-1] newest
      // ...

      tmpPos=1+((signed char)pcTxBufPos)-((signed char)pcTxUnsentCount);
      if(tmpPos<0) { tmpPos+=PC_TXBUF; }
      pcTxUnsentCount--;
      TXBUF1=pcTxBuf[tmpPos];
   }
}


//-------------------------------------------------------------------
// intPort2 ( )
// I/O pin interrupt, caused by the tuning wheel or AT keyboard clock
//
#ifdef __IAR_SYSTEMS_ICC__
  #pragma vector=PORT2_VECTOR
    __interrupt void intPort2(void)
#else
  interrupt (PORT2_VECTOR) intPort2(void)
#endif
{
   int inBit;
   
   #ifdef NEW_KBD_FUNCS
   static unsigned char kbdBitcount=0, kbdData=0, risingedge=0;
   static unsigned int  old_sys_ticks = 0;
   #else
   unsigned int  timeout=0;
   unsigned char kbdChar=0, fail=0, i=0;   
   #endif
   
   // which pin caused int?
   if((P2IFG&BIT0)!=0) {
   
      // -- Wheel
   
      // pin 2.0 is already low (generated int)
      // so the 2.1 pin determines which way
      // the wheel was turned:
      //   0=up, 1=down

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久免费桃花| 久久国产精品72免费观看| 亚洲成人一区二区在线观看| 久久成人羞羞网站| 欧美午夜一区二区| 久久精品人人做人人爽97| 亚洲成在线观看| 成人美女视频在线看| 日韩网站在线看片你懂的| 亚洲精品乱码久久久久久黑人| 国产伦精一区二区三区| 69久久99精品久久久久婷婷| 一区二区三区日本| av动漫一区二区| 日本一区二区三区dvd视频在线| 午夜av一区二区| 欧美亚洲国产bt| 一区二区三区免费在线观看| 国产成人亚洲综合a∨婷婷| 日韩视频在线一区二区| 亚洲黄色免费电影| 高清国产一区二区三区| 色综合天天综合色综合av | 日本一不卡视频| 国产a级毛片一区| 欧美美女一区二区在线观看| 中文字幕免费一区| 久久99精品国产麻豆不卡| 99精品黄色片免费大全| 久久久影视传媒| 蜜臀久久99精品久久久久久9| 91在线丨porny丨国产| 在线不卡一区二区| 亚洲欧美电影一区二区| 福利一区在线观看| 精品粉嫩超白一线天av| 午夜精品爽啪视频| 欧美色视频在线| 亚洲激情自拍视频| 99精品热视频| 国产精品对白交换视频| 福利一区福利二区| 欧美成人伊人久久综合网| 亚洲免费色视频| 国产91精品久久久久久久网曝门| 国产日本亚洲高清| 国产一区美女在线| 久久一留热品黄| 国产一区二区毛片| 久久久高清一区二区三区| 日韩国产高清影视| 欧美精品乱码久久久久久按摩 | 精品亚洲欧美一区| 欧美一级二级在线观看| 偷拍一区二区三区四区| 欧美日韩高清不卡| 奇米影视在线99精品| 日韩精品一区二区三区三区免费| 日韩不卡在线观看日韩不卡视频| 56国语精品自产拍在线观看| 日日夜夜一区二区| 欧美久久久久中文字幕| 日本欧美加勒比视频| 精品国产一区二区三区av性色| 久久99热狠狠色一区二区| 精品国产91亚洲一区二区三区婷婷 | 国产一区在线精品| 欧美激情一区二区三区全黄| 99精品1区2区| 一区二区高清免费观看影视大全| 911国产精品| 激情综合五月婷婷| 欧美国产精品久久| 日本二三区不卡| 五月婷婷久久丁香| 久久影院午夜论| 91麻豆精品在线观看| 婷婷国产在线综合| 久久综合成人精品亚洲另类欧美| 风流少妇一区二区| 亚洲国产一区视频| 欧美成人一区二区| 欧美亚洲国产怡红院影院| 蜜臀av国产精品久久久久| 国产精品免费视频网站| 欧美日韩国产综合久久| 精品一区二区三区在线视频| 亚洲图片激情小说| 91精品国产综合久久福利| 成人黄色网址在线观看| 日本aⅴ免费视频一区二区三区| 久久久久久久性| 欧美日韩国产另类不卡| 成人免费视频一区二区| 日韩高清不卡在线| 精品国产乱码久久久久久免费| 91色.com| 国产综合成人久久大片91| 亚洲欧美偷拍三级| 精品国产污网站| 欧美日韩一级黄| 99精品久久只有精品| 久久超碰97中文字幕| 亚洲成人自拍一区| 成人欧美一区二区三区视频网页| 日韩视频在线一区二区| 在线观看一区二区精品视频| 国产成人在线观看| 免费看日韩精品| 亚洲一区在线看| 中文字幕一区二区三区乱码在线| 欧美精品一区二区三区四区| 欧美精品日韩精品| 欧洲一区二区av| 国产在线看一区| 最新国产精品久久精品| 国产精品高潮呻吟久久| 久久精品一区蜜桃臀影院| 欧美另类高清zo欧美| 欧美日韩午夜在线| 91国偷自产一区二区使用方法| 国产成人综合在线| 极品尤物av久久免费看| 日韩 欧美一区二区三区| 亚洲一区二区三区四区的 | 51午夜精品国产| 欧美视频日韩视频| 欧美性猛片aaaaaaa做受| 91日韩在线专区| 色综合欧美在线| 91浏览器打开| 色吧成人激情小说| 色婷婷国产精品久久包臀| 成人美女在线视频| 丁香婷婷综合色啪| 99国产精品国产精品毛片| 不卡的av电影在线观看| 色综合天天综合给合国产| www.av精品| 色999日韩国产欧美一区二区| 91黄色免费看| 欧美夫妻性生活| 日韩精品一区国产麻豆| 精品sm在线观看| 国产精品久久夜| 亚洲曰韩产成在线| 日韩专区中文字幕一区二区| 久久99精品久久久| 国产精品一品二品| 激情六月婷婷久久| 国产综合色产在线精品| 在线这里只有精品| 欧美一区二区在线免费观看| 精品成人一区二区三区| 国产精品不卡在线| 亚洲一二三区视频在线观看| 热久久久久久久| av一区二区久久| 欧美日韩不卡在线| 日本一区二区三区高清不卡| 一区二区三区高清在线| 男男gaygay亚洲| 99精品国产热久久91蜜凸| 欧美日韩另类国产亚洲欧美一级| 日韩欧美激情在线| 久久久亚洲午夜电影| 亚洲成人在线观看视频| 国产麻豆精品久久一二三| 91国产视频在线观看| 精品日本一线二线三线不卡| 国产精品网站一区| 午夜精品久久久久| 懂色av一区二区三区蜜臀| 欧美亚洲综合色| 久久久久九九视频| 偷窥国产亚洲免费视频| bt欧美亚洲午夜电影天堂| 欧美一区二区三区在线看| 国产日产精品一区| 免费三级欧美电影| 9i在线看片成人免费| 欧美一区二区国产| 国产精品美女久久久久aⅴ国产馆| 亚洲成人激情社区| 东方欧美亚洲色图在线| 在线播放欧美女士性生活| 国产人伦精品一区二区| 国内精品久久久久影院薰衣草| 在线亚洲欧美专区二区| 国产亚洲美州欧州综合国| 亚洲成人av免费| 99在线精品免费| 久久久精品2019中文字幕之3| 天堂午夜影视日韩欧美一区二区| 成人美女视频在线看| 久久精品亚洲麻豆av一区二区| 午夜免费久久看| 色一情一伦一子一伦一区| 日本一区二区三区国色天香 | 久久激情综合网|