dsp 28377在线升级 实例总结
使用dsp品台28377d来实现在线升级的功能。
方案 : 升级程序 + 应用程序
升级程序 : 主要的目的是将上位机发送过来的应用程序数据(ccs编译生成的.bin文件)烧写到指定位置,之后在跳转到应用程序执行。
应用程序 : 等待升级的程序
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------
升级代码段 :
flash_programming_cpu01.c 1 //######################################################################### 2 // FILE: flash_programming_cpu01.c 3 // TITLE: Flash Programming Example for F2837xD. 4 // 5 //! \addtogroup dual_example_list 6 //! <h1> Flash Programming </h1> 7 //! 8 //! This example demonstrates F021 Flash API usage. 9 // 10 //######################################################################### 11 // $TI Release: F2837xD Support Library v170 $ 12 // $Release Date: Mon Sep 21 16:52:10 CDT 2015 $ 13 // $Copyright: Copyright (C) 2013-2015 Texas Instruments Incorporated - 14 // http://www.ti.com/ ALL RIGHTS RESERVED $ 15 //######################################################################### 16 17 #include "F28x_Project.h" // Device Headerfile and Examples Include<span style="white-space:pre"> </span>File 18 #include "F2837xD_Ipc_drivers.h" 19 20 #include <string.h> 21 22 //Include Flash API example header file 23 #include "flash_programming_c28.h" 24 25 #define ENTRYADDR 0x88000 26 27 extern void lightflash(void); 28 29 //************************************************************************* 30 // FILE Flash API include file 31 //************************************************************************* 32 #include "F021_F2837xD_C28x.h" 33 34 //Data/Program Buffer used for testing the flash API functions 35 #define WORDS_IN_FLASH_BUFFER 3608 // Programming data buffer, words 36 37 uint16 Buffer[WORDS_IN_FLASH_BUFFER + 1]; 38 uint32 *Buffer32 = (uint32 *)Buffer; 39 40 #pragma DATA_SECTION(pbuffer , "PDATASAVE"); 41 uint16 pbuffer[WORDS_IN_FLASH_BUFFER]= { 42 #include "P_DATA.h" 43 }; 44 45 //************************************************************************* 46 // Prototype of the functions used in this example 47 //************************************************************************* 48 void Example_CallFlashAPI(void); 49 50 //************************************************************************* 51 // This is an example code demonstrating F021 Flash API usage. 52 // This code is in Flash 53 //************************************************************************* 54 void main(void) 55 { 56 // Step 1. Initialize System Control: 57 // Enable Peripheral Clocks 58 // This example function is found in the F2837xD_SysCtrl.c file. 59 InitSysCtrl(); 60 61 IPCBootCPU2(C1C2_BROM_BOOTMODE_BOOT_FROM_FLASH); 62 63 InitGpio(); 64 65 InitPieCtrl(); 66 67 IER = 0x0000; 68 IFR = 0x0000; 69 70 InitPieVectTable(); 71 72 EINT; // Enable Global interrupt INTM 73 74 // Jump to RAM and call the Flash API functions 75 Example_CallFlashAPI(); 76 77 DELAY_US(100000); 78 79 static void (*APPEntry)(void); 80 81 APPEntry = (void (*)(void))(ENTRYADDR); 82 83 ESTOP0; 84 85 (*APPEntry)(); 86 87 while(1); 88 89 } 90 91 //************************************************************************* 92 // Example_CallFlashAPI 93 // 94 // This function will interface to the flash API. 95 // Flash API functions used in this function are executed from RAM 96 //************************************************************************* 97 #pragma CODE_SECTION(Example_CallFlashAPI , "ramfuncs"); 98 void Example_CallFlashAPI(void) 99 { 100 uint32 u32Index = 0; 101 uint16 i = 0; 102 103 Fapi_StatusType oReturnCheck; 104 volatile Fapi_FlashStatusType oFlashStatus; 105 106 // Gain pump semaphore 107 SeizeFlashPump(); 108 109 EALLOW; 110 Flash0EccRegs.ECC_ENABLE.bit.ENABLE = 0x0; 111 EDIS; 112 113 EALLOW; 114 115 oReturnCheck = Fapi_initializeAPI(F021_CPU0_BASE_ADDRESS, 200);//for now keeping it out 116 117 if(oReturnCheck != Fapi_Status_Success) 118 { 119 // Check Flash API documentation for possible errors 120 while(1); 121 } 122 123 oReturnCheck = Fapi_setActiveFlashBank(Fapi_FlashBank0); 124 if(oReturnCheck != Fapi_Status_Success) 125 { 126 // Check Flash API documentation for possible errors 127 while(1); 128 } 129 130 oReturnCheck = Fapi_issueAsyncCommandWithAddress(Fapi_EraseSector, 131 (uint32 *)ENTRYADDR); 132 133 while (Fapi_checkFsmForReady() != Fapi_Status_FsmReady){} 134 135 // In this case just fill a buffer with data to program into the flash. 136 for(i=0, u32Index = ENTRYADDR; 137 138 (u32Index < (ENTRYADDR + WORDS_IN_FLASH_BUFFER))&& (oReturnCheck ==Fapi_Status_Success); 139 140 i=i+1, u32Index = u32Index + 1) 141 { 142 oReturnCheck = Fapi_issueProgrammingCommand((uint32 *)u32Index,&pbuffer[i], 143 1, 144 0, 145 0, 146 Fapi_DataOnly); 147 148 while(Fapi_checkFsmForReady() == Fapi_Status_FsmBusy); 149 150 if(oReturnCheck != Fapi_Status_Success) 151 { 152 // Check Flash API documentation for possible errors 153 while(1); 154 } 155 156 // Read FMSTAT register contents to know the status of FSM after 157 // program command for any debug 158 oFlashStatus = Fapi_getFsmStatus(); 159 } 160 161 // Leave control over flash pump 162 ReleaseFlashPump(); 163 }
第98行的函数 :
void Example_CallFlashAPI(void)
将数据烧写到地址为0x88000地址为首地址的flash内存当中。并且函数在ramfunc中运行,ramfunc和首地址的跳转在cmd文件中有体现
2837xD_FLASH_lnk_cpu1.cmd MEMORY 3 { 4 PAGE 0 : /* Program Memory */ 5 /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for dataallocation */ 6 /* BEGIN is used for the "boot to Flash" bootloader mode */ 78 BEGIN : origin = 0x080000, length = 0x000002 9 RAMM0 : origin = 0x000122, length = 0x0002DE 10 RAMD0 : origin = 0x00B000, length = 0x000800 11 RAMLS0 : origin = 0x008000, length = 0x000800 12 RAMLS1 : origin = 0x008800, length = 0x000800 13 RAMLS2 : origin = 0x009000, length = 0x000800 14 RAMLS3 : origin = 0x009800, length = 0x000800 15 RAMLS4 : origin = 0x00A000, length = 0x000800 16 RAMGS14 : origin = 0x01A000, length = 0x001000 17 RAMGS15 : origin = 0x01B000, length = 0x001000 18 RESET : origin = 0x3FFFC0, length = 0x000002 19 20 /* Flash sectors */ 21 FLASHA : origin = 0x080002, length = 0x001FFE /* on-chipFlash */ 22 FLASHB : origin = 0x082000, length = 0x002000 /* on-chipFlash */ 23 FLASHC : origin = 0x084000, length = 0x002000 /* on-chipFlash */ 24 FLASHD : origin = 0x086000, length = 0x002000 /* on-chipFlash */ 25 FLASHE : origin = 0x088000, length = 0x008000 /* on-chipFlash */ 26 FLASHF : origin = 0x090000, length = 0x008000 /* on-chipFlash */ 27 FLASHG : origin = 0x098000, length = 0x008000 /* on-chipFlash */ 28 FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chipFlash */ 29 FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chipFlash */ 30 FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chipFlash */ 31 FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chipFlash */ 32 FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chipFlash */ 33 FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chipFlash */ 34 FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chipFlash */ 36 PAGE 1 : /* Data Memory */ 37 /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for programallocation */ 38 39 BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part ofM0, BOOT rom will use this for stack */ 40 RAMM1 : origin = 0x000400, length = 0x000400 /* on-chipRAM block M1 */ 41 RAMD1 : origin = 0x00B800, length = 0x000800 42 43 RAMLS5 : origin = 0x00A800, length = 0x000800 44 45 RAMGS0 : origin = 0x00C000, length = 0x001000 46 RAMGS1 : origin = 0x00D000, length = 0x001000 47 RAMGS2 : origin = 0x00E000, length = 0x001000 48 RAMGS3 : origin = 0x00F000, length = 0x001000 49 RAMGS4 : origin = 0x010000, length = 0x001000 50 RAMGS5 : origin = 0x011000, length = 0x001000 51 RAMGS6 : origin = 0x012000, length = 0x001000 52 RAMGS7 : origin = 0x013000, length = 0x001000 53 RAMGS8 : origin = 0x014000, length = 0x001000 54 RAMGS9 : origin = 0x015000, length = 0x001000 55 RAMGS10 : origin = 0x016000, length = 0x001000 56 RAMGS11 : origin = 0x017000, length = 0x001000 57 RAMGS12 : origin = 0x018000, length = 0x001000 58 RAMGS13 : origin = 0x019000, length = 0x001000 59 60 61 CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 62 CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 63 } 64 65 66 SECTIONS 67 { 68 /* Allocate program areas: */ 69 .cinit : > FLASHB PAGE = 0, ALIGN(4) 70 .pinit : > FLASHB, PAGE = 0, ALIGN(4) 71 .text : >> FLASHB | FLASHC | FLASHD PAGE = 0,ALIGN(4) 72 codestart : > BEGIN PAGE = 0, ALIGN(4) 73 ramfuncs : LOAD = FLASHD, 74 RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, 75 LOAD_START(_RamfuncsLoadStart), 76 LOAD_SIZE(_RamfuncsLoadSize), 77 LOAD_END(_RamfuncsLoadEnd), 78 RUN_START(_RamfuncsRunStart), 79 RUN_SIZE(_RamfuncsRunSize), 80 RUN_END(_RamfuncsRunEnd), 81 PAGE = 0, ALIGN(4) 82 83 /* Allocate uninitalized data sections: */ 84 .stack : > RAMM1 PAGE = 1 85 .ebss : >> RAMLS5 | RAMGS0 | RAMGS1 PAGE = 1 86 .esysmem : > RAMLS5 PAGE = 1 87 88 /* Initalized sections go in Flash */ 89 .econst : >> FLASHF | FLASHG | FLASHH PAGE = 0,ALIGN(4) 90 .switch : > FLASHB PAGE = 0, ALIGN(4) 91 92 .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used,*/ 93 94 Filter_RegsFile : > RAMGS0, PAGE = 1 95 96 SHARERAMGS0 : > RAMGS0, PAGE = 1 97 SHARERAMGS1 : > RAMGS1, PAGE = 1 98 ramgs0 : > RAMGS0, PAGE = 1 99 ramgs1 : > RAMGS1, PAGE = 1 100 101 #ifdef __TI_COMPILER_VERSION 102 #if __TI_COMPILER_VERSION >= 15009000 103 .TI.ramfunc : {} LOAD = FLASHD, 104 RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, 105 LOAD_START(_RamfuncsLoadStart), 106 LOAD_SIZE(_RamfuncsLoadSize), 107 LOAD_END(_RamfuncsLoadEnd), 108 RUN_START(_RamfuncsRunStart), 109 RUN_SIZE(_RamfuncsRunSize), 110 RUN_END(_RamfuncsRunEnd), 111 PAGE = 0, ALIGN(4) 112 #endif 113 #endif 114 115 /* The following section definitions are required when using the IPC API Drivers */ 116 GROUP : > CPU1TOCPU2RAM, PAGE = 1 117 { 118 PUTBUFFER 119 PUTWRITEIDX 120 GETREADIDX 121 } 122 123 GROUP : > CPU2TOCPU1RAM, PAGE = 1 124 { 125 GETBUFFER : TYPE = DSECT 126 GETWRITEIDX : TYPE = DSECT 127 PUTREADIDX : TYPE = DSECT 128 } 129 130 /* The following section definition are for SDFM examples */ 131 Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111 132 Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222 133 Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333 134 Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444 135 Difference_RegsFile : >RAMGS5, PAGE = 1, fill=0x3333 136 PDATASAVE : > RAMGS0 , PAGE = 1 137 138 } 139 140 /* 141 //========================================================================= == 142 // End of file. 143 //========================================================================= == 144 */ 145
应用程序代码如下所示 :
blinky_cpu01.c 1 //######################################################################### 2 // FILE: blinky_cpu01.c 3 // TITLE: LED Blink Example for F2837xD. 4 // 5 //! \addtogroup cpu01_example_list 6 //! <h1> Blinky </h1> 7 //! 8 //! This example blinks LED X 9 // 10 //######################################################################### 11 // $TI Release: F2837xD Support Library v180 $ 12 // $Release Date: Fri Nov 6 16:19:46 CST 2015 $ 13 // $Copyright: Copyright (C) 2013-2015 Texas Instruments Incorporated - 14 // http://www.ti.com/ ALL RIGHTS RESERVED $ 15 //######################################################################### 16 17 #include "F28x_Project.h" // Device Headerfile and Examples IncludeFile 18 #include <string.h> 19 20 Uint16 test = 0; 21 22 //void setup_emif1_pinmux_async_16bit(Uint16 cpu_sel); 23 //*************************************************************** 24 //usart initial block 25 //*************************************************************** 26 void UsartInit(void) 27 { 28 GPIO_SetupPinMux(28, GPIO_MUX_CPU1, 1); 29 GPIO_SetupPinOptions(28, GPIO_INPUT, GPIO_PUSHPULL); 30 GPIO_SetupPinMux(29, GPIO_MUX_CPU1, 1); 31 GPIO_SetupPinOptions(29, GPIO_OUTPUT, GPIO_ASYNC); 32 33 //---- USART configuration ---------- 34 SciaRegs.SCIFFTX.all=0xE040; 35 SciaRegs.SCIFFRX.all=0x2044; 36 SciaRegs.SCIFFCT.all=0x0; 37 38 SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback 39 // No parity,8 char bits, 40 // async mode, idle-line protocol 41 SciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK, 42 // Disable RX ERR, SLEEP, TXWAKE 43 SciaRegs.SCICTL2.all =0x0003; 44 SciaRegs.SCICTL2.bit.TXINTENA =1; 45 SciaRegs.SCICTL2.bit.RXBKINTENA =1; 46 SciaRegs.SCIHBAUD.all =0x0002; Page 1blinky_cpu01.c 47 SciaRegs.SCILBAUD.all =0x008B; 48 // SciaRegs.SCICCR.bit.LOOPBKENA =1; // Enable loop back 49 SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset 50 51 //-DMA configuration 52 } 53 54 //*************************************************************** 55 //usart UsartSendData block 56 //just fit for 8 bit data to send 57 //*************************************************************** 58 void UsartSendData(uint16_t data_in) 59 { 60 SciaRegs.SCITXBUF.all = data_in; 61 while(SciaRegs.SCIFFTX.bit.TXFFST !=0); // wait for RRDY/RXFFST =1 fordata available in FIFO 62 } 63 64 65 void main(void) 66 { 67 InitSysCtrl(); 68 69 InitGpio(); 70 71 DINT; 72 73 InitPieCtrl(); 74 75 // Disable CPU interrupts and clear all CPU interrupt flags: 76 IER = 0x0000; 77 IFR = 0x0000; 78 79 InitPieVectTable(); 80 81 EINT; // Enable Global interrupt INTM 82 83 UsartInit(); 84 85 86 EALLOW; 87 GpioCtrlRegs.GPAMUX1.bit.GPIO10 = 0; 88 GpioCtrlRegs.GPADIR.bit.GPIO10 = 1; 89 EDIS; 90 91 GpioDataRegs.GPADAT.bit.GPIO10 = 0; 92 93 while(1){ 94 95 GpioDataRegs.GPADAT.bit.GPIO10 = 0; 96 97 DELAY_US(50000); 98 99 GpioDataRegs.GPADAT.bit.GPIO10 = 1; 100 101 DELAY_US(50000); 102 103 if(test == 255) test = 0; 104 105 test = test + 1; 106 107 UsartSendData(test); 108 109 DELAY_US(1000); 110 } 123 } 124
应用程序在调试的时候出现了一个问题 :
就是在在线调试的过程中,从升级程序跳转到应用程序的时候:
static void (*APPEntry)(void); 80 81 APPEntry = (void (*)(void))(ENTRYADDR); 82 83 ESTOP0; 84 85 (*APPEntry)();
进入应用程序,应用程序总是会在一些地方跳转到异常中断,最后找问题找到是在应用程序中的IntiFlash()函数,屏蔽掉该函数就正常啦。
IntiFlash()函数是嵌入到InitSysCtrl();中,就是应用程序最开始调用的那个函数。
2837xD_FLASH_lnk_cpu1.cmd 12 MEMORY 3 { 4 PAGE 0 : /* Program Memory */ 5 /* Memory (RAM/FLASH) blocks can be moved to PAGE1 for data allocation */ 6 /* BEGIN is used for the "boot to Flash" bootloader mode */ 78 BEGIN : origin = 0x088000, length = 0x000002 9 RAMM0 : origin = 0x000122, length = 0x0002DE 10 RAMD0 : origin = 0x00B000, length = 0x000800 11 RAMLS0 : origin = 0x008000, length = 0x000800 12 RAMLS1 : origin = 0x008800, length = 0x000800 13 RAMLS2 : origin = 0x009000, length = 0x000800 14 RAMLS3 : origin = 0x009800, length = 0x000800 15 RAMLS4 : origin = 0x00A000, length = 0x000800 16 RAMGS14 : origin = 0x01A000, length = 0x001000 17 RAMGS15 : origin = 0x01B000, length = 0x001000 18 RESET : origin = 0x3FFFC0, length = 0x000002 19 20 /* Flash sectors */ 21 FLASHA : origin = 0x080002, length = 0x001FFE /* on-chipFlash */ 22 FLASHB : origin = 0x082000, length = 0x002000 /* on-chipFlash */ 23 FLASHC : origin = 0x084000, length = 0x002000 /* on-chipFlash */ 24 FLASHD : origin = 0x086000, length = 0x002000 /* on-chipFlash */ 25 FLASHE : origin = 0x088002, length = 0x007FFE /* on-chipFlash */ 26 FLASHF : origin = 0x090000, length = 0x008000 /* on-chipFlash */ 27 FLASHG : origin = 0x098000, length = 0x008000 /* on-chipFlash */ 28 FLASHH : origin = 0x0A0000, length = 0x008000 /* on-chipFlash */ 29 FLASHI : origin = 0x0A8000, length = 0x008000 /* on-chipFlash */ 30 FLASHJ : origin = 0x0B0000, length = 0x008000 /* on-chipFlash */ 31 FLASHK : origin = 0x0B8000, length = 0x002000 /* on-chipFlash */ 32 FLASHL : origin = 0x0BA000, length = 0x002000 /* on-chipFlash */ 33 FLASHM : origin = 0x0BC000, length = 0x002000 /* on-chipFlash */ 34 FLASHN : origin = 0x0BE000, length = 0x002000 /* on-chipFlash */ 35 Page 12837xD_FLASH_lnk_cpu1.cmd 36 PAGE 1 : /* Data Memory */ 37 /* Memory (RAM/FLASH) blocks can be moved to PAGE0 for programallocation */ 38 39 BOOT_RSVD : origin = 0x000002, length = 0x000120 /* Part ofM0, BOOT rom will use this for stack */ 40 RAMM1 : origin = 0x000400, length = 0x000400 /* on-chipRAM block M1 */ 41 RAMD1 : origin = 0x00B800, length = 0x000800 42 43 RAMLS5 : origin = 0x00A800, length = 0x000800 44 45 RAMGS0 : origin = 0x00C000, length = 0x001000 46 RAMGS1 : origin = 0x00D000, length = 0x001000 47 RAMGS2 : origin = 0x00E000, length = 0x001000 48 RAMGS3 : origin = 0x00F000, length = 0x001000 49 RAMGS4 : origin = 0x010000, length = 0x001000 50 RAMGS5 : origin = 0x011000, length = 0x001000 51 RAMGS6 : origin = 0x012000, length = 0x001000 52 RAMGS7 : origin = 0x013000, length = 0x001000 53 RAMGS8 : origin = 0x014000, length = 0x001000 54 RAMGS9 : origin = 0x015000, length = 0x001000 55 RAMGS10 : origin = 0x016000, length = 0x001000 56 RAMGS11 : origin = 0x017000, length = 0x001000 57 RAMGS12 : origin = 0x018000, length = 0x001000 58 RAMGS13 : origin = 0x019000, length = 0x001000 59 60 61 CPU2TOCPU1RAM : origin = 0x03F800, length = 0x000400 62 CPU1TOCPU2RAM : origin = 0x03FC00, length = 0x000400 63 } 64 65 66 SECTIONS 67 { 68 /* Allocate program areas: */ 69 .cinit : > FLASHE PAGE = 0, ALIGN(4) 70 .pinit : > FLASHE, PAGE = 0, ALIGN(4) 71 .text : >> FLASHE PAGE = 0, ALIGN(4) 72 codestart : > BEGIN PAGE = 0, ALIGN(4) 73 ramfuncs : LOAD = FLASHE, 74 RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, 75 LOAD_START(_RamfuncsLoadStart), 76 LOAD_SIZE(_RamfuncsLoadSize), 77 LOAD_END(_RamfuncsLoadEnd), 78 RUN_START(_RamfuncsRunStart), 79 RUN_SIZE(_RamfuncsRunSize), 80 RUN_END(_RamfuncsRunEnd), 81 PAGE = 0, ALIGN(4) 82 83 /* Allocate uninitalized data sections: */ 84 .stack : > RAMM1 PAGE = 1 85 .ebss : >> RAMLS5 | RAMGS0 | RAMGS1 PAGE = 1 86 .esysmem : > RAMLS5 PAGE = 1 87 88 /* Initalized sections go in Flash */ 89 .econst : >> FLASHE PAGE = 0, ALIGN(4) 90 .switch : > FLASHE PAGE = 0, ALIGN(4) 91 92 .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used,*/ 93 94 Filter_RegsFile : > RAMGS0, PAGE = 1 95 96 SHARERAMGS0 : > RAMGS0, PAGE = 1 97 SHARERAMGS1 : > RAMGS1, PAGE = 1 98 ramgs0 : > RAMGS0, PAGE = 1 99 ramgs1 : > RAMGS1, PAGE = 1 100 101 #ifdef __TI_COMPILER_VERSION 102 #if __TI_COMPILER_VERSION >= 15009000 103 .TI.ramfunc : {} LOAD = FLASHE, 104 RUN = RAMLS0 | RAMLS1 | RAMLS2 |RAMLS3, 105 LOAD_START(_RamfuncsLoadStart), 106 LOAD_SIZE(_RamfuncsLoadSize), 107 LOAD_END(_RamfuncsLoadEnd), 108 RUN_START(_RamfuncsRunStart), 109 RUN_SIZE(_RamfuncsRunSize), 110 RUN_END(_RamfuncsRunEnd), 111 PAGE = 0, ALIGN(4) 112 #endif 113 #endif 114 115 /* The following section definitions are required when using the IPC APIDrivers */ 116 GROUP : > CPU1TOCPU2RAM, PAGE = 1 117 { 118 PUTBUFFER 119 PUTWRITEIDX 120 GETREADIDX 121 } 122 123 GROUP : > CPU2TOCPU1RAM, PAGE = 1 124 { 125 GETBUFFER : TYPE = DSECT 126 GETWRITEIDX : TYPE = DSECT 127 PUTREADIDX : TYPE = DSECT 128 } 129 130 /* The following section definition are for SDFM examples */ 131 Filter1_RegsFile : > RAMGS1, PAGE = 1, fill=0x1111 132 Filter2_RegsFile : > RAMGS2, PAGE = 1, fill=0x2222 133 Filter3_RegsFile : > RAMGS3, PAGE = 1, fill=0x3333 134 Filter4_RegsFile : > RAMGS4, PAGE = 1, fill=0x4444 135 Difference_RegsFile : >RAMGS5, PAGE = 1, fill=0x3333 136 137 } 138 139 /* 140 //========================================================================= == 141 // End of file. 142 //========================================================================= == 143 */ 144
升级程序完成,可用