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

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

?? main.c.bak

?? 射頻芯片驅(qū)動(dòng)
?? BAK
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
 /** @file main.c
 *
 * @author Runar Kjellhaug
 *
 * @compiler This program has been tested with Keil C51 V7.50.
 *
 * @copyright
 * Copyright (c) 2005 Nordic Semiconductor. All Rights Reserved.
 *
 * The information contained herein is confidential property of Nordic Semiconductor. The use,
 * copying, transfer or disclosure of such information is prohibited except by express written
 * agreement with Nordic Semiconductor.
 * @endcopyright
 *
 * $Date: 3.03.06 10:52 $
 * $Revision: 60 $
 *
 */
//  Global defines & includes
#include <cygnal\c8051F320.h>
#include "include\defines.h"
#include "include\usb.h"
#include "include\fwupgrade.h"
#include "include\F320_FlashPrimitives.h"
#include "include\nRF_API.h"
#include "include\ADC.h"
#include "include\TestApp.h"
#include "include\LL_API.h"
#include "include\Protocol_API.h"

code const UINT FW  = FW_VERSION;                                     // Firmware version, const..

BYTE xdata RX_buffer[USB_RX_SIZE];                                    // Last packet received from host通過(guò)USB接口從主機(jī)接收到的數(shù)據(jù)緩沖區(qū)

BYTE xdata TX_buffer[USB_TX_SIZE];                                    // Next packet to sent to host

BYTE xdata TX_pload[TX_PLOAD_MAX_WIDTH];                              // TX payload buffer
BYTE xdata RX_pload[RX_PLOAD_MAX_WIDTH];                              // RX payload buffer

BYTE xdata Table_Ptr;                                                 // Pointer for Freq_table lookup跳頻表的指針
BYTE xdata Freq_table[FREQ_TABLE_SIZE] = {2,27,52,7,32,57,12,37,
                                         62,17,42,67,22,47,72,77};    // Freq Agility table, predefined跳頻表

BYTE xdata Trans_Ctrl[TRANS_PARAMS];                                  // Transmission Control bytes發(fā)送控制字節(jié)
BYTE xdata Freq_agil[NUM_OF_PIPES];                                   // Freq Agility On/Off for pipe.n此數(shù)組的元素為一些時(shí)間值 
BYTE xdata TX_Addr[TX_ADDR_WIDTH];                                    // TX address buffer
BYTE xdata RX_pload_length[NUM_OF_PIPES];                             // holds #of bytes for pipe 0..5
BYTE xdata TX_pload_width;                                            // TX payload width variable
BYTE xdata Freq_Agil_Status;                                          // Variable that holds status of frequency agility是否跳頻的標(biāo)志變量
BYTE xdata Freq_Agil_Pipe;                                            //

BYTE xdata Button_Mode = 0;   //
BYTE xdata Button;                                                    // Variable that holds button index for communication
BYTE xdata SW1_Released;

//Status bytes
BYTE USB_Rx_Comp = 0;                                                 // Indicates new USB frame received
BYTE SPI_Mode = 0;                                                    // Select between HW and SW SPI
BYTE Sweep_Mode = 0;                                                  // Sweep mode on/off
BYTE Com_Mode = 2;                                                    // Communication mode on/off
BYTE IRQ_Source = 0x00;                                               // Indicates IRQ source from nRF24L01
BYTE Sweep_Progress;
BYTE Test_Mode;
BYTE Agil_Timeout;
BYTE LinkStatus[2];                                                   // Link status array, status & channel在LinkStatus數(shù)組內(nèi),先是通道狀態(tài)字節(jié),然后才是通道編號(hào)
BYTE LinkStat,LastStat;  //LinkStat表示當(dāng)前鏈路狀態(tài),LastStat表示歷史鏈路狀態(tài)
BYTE TX_Update;
BYTE RX_Timeout;
UINT Link_Loss_Delay;                                                 // Link Loss dalay variable
BYTE Link_Loss_Status;

BYTE RX_pipe;                                                         // store RX_FIFO pipe number.RX_pipe的值通過(guò)讀取射頻芯片的狀態(tài)寄存器獲得
BYTE byte_ctr;

// Variables used for 'Sweep_Mode'
BYTE sw_low,sw_high,next_ch;
BYTE Sweep_Time_Ctr = 0;

BYTE Trans_Tmr;                                                       // Variables for trans timer comm mode一個(gè)信道發(fā)射時(shí)間計(jì)數(shù)
BYTE Trans_Tmr_Ctr = 0;                                     					// Variables for trans timer comm mode
BYTE Timer_Mode;                                                      // Variable for timer mode
BYTE Try_Ctr;                                                         // Try Counter variable
BYTE Pipe_Length;                                                     // Current RX pipe length variable
UINT CPU_temp, RF_Vdd;
BYTE Led_Blink1,Led_Blink2,Led_Blink3,Led_Blink4;
BYTE T2_State;   //定時(shí)器T2的狀態(tài)標(biāo)志

//--------------------------------------------------------------------
// Main Routine
//--------------------------------------------------------------------
void main(void)
{
  CPU_Init();                    //系統(tǒng)初始化

  while (TRUE)
  {
#ifdef _TESTMODE_   //若是在測(cè)試模式
    while (!USB_Rx_Comp)                                              // wait for USB command
    {
      if(!SW1) Test_TX();                                             // Goto TX mode
      if(!SW2) Test_RX();                                             // Goto RX mode
      if(USB_SW != 0x0f)                                              // Enable SW3 = CE if USB_ID <> 0.
      {
        if(!SW3)
        {
          CE_Pin(CE_HIGH);                                            // Hold CE high while SW3 is pressed.
        }
        else 
        {
          CE_Pin(CE_LOW);                                             // Hold CE low as long as SW3 is released.
        }
      }
    }
#else               //不是在測(cè)試模式下
    while(!USB_Rx_Comp)                                               // wait for USB command, and prosess other operations
    {
      if(IRQ_Source)                                                  // wait for nRF24L01 interrupt
      {
      	EX0 = 0;                                                        // Disable External interrupt during prosessing
      	if(T2_State)
        {
          ET2 = 0;                                                    // Disable T2 interrupt
          Stop_T2();                                                  // and stop timer2
        }//if(T2_State)
        
        switch(IRQ_Source)
        {
          case RX_DR:
          { // RX Data received interrupt                                          
            do
            {
              RX_pipe = L01_Read_RX_Pload(RX_pload) >> 8;             // Read current payload
              if(Freq_Agil_Pipe == RX_pipe)                           // Packet received for "expected" pipe?
              { //若是從預(yù)定的通道接收到數(shù)據(jù)
                Blink_Led(LED1);                                      // _DEBUG_LED_ Led1 BLINK則LED1亮
                LinkStatus[LINK_STATUS] = LINK_ESTABLISH;             // Indicate "Link Loss"
                LinkStatus[LINK_CHANNEL] = L01_Get_Channel();         // Insert current channel讀取當(dāng)前通道編號(hào)
              
                LinkStat = LINK_ESTABLISH;                            // New LinkStat
                Agil_Timeout  = CLEARED;                              // Packet received, i.e. ok
                Trans_Tmr_Ctr = CLEAR;                                // Reset frequency agility timer清除跳頻定時(shí)器
              }
              else //若不是預(yù)定點(diǎn)通道接收到數(shù)據(jù),則LED2閃爍
                Blink_Led(LED2);                                      // _DEBUG_LED_ Led2 BLINK if data of other pipe
            }
            while(!(L01_Get_FIFO() & RX_EMPTY));                      // ..until FIFO empty

            L01_Clear_IRQ(MASK_RX_DR_FLAG);                           // clear RX_DR flag
          	break;
          }//case RX_DR:
          
          case TX_DS:  
          { // TX Data sent interrupt
            Blink_Led(LED1);                                          // _DEBUG_LED_ Led1 BLINK
            LinkStat = LINK_ESTABLISH;                                // set LinkStat = LINK_ESTABLISH
            Trans_Tmr_Ctr = CLEAR;                                    // reset Transmitt Timer..

            L01_Clear_IRQ(MASK_TX_DS_FLAG);                           // Clear TX_DS flag
          	break;
          }//case TX_DS:

          case MAX_RT:
          {	//最多次重發(fā)中斷
            Blink_Led(LED3);                                          // _DEBUG_LED_ Led3 BLINK

            if(Freq_Agil_Status)                                      // running in freq_agil mode?
            {	//若采用了跳頻
              if(++Table_Ptr == FREQ_TABLE_SIZE)                      // Freq_table wrapping?
              {	//若跳頻表中的頻點(diǎn)已用完
                Blink_Led(LED4);                                      // _DEBUG_LED_ Led4 BLINK則LED4閃爍
                Table_Ptr = CLEAR;                                    // Reset Table_Ptr to first channel清除跳頻表的指針
                if(Try_Ctr++ == 3)
                {	//若嘗試次數(shù)已達(dá)3次
                  LinkStat = STOP;  //停止使用當(dāng)前頻點(diǎn)
                }
              }//if(++Table_Ptr == FREQ_TABLE_SIZE)
              L01_Set_Channel(Freq_table[Table_Ptr]);                 // select new channel使用新的信道
            }//if(Freq_Agil_Status)
            
            Trans_Tmr_Ctr = CLEAR;                                    // reset Transmitt Timer..
            switch(LinkStat)
            {
              case LINK_ESTABLISH:        // max retransmitt, but had comm on last channel達(dá)到了最多次重發(fā),但在上一個(gè)信道通信成功
                L01_Clear_IRQ(MASK_MAX_RT_FLAG);                      // clear MAX_RT flag (nRF24L01)清除最多次重發(fā)標(biāo)志           
                LinkStat = LINK_LOSS;                                 // change LinkStat state to LINK_LOSS, wait for new timeout
              	break;
              case LINK_LOSS:             // still not connected, run channel scan..若鏈路沒(méi)有建立成功,執(zhí)行信道掃描
                L01_Clear_IRQ(MASK_MAX_RT_FLAG);                      // clear MAX_RT flag (nRF24L01)
                CE_Pin(CE_PULSE);                                     // retransmitt packet再次發(fā)包  
                LinkStat = LINK_RELOST;                               // change LinkStat state to LINK_RELOST
              	break;        
              case LINK_RELOST:						//若是再次丟失
                L01_Clear_IRQ(MASK_MAX_RT_FLAG);                      // clear MAX_RT flag (nRF24L01)
                CE_Pin(CE_PULSE);                                     // retransmitt packet再次發(fā)包    
                LinkStat = LINK_RELOST;
              	break;
              case STOP:									//
                L01_Clear_IRQ(MASK_MAX_RT_FLAG);                      // clear MAX_RT flag
                LinkStat = LINK_ESTABLISH;                            // stop retransmission
              	break;
            }//switch(LinkStat)
          break;
        }//case MAX_RT:
				default:                          // ..error handler     
          break;
      	}//switch(IRQ_Source)
        IRQ_Source = CLEAR;   // Clear IRQ flag

        if(T2_State)
        {
            Start_T2();
            ET2 = 1;                                                  // Enable T2 interrupt only if T2 in use          
        }//if(T2_State)

        EX0 = 1;                                                      // Enable external interrupt again..
      }
      
      Check_Button_TX();

    }
#endif
    Sweep_Mode = CLEAR;                                               // Terminate Sweep_Mode
    USB_Rx_Comp = CLEAR;
    switch(RX_buffer[CMD])                                            // USB command decoder解析通過(guò)USB接口接收到的命令
    {
      case CSN_STATE:                                                 // Set/Reset CSN(NSS) pin
        CSN_Pin(RX_buffer[ARG]);
        TX_buffer[0] = 0;
        Block_Write(TX_buffer,1);
      break;

      case SPI_COMMAND:                                               // Writes a SPI byte
        TX_buffer[0] = SPI_RW(RX_buffer[ARG]);
        Block_Write(TX_buffer,1);
      break;

      case CE_BIT:                                                    // Set/Reset CE pin
        CE_Pin(RX_buffer[ARG]);
        
        TX_buffer[0] = 0;
        Block_Write(TX_buffer,1);
      break;

      case FW_VER:                                                    // Return current FirmWare version
        TX_buffer[0] = (BYTE)(FW>>8);                                 // Get major FW_Ver
        TX_buffer[1] = (FW & 0xff);                                   // Get minor FW_Ver
        
        Block_Write(TX_buffer, 2);
      break;

      case READ_USB_ID:                                               // Return current USB_ID switch setting
        TX_buffer[0] = USB_ID;                                        // macro; defines.h
        Block_Write(TX_buffer,1);
      break;

      case WRITE_LEDS:                                                // Set/Reset LED...
        Write_Led(RX_buffer[ARG], RX_buffer[VALUE]);
        TX_buffer[0] = 0;
        Block_Write(TX_buffer,1);
      break;

      case WR_FLASH_BLOCK:                                            // Writes 32 bytes of flash data to block 'n'
        WritePageBlock(RX_buffer[ARG], &RX_buffer[VALUE]);
        TX_buffer[0] = 0x00;
        Block_Write(TX_buffer,1);
      break;

      case RD_FLASH_BLOCK:                                            // Reads and return 32 bytes of flash block 'n'
        ReadPageBlock(RX_buffer[ARG], &TX_buffer[0]);
        Block_Write(TX_buffer, SZ_BLOCK);
      break;

      case WR_FLASH_PAGE:                                             // Writes the flash page n*256 buffer to flash
        if (RX_buffer[ARG] == 0)
          EA = 0;
        WriteFlashPage((unsigned)RX_buffer[ARG]);
        if (RX_buffer[ARG] == 0)
          EA = 1;

        TX_buffer[0] = 0x00;
        Block_Write(TX_buffer,1);
      break;

      case RD_FLASH_PAGE:                                             // Read the n*256 flash page to flash buffer
        ReadFlashPage((unsigned)RX_buffer[ARG]);
        TX_buffer[0] = 0x00;
        Block_Write(TX_buffer,1);

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美顶级少妇做爰| 亚洲精选在线视频| 精品久久久三级丝袜| 欧美一区二区视频在线观看2022| 欧美综合色免费| 欧美色图天堂网| 欧美少妇bbb| 欧美高清视频一二三区| 欧美精品久久99| 欧美男同性恋视频网站| 在线电影欧美成精品| 色狠狠综合天天综合综合| 日本高清无吗v一区| 欧美天堂一区二区三区| 4438x亚洲最大成人网| 欧美一三区三区四区免费在线看| 69av一区二区三区| 日韩免费高清av| 久久奇米777| 美女一区二区视频| 久久成人久久鬼色| 国产高清精品网站| 成人精品视频网站| 在线亚洲高清视频| 在线综合视频播放| 精品国产一二三区| 国产女主播在线一区二区| 中文字幕亚洲电影| 亚洲一区二区三区自拍| 免费看黄色91| 国产精品亚洲一区二区三区妖精 | 亚洲一区二区三区四区的 | 91社区在线播放| 欧美日韩中文一区| 欧美tk—视频vk| 国产精品久久久久久久久果冻传媒| 国产精品久久久久久久久动漫 | 欧美日韩精品福利| 91激情五月电影| 69久久99精品久久久久婷婷 | 综合av第一页| 日韩黄色免费电影| 夫妻av一区二区| 在线亚洲人成电影网站色www| 日韩一区和二区| 欧美高清在线视频| 亚洲高清久久久| 国产大陆a不卡| 欧美午夜精品久久久久久超碰| 精品国产制服丝袜高跟| 99久久精品国产毛片| 91精品国产综合久久国产大片 | 麻豆freexxxx性91精品| caoporn国产一区二区| 欧美一卡2卡3卡4卡| 国产精品传媒在线| 日韩成人伦理电影在线观看| 成人午夜私人影院| 91精品国产美女浴室洗澡无遮挡| 国产三区在线成人av| 亚洲一区二区精品久久av| 国产精品99久久久久久宅男| 欧美色网站导航| 国产精品久久久久精k8| 久久国产精品99精品国产| 色综合久久综合中文综合网| 精品国产污污免费网站入口 | 国产高清精品在线| 在线电影院国产精品| 亚洲人成在线播放网站岛国| 国产一区二区三区在线观看免费| 欧美中文字幕不卡| 18欧美亚洲精品| 国产精品一品二品| 日韩精品一区二区三区视频在线观看| 樱桃视频在线观看一区| 成人黄色一级视频| 国产亚洲欧美色| 老汉av免费一区二区三区| 欧美性生活一区| 亚洲日本免费电影| 成人精品小蝌蚪| 久久久久久免费网| 久久国内精品视频| 91精品国产色综合久久不卡蜜臀| 亚洲在线视频网站| 色综合久久88色综合天天6| 日本一区二区电影| 国产一区 二区| 日韩精品一区二区三区在线观看| 亚洲国产成人精品视频| 色哟哟亚洲精品| 成人免费小视频| 暴力调教一区二区三区| 欧美国产日本视频| 大陆成人av片| 国产网红主播福利一区二区| 精品一区二区三区在线视频| 欧美一区二区三区免费观看视频 | 美女尤物国产一区| 日韩一级在线观看| 捆绑调教一区二区三区| 欧美一区二区三区男人的天堂| 午夜日韩在线观看| 91精品中文字幕一区二区三区| 婷婷国产v国产偷v亚洲高清| 欧美日韩精品系列| 偷拍一区二区三区| 欧美一区二区三区视频在线观看| 亚洲成人av一区| 91精品国产丝袜白色高跟鞋| 青青青伊人色综合久久| 日韩欧美一级在线播放| 精品一区二区久久| 久久这里只有精品视频网| 国产一区二区91| 国产精品美女一区二区三区| 97精品国产97久久久久久久久久久久| 国产精品美女久久久久aⅴ国产馆| 成人免费高清在线| 亚洲视频 欧洲视频| 欧美羞羞免费网站| 日韩vs国产vs欧美| 欧美va亚洲va在线观看蝴蝶网| 国产乱子伦视频一区二区三区| 国产精品视频一二| 91麻豆国产自产在线观看| 亚洲一区免费观看| 欧美一区二区三区在线视频| 韩国av一区二区三区| 欧美极品少妇xxxxⅹ高跟鞋| 99re成人精品视频| 亚洲成人激情自拍| 精品av久久707| 成人av资源站| 亚洲成人福利片| 久久影院电视剧免费观看| 成人激情动漫在线观看| 亚洲一二三区不卡| 日韩美一区二区三区| 成人国产精品视频| 性久久久久久久久| 国产日韩精品久久久| 一本色道久久综合精品竹菊| 日韩国产在线一| 欧美激情在线免费观看| 欧美日韩在线播放三区四区| 精品一区二区三区av| 亚洲精品自拍动漫在线| 精品国产三级电影在线观看| hitomi一区二区三区精品| 婷婷久久综合九色国产成人| 久久久高清一区二区三区| 欧美揉bbbbb揉bbbbb| 国产乱码一区二区三区| 亚洲在线中文字幕| 欧美国产日韩精品免费观看| 欧美日本免费一区二区三区| 福利电影一区二区三区| 日韩制服丝袜av| 国产精品久久久久影院| 91精品在线一区二区| 一本到一区二区三区| 黄页视频在线91| 亚洲午夜久久久久| 欧美国产日韩在线观看| 欧美一级片在线| 色偷偷久久一区二区三区| 国产精品亚洲午夜一区二区三区| 亚洲国产精品久久不卡毛片 | 国产成人aaaa| 日本免费新一区视频| 亚洲视频资源在线| 久久蜜臀中文字幕| 精品污污网站免费看| 成人白浆超碰人人人人| 国产在线麻豆精品观看| 丝袜美腿成人在线| 亚洲一区在线观看免费 | 国产一区二区久久| 日韩和欧美一区二区三区| 一区二区三区中文字幕| 国产精品午夜春色av| www国产成人| 欧美一级免费大片| 欧美日韩一区二区在线视频| 99久久99精品久久久久久| 国产 欧美在线| 久久精品国产一区二区| 人人狠狠综合久久亚洲| 亚洲无人区一区| 亚洲精品videosex极品| 中文字幕亚洲区| 国产精品久久久久精k8| 久久久久国产精品人| 精品国产1区二区| 精品区一区二区| 欧美电视剧在线看免费| 欧美一级久久久| 在线综合亚洲欧美在线视频|