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

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

?? flash.c

?? 1:打開IAR開發(fā)環(huán)境
?? C
字號(hào):
/******************************************************************************
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

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品国产网站| 久久成人综合网| 97精品电影院| 亚洲男人的天堂一区二区| 色狠狠av一区二区三区| 一区二区三区电影在线播| 欧洲精品在线观看| 亚洲va韩国va欧美va精品| 日韩一区二区三区电影| 国产一区日韩二区欧美三区| 国产精品久久一卡二卡| 欧美在线看片a免费观看| 免费成人在线视频观看| 国产亚洲一二三区| 色综合婷婷久久| 日韩电影一区二区三区四区| 久久久久久毛片| 色婷婷综合久久久中文字幕| 男女男精品视频网| 欧美国产日韩精品免费观看| 欧美亚洲另类激情小说| 免费看日韩精品| ●精品国产综合乱码久久久久| 91传媒视频在线播放| 久久精品国产亚洲a| 欧美韩国日本一区| 欧美高清视频不卡网| 国产精品一区二区三区网站| 亚洲影视在线观看| 久久久蜜桃精品| 欧美日韩国产三级| 国产麻豆精品在线| 五月婷婷激情综合| 亚洲国产精品99久久久久久久久| 欧美性受xxxx黑人xyx| 国产一区不卡在线| 丝袜美腿一区二区三区| 中文字幕精品综合| 日韩一区二区三区四区| 色悠久久久久综合欧美99| 国产剧情av麻豆香蕉精品| 午夜天堂影视香蕉久久| 中文字幕在线不卡国产视频| 欧美精品一区二区三区在线 | 欧美欧美午夜aⅴ在线观看| 精品一区二区三区蜜桃| 樱花草国产18久久久久| 国产亚洲精品7777| 欧美大片免费久久精品三p| 色狠狠色狠狠综合| 9久草视频在线视频精品| 久久精品国产网站| 午夜电影网一区| 亚洲乱码国产乱码精品精的特点| 久久看人人爽人人| 欧美不卡在线视频| 欧美浪妇xxxx高跟鞋交| 在线亚洲高清视频| 色综合久久综合| 不卡一区二区在线| 成人性视频免费网站| 国产高清一区日本| 国产中文一区二区三区| 精品在线免费观看| 日韩精品一卡二卡三卡四卡无卡| 亚洲综合小说图片| 一区二区三区高清| 亚洲一区二区三区四区中文字幕| 亚洲欧美一区二区三区久本道91 | 日韩欧美第一区| 欧美精品一级二级三级| 欧美三级韩国三级日本一级| 91久久精品午夜一区二区| 91免费国产视频网站| 不卡一区二区三区四区| av网站一区二区三区| 从欧美一区二区三区| 成人午夜私人影院| 99久久婷婷国产精品综合| 91在线云播放| 日本久久精品电影| 欧美丝袜自拍制服另类| 欧美日韩成人激情| 欧美一区二区三区日韩视频| 日韩视频免费观看高清在线视频| 欧美一区二区免费视频| ww亚洲ww在线观看国产| 国产日韩欧美一区二区三区综合| 国产欧美日韩在线| 亚洲欧洲99久久| 亚洲午夜一区二区| 水野朝阳av一区二区三区| 麻豆91在线播放| 国产尤物一区二区在线| jlzzjlzz亚洲日本少妇| 在线亚洲精品福利网址导航| 欧美久久久久久久久| 精品国产免费视频| 亚洲欧洲无码一区二区三区| 亚洲精品午夜久久久| 午夜精品123| 久久精品免费观看| 不卡的av电影在线观看| 欧美欧美欧美欧美| 国产日韩三级在线| 亚洲一区二三区| 国产在线视频一区二区| 99久久婷婷国产综合精品| 欧美三级日韩三级| 国产午夜精品久久| 亚洲国产精品尤物yw在线观看| 日韩电影免费在线| www.色综合.com| 91精品欧美综合在线观看最新 | 欧美激情中文不卡| 亚洲综合图片区| 国产自产高清不卡| 91成人免费网站| 久久精品一区蜜桃臀影院| 一区二区三区.www| 国内国产精品久久| 欧美日韩国产乱码电影| 国产午夜精品在线观看| 亚洲午夜私人影院| 国产精品538一区二区在线| 色国产综合视频| 国产色一区二区| 午夜精品一区在线观看| 成人免费精品视频| 精品欧美乱码久久久久久1区2区| 亚洲女爱视频在线| 国产成人啪免费观看软件| 欧美日韩不卡一区| 中文字幕一区二区三| 久久精品999| 91久久精品一区二区| 国产精品女主播在线观看| 奇米精品一区二区三区在线观看 | 亚洲国产视频一区| 粉嫩久久99精品久久久久久夜| 欧美精品在线观看播放| 一区二区三区在线视频播放| 国产高清一区日本| 精品免费视频一区二区| 日韩电影在线一区| 欧美日韩在线一区二区| 夜夜嗨av一区二区三区网页 | 综合电影一区二区三区| 国产一区二区三区综合| 欧美一级在线观看| 亚洲成人你懂的| 91国偷自产一区二区三区成为亚洲经典 | 自拍偷拍国产亚洲| 国产精品66部| 久久久久久久综合| 精品在线免费观看| 亚洲精品一区二区三区蜜桃下载| 婷婷成人激情在线网| 欧美性猛交一区二区三区精品| 国产精品全国免费观看高清| 国产成人av福利| 久久九九久久九九| 丁香另类激情小说| 国产精品免费视频一区| 911精品产国品一二三产区| 一区二区免费在线播放| 色就色 综合激情| 一区二区在线观看免费视频播放| av色综合久久天堂av综合| 中文字幕综合网| 91丝袜国产在线播放| 一级中文字幕一区二区| 日本二三区不卡| 亚洲国产一区二区a毛片| 欧美日韩一区视频| 日本三级韩国三级欧美三级| 日韩欧美视频在线| 国产精品18久久久久| 欧美激情资源网| 色综合久久久久综合99| 亚洲午夜视频在线| 日韩你懂的在线观看| 国产资源在线一区| 国产精品传媒视频| 日本久久一区二区三区| 婷婷综合在线观看| xvideos.蜜桃一区二区| 成人av先锋影音| 亚洲精品欧美专区| 欧美一区二区美女| 国产jizzjizz一区二区| 亚洲天堂精品在线观看| 欧美亚洲一区二区在线| 奇米精品一区二区三区四区| 国产日韩欧美精品综合| 91小视频免费观看| 日本不卡在线视频| 国产精品私人自拍| 91.xcao| 成人在线视频首页|