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

DSP编程

开发平台:

C/C++

  1. /*********************************************************************
  2.  *          (C) COPYRIGHT TEXAS INSTRUMENTS, INC. 2000-2002
  3.  * FBTC6416.c -- main() function: Low level FlashBurn Communications
  4.  *             protocol for 6416
  5.  ********************************************************************/
  6. /* Change Log:
  7.  *
  8.  */
  9. #include "type.h"
  10. #include <stdio.h>      /* C_I/O */
  11.  
  12. #include "c642evm.h"
  13. #include "FBTC642.h"
  14. #include "FBCmd.h"
  15. /* -------------
  16.  * Globals
  17.  * -------------
  18.  */
  19. /* The message must be global; Host will use
  20.  * its address for sending and receiving
  21.  * messages.
  22.  * This program reads what's in the message block
  23.  * and processes it. When done processing,
  24.  * this program will store any response data back
  25.  * into the same block.
  26.  */
  27. u8 theMessage[CMDSIZEBYTES+ARGSIZEBYTES+MAXDATABYTES] = {0}; // exchange messages with Host
  28. /* This function must be global; Host will
  29.  * set a breakpoint on it.
  30.  * When this program hits the breakpoint,
  31.  * host will detect the halt and process
  32.  * any response info that may be in the message
  33.  * block. When Host wants to send a message
  34.  * to this FBTC, it will store
  35.  * the message into the global message block
  36.  * and start this FBTC running.
  37.  */
  38. void doMessageProc();  // Message Exchange routine
  39. /* -------------
  40.  * Local statics
  41.  * -------------
  42.  */
  43. /* This is the Status Word described
  44.  * in the Comm. Protocol Spec.
  45.  */
  46. static u16 m_ProtocolStatusWord = 0;
  47. #pragma FUNC_NEVER_RETURNS(main);
  48. void main()
  49. {    
  50.     /* User comfort message. Runs much faster
  51.      * and leaner with no printfs anywhere.
  52.      */
  53. // printf("Target FBTC Runningn");
  54. InitFlash();
  55. /* Runs forever, 'cause
  56.  * there's no need for me to halt.
  57.  *
  58.  */
  59. for(;;)
  60. {
  61. // When this returns, the Host has sent a message
  62. // (by writing it into theMessage struct).
  63. doMessageProc();
  64. doCommand();
  65. }
  66. }
  67. /* Global Funcs to send messages to Host.
  68.  */
  69. /* This do-nothing function is here to
  70.  * define a global symbol. The Host app.
  71.  * will set a breakpoint at this loc.
  72.  * When this program steps off the
  73.  * breakpoint (returns from this func),
  74.  * that means that the Host has filled
  75.  * the global message block (at theMessage)
  76.  * with a command and data to process.
  77.  * This prog. will process the message,
  78.  * write any response data back into
  79.  * the message block, and then come back
  80.  * here and hit the breakpoint.
  81.  */
  82. void doMessageProc()
  83. {
  84. /* Optimizer will want to delete
  85.  * this function, since it doesn't
  86.  * appear to do anything useful.
  87.  * Assigning a value to a volatile
  88.  * forces optimizer to keep this code. 
  89.  */ 
  90. volatile int FoolTheOptimizer = 0;
  91. }
  92. /* ------------------------
  93.  * Global Utility Functions
  94.  * ------------------------
  95.  */ 
  96. u16 GetProtocolStatusWord(void)
  97. {
  98. return m_ProtocolStatusWord;
  99. }
  100. /* Comm. Protocol Version in force when this
  101.  * FBTC was created. Add 1 if the protocol
  102.  * changes, even if this software did not change.
  103.  * For Protocol Version ID, see the Exchange
  104.  * Communications Protocol document.
  105.  * This is in the C file instead of the header
  106.  * file 'cause the header file is used by other
  107.  * C files, which could compromise encapsulation.
  108.  */
  109. u16 GetProtocolVersionID(void)
  110. {
  111. return (u16)COMMPROTOCOLVERSION;
  112. }
  113. /* -------------------------
  114.  * Utility Status Word funcs
  115.  * -------------------------
  116.  */
  117. /* Set the 4 status bits
  118.  */
  119. void SetErrorBits(u16 x)
  120. {
  121.     m_ProtocolStatusWord &= ~(0x000f);
  122.     m_ProtocolStatusWord |= ((x) & 0x000f);
  123. }
  124. /* Stores val into the message command bytes
  125.  */
  126. void StoreCmd(u16 val)
  127. {
  128. theMessage[0] = val >> 8;
  129. theMessage[1] =  val & 0x00ff;
  130. }
  131. u16 GetCmd(void)
  132. {
  133. return ((u16)theMessage[0] << 8) |
  134.        (u16)theMessage[1];
  135. }
  136. /* Stores val into the message argument bytes
  137.  * at argindex.
  138.  * Argindex is 0-15.
  139.  */
  140. void StoreArg(int argindex, u16 val)
  141. {
  142. int myindex = ARGINDEX + argindex * 2;
  143. theMessage[myindex++] = val >> 8;
  144. theMessage[myindex]   = val & 0x00ff;
  145. }
  146. /* Returns an arg value from arg index 0-15
  147.  */
  148. u16  GetArgVal(int index)
  149. {
  150. int myindex = ARGINDEX + index * 2;
  151. return ((u16)theMessage[myindex] << 8) |
  152.        (u16)theMessage[myindex+1];
  153. }
  154. u8 *GetMessage(void)
  155. {
  156. return &theMessage[0];
  157. }
  158. u8 *GetData(void)
  159. {
  160. return &theMessage[DATAINDEX];
  161. }
  162. void SendI4ToHost(u16 cmd, long val)
  163. {
  164. StoreCmd(cmd);
  165. StoreArg(0, (u16)(val >> 16));
  166. StoreArg(1, (u16)(val & 0x0000ffff));
  167. }
  168. void SendI2ToHost(u16 cmd, u16 val)
  169. {
  170. StoreCmd(cmd);
  171. StoreArg(0, val);
  172. }
  173. void SendI1ToHost(u16 cmd, u8 val)
  174. {
  175. StoreCmd(cmd);
  176. theMessage[ARGINDEX] = val;
  177. }