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

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

?? flash.c

?? zigbee 2430 演示 就是個演示程序么 說這么多干嘛 暈
?? C
字號:
/******************************************************************************
Filename:     flash.c
Target:       cc2430
Revised:      16/12-2005
Revision:     1.0

Description:

    This example reads data from the UART and stores it in a flash address
    space. The data is written to the LCD. The next time this example is run,
    the previously stored data is fetched and written to the LCD. Both DMA and
    CPU flash write is used.

    NOTE: The flash supports only a limited number of write/erase cycles,
    therefore, this function should not be used many times, as this may wear
    out the flash page used in this example.

******************************************************************************/
#include <stdio.h>
#include <string.h>
#include "app_ex.h"

// Prototypes
void writeFlashUsingDMA(BYTE* pSrcAddr, INT16 length, WORD flashAddress, BOOL erase);
BOOL flashUnused(BYTE* data, INT16 length);
void initFlash(void);
void flash_main(void);


#define STRING_LENGTH 50
#define PAGE_ADDRESS 0x7000
#define PAGE_NUMBER (PAGE_ADDRESS >> 11)


__no_init const char __code testData[2048] @ PAGE_ADDRESS;


volatile    DMA_DESC dmaChannel;

/******************************************************************************
* @fn  writeFlashUsingDMA
*
* @brief
*      Writes data to flash using DMA. Erases the page in advance if told to.
*
* Parameters:
*
* @param  BYTE* pSrcAddr
*         The start of the data to be written to flash.
*
*         INT16 length
*         The number of bytes to be written to flash.
*
*         WORD flashAddress
*         The address in flash the data is to be written to.
*
*         BOOL erase
*         Indicating whether the flash is to be erased or not.
*
* @return void
*
******************************************************************************/
void writeFlashUsingDMA(BYTE* pSrcAddr, INT16 length, WORD flashAddress, BOOL erase)
{
   BYTE oldPointerH = 0;
   BYTE oldPointerL = 0;
   BYTE status;
   BYTE buffer[10];

   status = IEN0;
   INT_GLOBAL_ENABLE(INT_OFF);


   // Setting up the flash address,
   // erasing the page if required.
   SET_WORD(FADDRH, FADDRL, (int)(flashAddress >> 2));
   if(erase == TRUE)
   {
      halFlashErasePage(buffer, PAGE_NUMBER);
   }

   halWait(0xFF);

   // Making sure a multiplum of 4 bytes is transferred.
   while(length & 0x0003){
      length++;
   }


   SET_WORD(dmaChannel.SRCADDRH, dmaChannel.SRCADDRL,   pSrcAddr);   // The start address of the segment
   SET_WORD(dmaChannel.DESTADDRH, dmaChannel.DESTADDRL, &X_FWDATA);  // Input of the AES module
   SET_WORD(dmaChannel.LENH, dmaChannel.LENL, length);               // Setting the length of the transfer (bytes)
   dmaChannel.VLEN      = VLEN_USE_LEN;      // Using the length field
   dmaChannel.PRIORITY  = PRI_HIGH;          // High priority
   dmaChannel.M8        = M8_USE_8_BITS;     // Transferring all 8 bits in each byte.
   dmaChannel.IRQMASK   = FALSE;             // The DMA complete interrupt flag is set at completion.
   dmaChannel.DESTINC   = DESTINC_0;         // The destination address is constant
   dmaChannel.SRCINC    = SRCINC_1;          // The address for data fetch is inremented by 1 byte
   dmaChannel.TRIG      = DMATRIG_FLASH;     // Setting the FLASH module to generate the DMA trigger
   dmaChannel.TMODE     = TMODE_SINGLE;      // A single byte is transferred each time.
   dmaChannel.WORDSIZE  = WORDSIZE_BYTE;     // Set to count bytes.

   // Storing old settings and setting up the DMA.
   // Clearing all DMA complete flags and arming the channel.
   oldPointerH = DMA0CFGH;
   oldPointerL = DMA0CFGL;
   DMA_SET_ADDR_DESC0(&dmaChannel);
   DMA_ABORT_CHANNEL(0);
   DMAIRQ &= ~DMA_CHANNEL_0;
   DMA_ARM_CHANNEL(0);


   // Starting to write
   FLASH_CONFIG(WRITE);

   // Waiting for the DMA to finish.
   while(!(DMAIRQ & DMA_CHANNEL_0));
   DMAIRQ &= ~DMA_CHANNEL_0;


   //Restoring old settings
   DMA0CFGH = oldPointerH;
   DMA0CFGL = oldPointerL;
   IEN0 = status;


   return;
}




/******************************************************************************
* @fn  flashUnused
*
* @brief
*      Checks whether the given flash area is uninitialized (0xFF).
*
* Parameters:
*
* @param  BYTE* data
*         The start of the data to be investigated.
*
*         INT16 length
*         The number of bytes to be insvestigated.
*
* @return BOOL
*         Indicating if flash was unused (TRUE) or not (FALSE).
*
******************************************************************************/
BOOL flashUnused(BYTE* data, INT16 length)
{
   while((data[--length] == 0xFF) && (length));

   if(length == 0)return TRUE;
   else return FALSE;
}


/******************************************************************************
* @fn  initFlash
*
* @brief
*      Initializes components for use with the Flash application example.
*
* Parameters:
*
* @param  void
*
* @return void
*
******************************************************************************/
void initFlash(void)
{
   initLcd();

   INIT_BUTTON();
   INIT_GLED();
   INIT_YLED();

}


/******************************************************************************
* @fn  flash_main
*
* @brief
*      Main function.
*
* Parameters:
*
* @param  void
*
* @return void
*
******************************************************************************/
#ifdef COMPLETE_APPLICATION
void flash_main(void){
#else
void main(void){
#endif
   BYTE buffer[30];
   char inputBuffer[STRING_LENGTH];
   INT8 pointer = 0;
   BOOL stop = FALSE;
   BOOL write = FALSE;
   char c;
   char *menuText[] = {(char*)" CPU write?", (char*)" DMA write?"};
   BYTE command;
   BOOL unUsed;

   initFlash();

   // Clearing buffers
   memset(buffer,0,sizeof(buffer));
   memset(inputBuffer,0,sizeof(inputBuffer));

   // Setting up UART
   UART_SETUP(0,57600,HIGH_STOP);
   UTX0IF = 1;  // Set UART 0 TX interrupt flag

   while(getJoystickDirection() != CENTRED);

   //Displaying the stored flash message.
   lcdUpdateLine(LINE1,(char*)"Last written:");
   if((unUsed = flashUnused((BYTE*)testData, STRING_LENGTH)))
   {
      scrollText((char*) "The flash function has not previously been used!", STRING_LENGTH);
   }
   else
   {
      scrollText((char*) testData, STRING_LENGTH);
   }

   while(getJoystickDirection() != CENTRED);
   while(getJoystickDirection() == CENTRED);
   while(getJoystickDirection() != CENTRED);


   // User decides whether to use CPU or DMA to write flash or to abort.
   command = lcdMenu(menuText,2);
   if(command == ABORT_MENU)
   {
      return;
   }


   // Uart communication
   lcdUpdate((char*)"Enter data", (char*)"using UART");
   printf((char*)"\n\n**************Flash Programming **************\n");
   printf((char*)"Chipcon.com\n\n\n");

   printf((char*)"Press a key to start\n\n");
   uartGetkey (); // wait for a key to be pressed or the application to be ended
   if (stopApplication() ) return;
   else
   {
      inputBuffer[0] = U0DBUF;
      halWait(5);
      USART0_FLUSH();
      inputBuffer[1] = U0DBUF;
   }

   // Printing the previously written data
   printf((char*)"\nPreviously written:\n");
   if(unUsed)
   {
      printf((char*)"The flash function has not previously been used!\n");
   }
   else
   {
      printf((char*)"%s\n",&testData);
   }

   //Aquiring new data:
   printf((char*)"\n\nType data to be written to flash.\nData will be printed to the LCD next time this example is run.");
   printf((char*)"\n(ENTER to store in flash, ESC to abort)\n\n");
   memset(inputBuffer,0,STRING_LENGTH);

   while(!stop)
   {
      c = getkey();
      U0DBUF = c;

      switch (c){
      case ENTER:
         inputBuffer[pointer] = 0;
         printf((char*)"\n\nThis string will be written to flash: %s\nPress ENTER if OK.\n",inputBuffer);
         if(getkey() == ENTER)
         {
            // Write data to flash;
            stop = TRUE;
            write = TRUE;
         }
         else
         {
            // Reaquire data.
            printf((char*)"\nEnter new text:\n");
            pointer = 0;
         }
         break;
      case BACK_SPACE:
         // Erasing the last typed data.
         if (pointer > 0)
         {
            pointer--;
            inputBuffer[pointer] = ' ';
         }
         break;
      case ESC:
         // Abort Flash write.
         stop = TRUE;
         write = FALSE;
         break;
      default:
         // Add typed data to buffer.
         if (pointer < STRING_LENGTH-1)
         {
            inputBuffer[pointer] = c;
            pointer++;
         }
         break;
      }
   }

  INT_GLOBAL_ENABLE(INT_OFF);

   // Updating the flash if asked to.
   if(write == TRUE)
   {
      if(command == 0)
      {
         halFlashWritePage((BYTE*) &inputBuffer, buffer, PAGE_NUMBER);
      }
      else
      {
         writeFlashUsingDMA((BYTE*) &inputBuffer, STRING_LENGTH, PAGE_ADDRESS, TRUE);
      }
      printf((char*)"\nPage updated with:");
      printf((char*)" %s\n",(char __code*) (PAGE_NUMBER << 11));
      lcdUpdate((char*)"FLASH updated!", (char*)"LEFT to continue");
   }
   else
   {
      printf((char*)"\nPage not updated...\n");
      lcdUpdate((char*)"Not updated", (char*)"LEFT to continue");
   }


   // Done
   haltApplicationWithLED();

   return;
}


/******************************************************************************
* @fn  flash_init
*
* @brief
*      Initializes the Flash application example.
*
* Parameters:
*
* @param  APPLICATION *a
*         Main application
*
* @return void
*
******************************************************************************/
#ifdef COMPLETE_APPLICATION
void flash_init(APPLICATION *a)
{
   a->menuText = (char*)"Flash Writing";
   a->description = (char*)"57600 8-N-1";
   a->main_func = flash_main;
}
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产美女久久久久| 色视频成人在线观看免| 99久久精品99国产精品| 91精品国产乱码| 亚洲日本成人在线观看| 精品一区二区免费在线观看| 在线视频综合导航| 久久亚洲二区三区| 午夜欧美大尺度福利影院在线看| 高清不卡在线观看av| 91精品视频网| 亚洲制服丝袜av| 成人黄色在线网站| 久久久久国产精品麻豆| 青草av.久久免费一区| 欧洲亚洲国产日韩| 国产日韩亚洲欧美综合| 黑人精品欧美一区二区蜜桃| 欧美日韩国产系列| 一区二区三区在线免费视频| 国产成人高清视频| 26uuu久久综合| 午夜精品成人在线视频| 在线视频你懂得一区| 自拍偷拍亚洲欧美日韩| 99免费精品在线观看| 欧美经典一区二区| 国产福利一区二区三区视频| 欧美精品一区二区三区蜜臀| 日韩av一区二区在线影视| 6080国产精品一区二区| 丝袜美腿亚洲一区二区图片| 欧美久久一二区| 五月激情丁香一区二区三区| 欧美肥妇bbw| 日本一道高清亚洲日美韩| 91麻豆精品国产| 另类小说一区二区三区| 日韩视频免费观看高清完整版 | 国产亚洲精品超碰| 韩国一区二区三区| 国产视频一区不卡| www.亚洲免费av| 亚洲男人的天堂一区二区| 欧美中文字幕一区| 男女激情视频一区| 国产亚洲短视频| 91热门视频在线观看| 亚洲国产综合人成综合网站| 91精品国产综合久久久久久漫画| 美国一区二区三区在线播放| 国产亚洲欧美激情| 在线观看日韩av先锋影音电影院| 亚洲成av人片在线| 欧美岛国在线观看| 国产精品一品视频| 国产精品系列在线| 色婷婷精品久久二区二区蜜臀av| 亚洲乱码国产乱码精品精可以看 | 欧亚洲嫩模精品一区三区| 亚洲欧美激情视频在线观看一区二区三区| 成人av综合在线| 亚洲天堂中文字幕| 欧美性做爰猛烈叫床潮| 午夜精品福利视频网站| 欧美成人伊人久久综合网| 另类成人小视频在线| 精品国产免费一区二区三区四区 | 国产欧美一区二区精品秋霞影院 | 久久久噜噜噜久久人人看| 九九精品视频在线看| 国产色一区二区| kk眼镜猥琐国模调教系列一区二区 | 成人av影视在线观看| 亚洲一线二线三线久久久| 精品国产在天天线2019| 成人一区二区三区中文字幕| 尤物av一区二区| 欧美成人国产一区二区| 不卡在线视频中文字幕| 午夜激情综合网| 欧美激情一区在线观看| 欧美日韩一区二区三区视频| 国产乱子伦一区二区三区国色天香| 久久久精品免费观看| 精品一二三四在线| 一区二区三区四区视频精品免费 | 久久久精品tv| 一本久久综合亚洲鲁鲁五月天| 亚洲成a人v欧美综合天堂| 国产精品每日更新| 欧美精品1区2区| 成人av免费在线观看| 麻豆免费精品视频| 麻豆专区一区二区三区四区五区| 国产精品免费观看视频| 91麻豆精品国产91久久久| 92国产精品观看| 美女看a上一区| 一区二区高清视频在线观看| 亚洲精品在线观| 51精品国自产在线| 91视频国产观看| 国产精品18久久久久久久久久久久| 一个色妞综合视频在线观看| 国产视频视频一区| 日韩精品中文字幕一区| 99精品视频在线播放观看| 福利电影一区二区| 毛片av一区二区| 亚洲综合另类小说| 亚洲乱码国产乱码精品精的特点| www久久精品| 日韩写真欧美这视频| 精品视频999| 欧洲亚洲精品在线| 91麻豆123| 狠狠色2019综合网| 国精品**一区二区三区在线蜜桃| 香蕉成人伊视频在线观看| 伊人性伊人情综合网| 国产精品萝li| 亚洲日本成人在线观看| 日韩美女久久久| 成人免费一区二区三区视频| 国产日本亚洲高清| 国产午夜精品美女毛片视频| 欧美一级一区二区| 久久久久免费观看| 久久蜜桃av一区精品变态类天堂| 欧美一级片免费看| 日韩欧美在线一区二区三区| 6080国产精品一区二区| 538prom精品视频线放| 在线不卡中文字幕| 91麻豆精品国产91久久久更新时间| 欧美丰满嫩嫩电影| 精品剧情v国产在线观看在线| 色噜噜夜夜夜综合网| 91精品91久久久中77777| 在线观看一区二区视频| 欧美自拍偷拍一区| 6080亚洲精品一区二区| 精品精品国产高清a毛片牛牛| www成人在线观看| 中文字幕电影一区| 亚洲黄色小视频| 亚洲国产日韩一区二区| 亚洲国产精品人人做人人爽| 亚洲国产欧美一区二区三区丁香婷| 午夜精品免费在线| 久久精品国产亚洲一区二区三区| 国内精品国产成人国产三级粉色| 国产.精品.日韩.另类.中文.在线.播放| 国产精品996| 91九色最新地址| 日韩三区在线观看| 国产精品婷婷午夜在线观看| 亚洲人精品午夜| 亚洲成人一区二区在线观看| 麻豆91免费看| 99精品在线观看视频| 在线不卡中文字幕| 国产精品日韩成人| 亚洲成av人片在线| 另类成人小视频在线| 欧美四级电影网| 精品va天堂亚洲国产| 亚洲国产精华液网站w| 亚洲影院在线观看| 国产精品一区专区| 欧美性一级生活| 国产网站一区二区| 亚洲自拍偷拍麻豆| 91一区二区三区在线观看| 欧美一区二区三区在线| 欧美国产乱子伦 | 日韩福利视频网| av成人老司机| 欧美一区二区黄色| 亚洲色图制服诱惑 | 日韩免费观看高清完整版| 欧美国产1区2区| 日韩黄色小视频| 欧美精品一二三区| 亚洲视频 欧洲视频| 国内成人免费视频| 正在播放一区二区| 亚洲精品ww久久久久久p站| 国产一区二区91| 91精品蜜臀在线一区尤物| 精品国产伦一区二区三区观看方式| 日韩精品91亚洲二区在线观看 | 久久久噜噜噜久久人人看 | 久久精品亚洲乱码伦伦中文| 天堂av在线一区| 欧美亚洲图片小说| 亚洲人成亚洲人成在线观看图片| 国产精品亚洲第一区在线暖暖韩国 | 九色|91porny|