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

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

?? zhongduan_niosii.c

?? 這個是在NOIS II中使用的
?? C
字號:

//www.21control.com
//#include <stdio.h>
#include "system.h"
#include <alt_types.h>
#include "sys/alt_irq.h"
#include "altera_avalon_uart_regs.h"
#include "altera_avalon_uart.h"

//接收\發送緩沖大小
#define TXBUFSIZE 256
#define RXBUFSIZE 256

//全局變量
unsigned char RxBuf[RXBUFSIZE]; //接收緩沖
int RxHead =0;                  //接收緩沖位置索引 頭
int RxTail =0;                 //接收緩沖位置索引 尾
unsigned char TxBuf[TXBUFSIZE]; //發送緩沖
int TxHead =0;                  //發送緩沖位置索引 頭
int TxTail =0;                  //發送緩沖位置索引 尾

int RevStatus = 0;              //接收幀狀態,0空閑,1收到幀頭,2收到命令碼
unsigned char Code = 0;   //命令碼,0空閑,'s'字符串,'x'十六進制,'d'切換顯示
unsigned char FrameData[255];   //幀數據
int FrameIndex = 0;             //幀位置索引
int ShowHex = 0;                //是否顯示十六進制碼

int _putchar(int in_char);      //發送一個數據
int _puts(unsigned char* str);  //發送一串數據
void serial_ISR(int context);   //串口中斷服務子程序
int _bufdone();                 //處理接收緩沖區數據流

//main 主程序
int main()
{
    int context = 0;
 // _putchar('o');
    //安裝串口中斷服務子程序
   // /  nr_installuserisr(na_uart1_irq, serial_ISR, context);
        alt_irq_register(UART_0_IRQ,context,serial_ISR);
  
    //使能串口接收中斷
    ///na_uart1->np_uartcontrol = np_uartcontrol_irrdy_mask;
       IOWR_ALTERA_AVALON_UART_CONTROL(UART_0_BASE, 0x80|0x10);
  
    //循環等待處理串口數據
    while(1) 
    {
       //處理串口接收數據
       if(!_bufdone())
             break;
    }
  
    //關閉串口中斷
   /// na_uart1->np_uartcontrol = 0;
      IOWR_ALTERA_AVALON_UART_CONTROL(UART_0_BASE,0);
    //卸載串口中斷服務程序
    ///nr_installuserisr(na_uart1_irq, 0, 0);
  //   alt_irq_register(UART_0_IRQ,0,0);


    //退出程序,\004即Ctrl-D,表示已結束
    printf("\n\004");
}

//_bufdone子程序,處理串口接收緩沖區數據
//返回值0表示接收到退出程序命令,1表示數據處理正常
int _bufdone()
{
  
  //循環檢測緩沖區是否為空
  //當RxTail等于RxHead時,表示已處理完接收緩沖區中數據,亦即緩沖區為空
  while (RxTail != RxHead)
  {
    //如果檢測到鍵盤ESC鍵值,函數返回0,提示退出程序
    if (RxBuf[RxTail] == 27)
    {
      _puts("\nExit uart_isr_test.\n");
 //     nr_delay(10);
      return 0;
    }
    
    //接收幀狀態處理
    switch (RevStatus)
    {
     default:
      case 0://接收幀空閑狀態
        
          if (RxBuf[RxTail] == '-')
              RevStatus = 1; //如果照到幀頭字符,進入下一個接收狀態
             break;
      case 1://已接收到幀頭字符
    
          Code = RxBuf[RxTail];
          if (Code != 's' && Code != 'S' &&
              Code != 'x' && Code != 'X' &&
              Code != 'd' && Code != 'D' )
          {
            RevStatus = 0;  //接收到無效命令字符,返回到初始狀態
          _puts("\nInvalid frame.\n");    
          }   
          else
              RevStatus = 2;  //接收命令有效,進入下一個接收狀態
          break;
      case 2://接收到有效命令字符
           //根據不同命令字符,執行相應操作
           switch (Code)
           {
             case 's':  case 'S':  // -s命令幀
             
             *(unsigned int *)LED_BASE =0x01;
             
                 //將接收字符存入FrameData數組
                   FrameData[FrameIndex++] = RxBuf[RxTail];
           
           if (FrameIndex >= 254 || RxBuf[RxTail] == '\n')
                   {
                     //數組已滿或收到回車換行符時,輸出FrameData字符串
                 FrameData[FrameIndex] = '\0';
                     _puts(FrameData);
        
                     RevStatus = 0;     //回到初始狀態,準備接收下一幀
                  FrameIndex = 0;    //FrameData數組索引清零
                }
                 break;
             case 'x':  case 'X':  // -x命令幀
                      *(unsigned int *)LED_BASE =0x02;
                       //存入接收字符的ASCII碼表示,例如字符'0'將存入"30"
                      FrameData[FrameIndex++] = (RxBuf[RxTail]>>4) + '0';
                       FrameData[FrameIndex++] = (RxBuf[RxTail] & 0x0F) + (((RxBuf[RxTail] & 0x0F) > 9) ? ('A' - 10) : '0');
                       //每兩個ASCII字符表示間添加空格
                      FrameData[FrameIndex++] = ' ';
  
                       if (FrameIndex >= 252 || RxBuf[RxTail] == '\n')
                       {
                         //數組已滿或收到回車換行符時,輸出FrameData字符串
                      FrameData[FrameIndex] = '\0';
                           _puts(FrameData);
                           _puts("\n");
  
                           RevStatus = 0;     //回到初始狀態,準備接收下一幀
                  FrameIndex = 0;    //FrameData數組索引清零
                 }
                 break;
             case 'd':  case 'D':  // -d命令幀
                 //存入接收字符到FrameData數組
                FrameData[FrameIndex++] = RxBuf[RxTail];
        
                 if (FrameIndex >= 252 || RxBuf[RxTail] == '\n')
                       {
                         //數組已滿或收到回車換行符時,輸出FrameData字符串
                  FrameData[FrameIndex] = '\0';
                           _puts(FrameData);
   
                           RevStatus = 0;     //回到初始狀態,準備接收下一幀
                  FrameIndex = 0;    //FrameData數組索引清零
        
                     //切換輸入字符ASCII碼顯示功能
                  if (ShowHex > 0)
                     {
                       ShowHex = 0;   //關閉ASCII碼顯示功能
                       _puts("\n-d OFF\n");
                   }
                   else
                   {
                     ShowHex = 1;   //打開ASCII碼顯示功能
                 _puts("ON\n");
                 }
               }
             break;
             default:  //無效的命令字符
                       _puts("\nInvalid command code.\n");
                       RevStatus = 0;     //回到初始狀態
               FrameIndex = 0;    //FrameData數組索引清零
             break;
         }
         break;
        }
        
        //處理下一個接收字符,如果已到達接收緩沖區尾部,返回接收緩沖區頭部
        if  (++RxTail > (RXBUFSIZE - 1))
             RxTail = 0;
    }

    return 1;
}

//_putchar子程序,向串口發送一個字符數據in_char
//返回值1表示發送成功,-1表示發送失敗
int _putchar(int in_char)
{
  //發送緩沖區已用空間大小
  int size;
  
  //獲取狀態寄存器的值
  ///int  sr = na_uart1->np_uartstatus;
     int sr = IORD_ALTERA_AVALON_UART_STATUS(UART_0_BASE);

  //判斷發送緩沖區是否為空并且串口狀態是否已準備好發送
  if ((TxHead == TxTail) && sr&0x40)
  {
    //發送緩沖區為空,直接發送數據in_char
      IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE,in_char);
  }
  else
  {
    //計算發送緩沖區已用空間大小
    if (TxHead >= TxTail) 
        size = TxHead - TxTail;
    else
        size = ((TXBUFSIZE - 1) - TxTail) + TxHead;  //循環隊列
    
    //如果發送緩沖區已滿,發送失敗,直接返回 
    if (size > (TXBUFSIZE - 3))  
      return (-1);
      
    //將待發送數據追加到發送緩沖區中的數據流末尾
    TxBuf[TxHead] = in_char;
    if (++TxHead >(TXBUFSIZE - 1))
      TxHead = 0;
      
      //使能itrdy中斷
      IOWR_ALTERA_AVALON_UART_CONTROL(UART_0_BASE, 0x40|0x10);//開發送中斷,中斷使能
    }
    return 1;
}

//_puts子程序,向串口發送一個字符串str
//返回值count表示已發送的字符個數
int _puts(unsigned char *str)
{
  //發送字符計數
  int count = 0;
  //字符指針,指向str字符串中當前發送字符
  unsigned char *tmp = str;
  //判斷tmp是否已到str字符串結尾
  while (*tmp != 0)
  {
    if (_putchar(*tmp++) >0)  //發送當前字符,并且tmp指針指向下一個字符
        count++;              //成功發送,count計數加1
    else
        break;                //發送失敗,跳出while循環
  }
  
  return count;
}

//serial_ISR子程序,串口中斷服務子程序
void serial_ISR(int data)
{
  //保存狀態寄存器數值
  int sr = IORD_ALTERA_AVALON_UART_STATUS (UART_0_BASE);
  int si = IORD_ALTERA_AVALON_UART_CONTROL (UART_0_BASE);

  //發送中斷處理
  if(sr & ALTERA_AVALON_UART_STATUS_TRDY_MSK)
  {
    //串口發送端已準備好
    ///if(na_uart1->np_uartcontrol & np_uartcontrol_itrdy_mask)
      if(si & ALTERA_AVALON_UART_CONTROL_TRDY_MSK)

    {
      //如果itrdy中斷已打開,判斷發送緩沖區是否為空
      if (TxTail != TxHead)
      {
        //如果發送緩沖區中還有發送數據,發送一個字節數據
         IOWR_ALTERA_AVALON_UART_TXDATA(UART_0_BASE ,TxBuf[TxTail]);
        //如果已到達數組尾部,TxTail索引值返回數組頭部
        if (++TxTail > (TXBUFSIZE - 1))
          TxTail = 0;
          }
          else
          {   //已經沒有待發送數據,關閉發送中斷,使能接收中斷
           ///na_uart1->np_uartcontrol = np_uartcontrol_irrdy_mask;
                 IOWR_ALTERA_AVALON_UART_CONTROL(UART_0_BASE, 0x80|0x10);//開發送中斷,中斷使能

          }
      }
    }   //發送中斷處理完成
    //接收中斷處理
    if(sr & ALTERA_AVALON_UART_STATUS_RRDY_MSK)
    {
      //串口接收端收到新數據,將其放入接收緩沖區數據流末尾
        //RxBuf[RxHead] = na_uart1->np_uartrxdata;
             RxBuf[RxHead] = IORD_ALTERA_AVALON_UART_RXDATA(UART_0_BASE);
      
      //接收字符回顯
      
       _putchar(RxBuf[RxHead]);
      //顯示接收字符ASCII碼(十六進制)
      if (ShowHex)
          printf("\n%02X\n" , RxBuf[RxHead]);
      
      if ((++RxHead) > (RXBUFSIZE - 1))
      {
        //如果RxHead索引值已到數組末尾,返回數組頭部
      RxHead = 0;
    }
    
    //串口狀態寄存器清零
    ///na_uart1->np_uartstatus = 0;
            IOWR_ALTERA_AVALON_UART_STATUS(UART_0_BASE, 0);
     }  //接收中斷處理完成
}















?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久福利资源站| 九色|91porny| 欧美国产禁国产网站cc| 欧美一区二区三区视频| 欧美色区777第一页| 中文字幕一区二区三| 亚洲欧美日韩国产一区二区三区 | 亚洲精品一区二区三区蜜桃下载| 99riav久久精品riav| 99久久99久久精品免费看蜜桃| 成人在线视频一区二区| 国产大片一区二区| 国产suv精品一区二区三区| 懂色av一区二区在线播放| 97精品国产露脸对白| 色av综合在线| 777午夜精品免费视频| 欧美一级黄色片| 久久久久国产精品人| 欧美激情在线免费观看| 亚洲品质自拍视频| 亚洲一区在线观看免费观看电影高清| 亚洲成av人片在www色猫咪| 日本午夜精品视频在线观看 | 国内精品久久久久影院一蜜桃| 精彩视频一区二区三区| 成人激情午夜影院| 91国偷自产一区二区三区观看| 欧美日本精品一区二区三区| 欧美成人高清电影在线| 欧美激情一区二区三区| 夜夜精品浪潮av一区二区三区| 日韩av电影天堂| 风间由美一区二区三区在线观看 | 国产在线一区二区| 91色乱码一区二区三区| 欧美日本一区二区三区四区| 久久久蜜桃精品| 夜夜嗨av一区二区三区| 国产麻豆精品在线观看| 精品视频免费在线| 国产精品青草久久| 麻豆91精品视频| 色综合中文综合网| 制服.丝袜.亚洲.中文.综合| 国产亚洲综合在线| 亚洲第一主播视频| 99精品国产视频| 精品国产一区二区在线观看| 一区二区三区免费看视频| 国产精品羞羞答答xxdd| 欧美午夜精品一区二区蜜桃| 久久久久成人黄色影片| 日韩高清欧美激情| 色狠狠综合天天综合综合| 久久综合九色综合欧美98 | 欧美男同性恋视频网站| 国产精品网站导航| 精品在线一区二区| 在线成人免费观看| 亚洲激情五月婷婷| 99精品视频一区二区| 国产亚洲精品aa午夜观看| 免费观看91视频大全| 在线亚洲高清视频| 亚洲欧美经典视频| 成人国产一区二区三区精品| 久久久久久毛片| 国内精品免费**视频| 精品三级av在线| 日韩av在线免费观看不卡| 欧美日韩黄色影视| 亚洲国产精品欧美一二99| 色琪琪一区二区三区亚洲区| 亚洲图片另类小说| 99麻豆久久久国产精品免费| 中文字幕成人在线观看| 国产精品亚洲成人| 国产精品色哟哟| 成人丝袜18视频在线观看| 欧美高清在线一区| 99在线视频精品| 亚洲精选免费视频| 91精品免费观看| 亚洲mv在线观看| 制服丝袜亚洲播放| 免费在线看成人av| 精品国产电影一区二区| 国产一区免费电影| 亚洲欧洲美洲综合色网| 日本二三区不卡| 日韩不卡手机在线v区| 精品国产乱码久久久久久影片| 国产麻豆午夜三级精品| 国产精品欧美一级免费| 一本色道久久综合狠狠躁的推荐 | 欧美一区在线视频| 久久成人av少妇免费| 国产午夜亚洲精品午夜鲁丝片| 国产精品一区在线观看你懂的| 中文字幕+乱码+中文字幕一区| 97久久超碰国产精品电影| 亚洲国产精品嫩草影院| 精品久久一二三区| 99精品欧美一区二区三区小说| 亚洲 欧美综合在线网络| 精品国产一二三区| 色综合久久久久久久| 日韩国产欧美三级| 国产日韩精品一区二区三区在线| 99久久国产免费看| 免费精品视频在线| 亚洲人成亚洲人成在线观看图片| 欧美日韩一级黄| 国产成人aaa| 三级不卡在线观看| 国产精品国产三级国产a| 欧美日韩精品一区二区| 国产成人精品免费看| 亚洲综合区在线| 久久精品亚洲精品国产欧美| 91麻豆国产在线观看| 极品美女销魂一区二区三区| 亚洲综合色区另类av| 国产精品情趣视频| 精品精品国产高清一毛片一天堂| 91同城在线观看| 国产成人精品一区二区三区网站观看| 一区二区不卡在线播放 | 亚洲18色成人| 中文字幕中文字幕一区| 精品国产乱码久久久久久久久 | 美女视频黄 久久| 亚洲综合999| 中文字幕中文字幕一区二区| 精品第一国产综合精品aⅴ| 欧美日韩国产一区| 欧美亚洲尤物久久| 91亚洲永久精品| 99久久婷婷国产综合精品电影| 激情文学综合丁香| 丝袜美腿亚洲一区| 一区二区三区加勒比av| 一色屋精品亚洲香蕉网站| 欧美激情一区二区三区四区| 精品福利一区二区三区 | 国产成人亚洲精品青草天美| 日韩主播视频在线| 亚洲国产一区二区a毛片| 亚洲男人天堂av| 亚洲毛片av在线| 1024亚洲合集| 亚洲狼人国产精品| 亚洲美女在线国产| 亚洲四区在线观看| 亚洲免费观看视频| 亚洲一区二区在线免费观看视频 | 婷婷六月综合网| 亚洲成人av电影在线| 亚洲电影欧美电影有声小说| 性久久久久久久久久久久| 亚洲成av人片在www色猫咪| 天堂一区二区在线免费观看| 日韩精品免费专区| 久久99精品久久久久久国产越南| 另类小说视频一区二区| 国产在线精品一区二区夜色| 国产精品456| 色综合色综合色综合色综合色综合 | 91精品国产手机| 欧美tickling挠脚心丨vk| 精品国产乱码久久久久久老虎 | 色哟哟国产精品| 在线观看不卡一区| 91精品免费观看| 久久久91精品国产一区二区精品 | 亚洲大片免费看| 天堂av在线一区| 久久99国产精品久久99| 成人97人人超碰人人99| 91国产成人在线| 日韩亚洲欧美成人一区| 久久久精品免费网站| 亚洲欧美偷拍另类a∨色屁股| 午夜精品影院在线观看| 精油按摩中文字幕久久| 91在线观看成人| 欧美一级高清大全免费观看| 中文av一区二区| 日韩二区在线观看| 成a人片亚洲日本久久| 欧美视频在线观看一区二区| 久久亚洲精精品中文字幕早川悠里| 国产精品久久久久一区二区三区共| 亚洲中国最大av网站| 国产裸体歌舞团一区二区| 色噜噜狠狠色综合欧洲selulu| 欧美va日韩va| 亚洲电影一区二区三区| 懂色av一区二区三区蜜臀|