FBCmd.c
上传用户:dahaojd
上传日期:2008-01-29
资源大小:14357k
文件大小:5k
源码类别:

DSP编程

开发平台:

C/C++

  1. /*********************************************************************
  2.  *          (C) COPYRIGHT TEXAS INSTRUMENTS, INC. 2000-2002
  3.  * FBCmd.c -- Process FlashBurn Target Component commands
  4.  * for FBTC6416
  5.  */
  6. /* Change Log:
  7.  *
  8.  *
  9.  */
  10. #define DBPRINT 0
  11. #include "type.h"
  12. #include "c642evm.h"
  13. #include "FBTC642.h"
  14. #include "FBCmd.h"
  15. #include <stdio.h>
  16. /* -------------
  17.  * Globals
  18.  * -------------
  19.  */
  20. /* -------------
  21.  * Local statics
  22.  * -------------
  23.  */
  24. /* ----------------
  25.  * Local prototypes
  26.  * ----------------
  27.  */
  28. static void SendVersionID(void);
  29. void doCommand(void)
  30. {
  31. u16 cmd = GetCmd();
  32.         #if DBPRINT == 1
  33.         printf("CMD: %x", cmd);
  34.         #endif
  35.     
  36.     /* Dispatch to a command handler. Handle
  37.      * simple stuff here.
  38.      */
  39. switch(cmd)
  40. {
  41. case 0x0000:      /* NOP */  
  42. break;
  43. case 0x0001:      /* QUERY PROTOCOL VERSION */
  44. SetErrorBits(CMDOK);
  45. SendI2ToHost(cmd, GetProtocolVersionID());
  46. break;
  47. case 0x0002:      /* QUERY STATUS */
  48.         #if DBPRINT == 1
  49.         if(DBPRINT) printf("  Status: %x", GetProtocolStatusWord());
  50.         #endif
  51. SendI2ToHost(cmd, GetProtocolStatusWord());
  52. break;
  53. case 0x0003:      /* ERASE FLASH */
  54. InitFlash();
  55. SetErrorBits(CMDOK);
  56. EraseFlash();
  57. break;
  58. case 0x0004: /* Query FlashStart Addr */
  59. SendI4ToHost(cmd, (unsigned long)GetFlashBase());
  60. break;
  61. case 0x0005:  /* Read 1 Flash loc */
  62.         #if DBPRINT == 1
  63.         if(DBPRINT) printf(" ARGS: %x %x", GetArgVal(0), GetArgVal(1));
  64. #endif
  65. SendI1ToHost(cmd, GetFlashVal((unsigned long)GetFlashBase() + ShortsToULong(GetArgVal(0), GetArgVal(1))));
  66. break;
  67. case 0x0006:  /* Read a block of flash memory */
  68.         #if DBPRINT == 1
  69.         printf(" ARGS: %x %x %x",
  70.          GetArgVal(0), GetArgVal(1), GetArgVal(2));
  71. #endif
  72.         SetErrorBits(CMDOK);
  73. SendFlashBufToHost(cmd, (unsigned long)GetFlashBase() + ShortsToULong(GetArgVal(0), GetArgVal(1)), GetArgVal(2));
  74. break;
  75. case 0x0007:   /* Write data to flash  */
  76.         #if DBPRINT == 1
  77.         printf(" ARGS: %x %x %x",  GetArgVal(0), GetArgVal(1), GetArgVal(2));
  78. #endif
  79. SetFlashAddr((u8 *)((unsigned long)GetFlashBase() + ShortsToULong(GetArgVal(0), GetArgVal(1))));
  80. SetErrorBits(CMDOK);
  81. BurnFlash(GetData(), GetArgVal(2));
  82. break;
  83. case 0x0008:    /* More data */
  84.         #if DBPRINT == 1
  85.         printf(" ARG: %x",  GetArgVal(0));
  86. #endif
  87. SetErrorBits(CMDOK);
  88. BurnFlash(GetData(), GetArgVal(0));
  89. break;
  90. case 0x0009:   /* Respond with current flash data checksum */
  91.         #if DBPRINT == 1
  92.         printf(" ARGS: %x %x %x %xn",  GetArgVal(0), GetArgVal(1), GetArgVal(2), GetArgVal(3));
  93. #endif
  94. SetErrorBits(CMDOK);
  95. CKSSet(0);
  96. SendI2ToHost(cmd,
  97.             (u16)CKSAccumBuf((unsigned char *)((unsigned long)GetFlashBase() + ShortsToULong(GetArgVal(0), GetArgVal(1))),
  98.                   ShortsToULong(GetArgVal(2), GetArgVal(3))));
  99. break;
  100.     case 0x000a:   /* Accept User Data
  101.                 * Simply accept & toss data.
  102.                     * I use this for timing tests.
  103.                     * It could contain your own proprietary
  104.                     * commands or data, sort of an escape
  105.                     * sequence.
  106.                     */
  107.         #if DBPRINT == 1
  108.         printf(" ARG: %x",  GetArgVal(0));
  109.         #endif
  110. SetErrorBits(CMDOK);
  111. /* (Don't do anything with the data)
  112.  */
  113. break;
  114.     case 0x000b:      /* QUERY FLASHSIZE VALUE */
  115. SetErrorBits(CMDOK);
  116. SendI4ToHost(cmd, GetFlashSize());
  117. break;
  118. case 0x000c:      /* Change FLASH Start Address */
  119.         #if DBPRINT == 1
  120.         printf(" ARGS: %x %x", GetArgVal(0), GetArgVal(1));
  121.         #endif
  122. SetErrorBits(CMDOK);
  123. SetFlashBase(ShortsToULong(GetArgVal(0), GetArgVal(1)));
  124. break;
  125. case 0x000d:      /* Change Flash Size */
  126.         #if DBPRINT == 1
  127.         printf(" ARGS: %x %x", GetArgVal(0), GetArgVal(1));
  128. #endif
  129. SetErrorBits(CMDOK);
  130. SetFlashSize(ShortsToULong(GetArgVal(0), GetArgVal(1)));
  131. break;
  132. case 0x000e:      /* Query FBTC Version ID */
  133. SetErrorBits(CMDOK);
  134. SendVersionID();
  135. break;
  136. case 0x000f:      /* QUERY EDIT CAPABILITY */
  137. SetErrorBits(CMDOK);
  138. SendI2ToHost(cmd, EDITFLASHPERMIT);
  139. break;
  140. case 0x0010:      /* QUERY MAX DATA BLOCK SIZE (BYTES)*/
  141. SetErrorBits(CMDOK);
  142. SendI2ToHost(cmd, MAXDATABYTES);
  143. break;
  144. default:
  145. #if DBPRINT == 1
  146. printf(" *** UNKNOWN! ***");
  147. #endif
  148. break;
  149. }
  150. #if DBPRINT == 1
  151. printf("n");
  152. #endif
  153. }
  154. /* Send my version ID back to the Host.
  155.  */
  156. static void SendVersionID()
  157. {
  158. StoreCmd(0x000e);  /* response to this command */
  159. StoreArg(0, FBTCVersionMajor); /* Arg0 */
  160. StoreArg(1, FBTCVersionMinor); /* Arg1 */
  161. }