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

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

?? flash.c

?? CC2430多功能調試程序
?? 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一区二区三区免费野_久草精品视频
成人av电影在线播放| 亚洲欧洲制服丝袜| 91同城在线观看| 不卡的av在线播放| 99精品在线免费| 国产成人精品免费| 国产精品99久久久久久久vr| 国产成人午夜电影网| 成人深夜在线观看| 99久久免费视频.com| 欧美色视频在线观看| 69久久99精品久久久久婷婷| 欧美精品三级在线观看| 日韩欧美激情在线| 欧美经典三级视频一区二区三区| 国产视频一区在线观看| 国产精品每日更新| 夜夜亚洲天天久久| 日本在线观看不卡视频| 精品一区二区在线看| 成人国产在线观看| 欧美日韩二区三区| 精品电影一区二区| 亚洲人成网站在线| 日韩国产精品久久久久久亚洲| 久久综合综合久久综合| jlzzjlzz欧美大全| 日本韩国欧美一区| 欧美大片一区二区| 亚洲欧美在线观看| 日韩国产欧美视频| 风流少妇一区二区| 欧美日韩一区二区三区高清| 欧美zozozo| 亚洲免费观看高清| 极品美女销魂一区二区三区免费 | 1区2区3区欧美| 亚洲午夜激情网页| 精品中文字幕一区二区| 色综合久久综合网欧美综合网| 欧美日韩第一区日日骚| 国产精品理伦片| 日韩av不卡在线观看| 99国产精品国产精品久久| 日韩午夜在线观看视频| 亚洲精品国久久99热| 国产精品99久| 欧美一卡2卡三卡4卡5免费| 国产精品对白交换视频| 激情五月播播久久久精品| 欧美在线免费观看视频| 欧美成人性战久久| 午夜精品久久久久影视| 91美女片黄在线| 久久久久国产精品麻豆ai换脸 | 免费看欧美美女黄的网站| 成人美女在线视频| 日韩免费在线观看| 亚洲福利视频三区| 91免费看片在线观看| 亚洲国产精品ⅴa在线观看| 捆绑紧缚一区二区三区视频 | 欧美精品在线视频| 亚洲视频狠狠干| 国产99一区视频免费| 久久欧美中文字幕| 激情成人午夜视频| 欧美电视剧在线看免费| 日本不卡一区二区| 日韩欧美中文字幕公布| 日韩中文字幕91| 欧美日韩亚洲国产综合| 亚洲高清在线视频| 欧美日本国产一区| 天天综合色天天综合| 日韩亚洲欧美在线| 蜜桃av一区二区在线观看| 欧美成人三级电影在线| 精品一区二区三区影院在线午夜| 日韩欧美自拍偷拍| 国产在线精品一区二区夜色| 久久久美女毛片| 美腿丝袜在线亚洲一区| 久久亚洲综合av| 国产成人精品网址| 国产精品国产三级国产三级人妇 | 蜜桃视频在线一区| 91精品国产aⅴ一区二区| 日韩高清国产一区在线| 国产日韩欧美一区二区三区乱码| 久久91精品久久久久久秒播| 久久婷婷国产综合国色天香| 成人av在线观| 一区二区欧美国产| 在线不卡a资源高清| 激情图片小说一区| 中文字幕一区二区5566日韩| 在线观看视频一区| 蜜桃久久久久久| 国产精品丝袜一区| 欧洲精品在线观看| 精品一区二区在线视频| 亚洲色图一区二区三区| 欧美日韩一区精品| 韩国欧美国产1区| 亚洲日本在线视频观看| 欧美一区二区精品久久911| 岛国av在线一区| 亚洲国产成人av| 久久久精品综合| 欧美日韩中文国产| 国产精品99久久久久久宅男| 亚洲精品一二三| 精品福利在线导航| 91久久人澡人人添人人爽欧美| 日本伊人精品一区二区三区观看方式 | 久久99精品国产麻豆婷婷| 亚洲欧美在线高清| 日韩亚洲欧美中文三级| 91麻豆swag| 国产麻豆视频一区| 天堂影院一区二区| 专区另类欧美日韩| 久久久国际精品| 欧美日韩夫妻久久| 日本大香伊一区二区三区| 狠狠色丁香婷综合久久| 亚洲成人黄色小说| 中文在线资源观看网站视频免费不卡| 欧美日韩亚洲高清一区二区| 99re这里都是精品| 91婷婷韩国欧美一区二区| 国内精品久久久久影院色| 亚洲国产日韩精品| 亚洲免费高清视频在线| 国产精品欧美一区喷水| 久久久久久**毛片大全| 日韩欧美国产麻豆| 91精品国产欧美日韩| 欧美日韩精品一区二区三区| 97久久人人超碰| 风间由美性色一区二区三区| 激情欧美一区二区三区在线观看| 亚洲第一av色| 亚洲一区在线观看网站| 亚洲品质自拍视频网站| 1024精品合集| 国产人成亚洲第一网站在线播放 | 亚洲午夜一区二区| 亚洲精品视频一区二区| 亚洲欧美在线高清| 中文字幕日韩一区二区| 亚洲欧洲精品一区二区三区 | 717成人午夜免费福利电影| 在线视频欧美精品| 欧美伊人久久久久久午夜久久久久| 99麻豆久久久国产精品免费| zzijzzij亚洲日本少妇熟睡| 不卡的电影网站| av一区二区不卡| 91香蕉视频污在线| 日本高清无吗v一区| 在线免费亚洲电影| 欧美三级三级三级| 欧美欧美午夜aⅴ在线观看| 91精品一区二区三区久久久久久 | 最新久久zyz资源站| 亚洲日本在线天堂| 亚洲成a人v欧美综合天堂| 日韩精品一级中文字幕精品视频免费观看| 亚洲国产视频一区| 日韩成人精品在线观看| 国产做a爰片久久毛片| 国产aⅴ精品一区二区三区色成熟| 欧美日韩高清一区二区三区| 91精品国产综合久久精品| 欧美变态凌虐bdsm| 一色屋精品亚洲香蕉网站| 亚洲愉拍自拍另类高清精品| 日韩不卡一区二区三区| 国产麻豆精品theporn| 色婷婷av一区二区三区大白胸 | 美女视频黄 久久| 国产在线不卡视频| 99久久国产综合精品色伊| 91国偷自产一区二区使用方法| 欧美一区二区在线视频| 久久精品免费在线观看| 亚洲最新视频在线观看| 国产一区二区美女诱惑| 91色porny| 26uuu另类欧美亚洲曰本| 亚洲欧美一区二区不卡| 免费成人av在线播放| 99亚偷拍自图区亚洲| 日韩欧美高清一区| 中文字幕一区日韩精品欧美| 青青草97国产精品免费观看 | 亚洲制服丝袜av| 国产自产高清不卡|