refractor device composite example
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
<!DOCTYPE CrossStudio_Session_File>
|
||||
<session>
|
||||
<Bookmarks/>
|
||||
<Breakpoints groups="Breakpoints" active_group="Breakpoints"/>
|
||||
<ExecutionProfileWindow/>
|
||||
<FrameBufferWindow>
|
||||
<FrameBufferWindow bufferHeight="-1" addressSpace="" addressText="" bufferWidth="-1"/>
|
||||
</FrameBufferWindow>
|
||||
<Memory1>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Hello World" radix="16" sizeText="" addressText=""/>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Nordic nrf5x" radix="16" sizeText="" addressText=""/>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Microchip samd51" radix="16" sizeText="" addressText=""/>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Microchip SAMD21" radix="16" sizeText="" addressText=""/>
|
||||
</Memory1>
|
||||
<Memory2>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Hello World" radix="16" sizeText="" addressText=""/>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Nordic nrf5x" radix="16" sizeText="" addressText=""/>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Microchip samd51" radix="16" sizeText="" addressText=""/>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Microchip SAMD21" radix="16" sizeText="" addressText=""/>
|
||||
</Memory2>
|
||||
<Memory3>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Hello World" radix="16" sizeText="" addressText=""/>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Nordic nrf5x" radix="16" sizeText="" addressText=""/>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Microchip samd51" radix="16" sizeText="" addressText=""/>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Microchip SAMD21" radix="16" sizeText="" addressText=""/>
|
||||
</Memory3>
|
||||
<Memory4>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Hello World" radix="16" sizeText="" addressText=""/>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Nordic nrf5x" radix="16" sizeText="" addressText=""/>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Microchip samd51" radix="16" sizeText="" addressText=""/>
|
||||
<MemoryWindow addressSpace="" dataSize="1" autoEvaluate="0" viewMode="0" addressOrder="0" columnsText="" refreshPeriod="0" name="Microchip SAMD21" radix="16" sizeText="" addressText=""/>
|
||||
</Memory4>
|
||||
<Project>
|
||||
<ProjectSessionItem path="device_composite"/>
|
||||
<ProjectSessionItem path="device_composite;nrf5x"/>
|
||||
<ProjectSessionItem path="device_composite;nrf5x;nrf5x"/>
|
||||
<ProjectSessionItem path="device_composite;samd21"/>
|
||||
<ProjectSessionItem path="device_composite;samd21;samd21"/>
|
||||
<ProjectSessionItem path="device_composite;samd51"/>
|
||||
<ProjectSessionItem path="device_composite;samd51;samd51"/>
|
||||
<ProjectSessionItem path="device_composite;samd51;samd51;hw"/>
|
||||
<ProjectSessionItem path="device_composite;samd51;samd51;src"/>
|
||||
</Project>
|
||||
<Register1>
|
||||
<RegisterWindow visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" binaryNodes="" asciiNodes="" openNodes="CPU - Current Context" name="Hello World" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
<RegisterWindow visibleNodes="USBD/TASKS_STARTEPIN[0];USBD/TASKS_STARTEPIN[1];USBD/TASKS_STARTEPIN[2];USBD/TASKS_STARTEPIN[3];USBD/TASKS_STARTEPIN[4];USBD/TASKS_STARTEPIN[5];USBD/TASKS_STARTEPIN[6];USBD/TASKS_STARTEPIN[7];USBD/TASKS_STARTISOIN;USBD/TASKS_STARTEPOUT[0];USBD/TASKS_STARTEPOUT[1];USBD/TASKS_STARTEPOUT[2];USBD/TASKS_STARTEPOUT[3];USBD/TASKS_STARTEPOUT[4];USBD/TASKS_STARTEPOUT[5];USBD/TASKS_STARTEPOUT[6];USBD/TASKS_STARTEPOUT[7];USBD/TASKS_STARTISOOUT;USBD/TASKS_EP0RCVOUT;USBD/TASKS_EP0STATUS;USBD/TASKS_EP0STALL;USBD/TASKS_DPDMDRIVE;USBD/TASKS_DPDMNODRIVE;USBD/EVENTS_USBRESET;USBD/EVENTS_STARTED;USBD/EVENTS_ENDEPIN[0];USBD/EVENTS_ENDEPIN[1];USBD/EVENTS_ENDEPIN[2];USBD/EVENTS_ENDEPIN[3];USBD/EVENTS_ENDEPIN[4];USBD/EVENTS_ENDEPIN[5];USBD/EVENTS_ENDEPIN[6];USBD/EVENTS_ENDEPIN[7];USBD/EVENTS_EP0DATADONE;USBD/EVENTS_ENDISOIN;USBD/EVENTS_ENDEPOUT[0];USBD/EVENTS_ENDEPOUT[1];USBD/EVENTS_ENDEPOUT[2];USBD/EVENTS_ENDEPOUT[3];USBD/EVENTS_ENDEPOUT[4];USBD/EVENTS_ENDEPOUT[5];USBD/EVENTS_ENDEPOUT[6];USBD/EVENTS_ENDEPOUT[7];USBD/EVENTS_ENDISOOUT;USBD/EVENTS_SOF;USBD/EVENTS_USBEVENT;USBD/EVENTS_EP0SETUP;USBD/EVENTS_EPDATA;USBD/EVENTS_ACCESSFAULT;USBD/SHORTS;USBD/INTEN;USBD/INTENSET;USBD/INTENCLR;USBD/EVENTCAUSE;USBD/BUSSTATE;USBD/EPSTATUS;USBD/EPDATASTATUS;USBD/USBADDR;USBD/BMREQUESTTYPE;USBD/BREQUEST;USBD/WVALUEL;USBD/WVALUEH;USBD/WINDEXL;USBD/WINDEXH;USBD/WLENGTHL;USBD/WLENGTHH;USBD/ENABLE;USBD/USBPULLUP;USBD/DPDMVALUE;USBD/DTOGGLE;USBD/EPINEN;USBD/EPOUTEN;USBD/EPSTALL;USBD/ISOSPLIT;USBD/FRAMECNTR;USBD/LOWPOWER;USBD/ISOINCONFIG;USBD/HALTED.EPIN[0];USBD/HALTED.EPIN[1];USBD/HALTED.EPIN[2];USBD/HALTED.EPIN[3];USBD/HALTED.EPIN[4];USBD/HALTED.EPIN[5];USBD/HALTED.EPIN[6];USBD/HALTED.EPIN[7];USBD/HALTED.EPOUT[0];USBD/HALTED.EPOUT[1];USBD/HALTED.EPOUT[2];USBD/HALTED.EPOUT[3];USBD/HALTED.EPOUT[4];USBD/HALTED.EPOUT[5];USBD/HALTED.EPOUT[6];USBD/HALTED.EPOUT[7];USBD/SIZE.EPOUT[0];USBD/SIZE.EPOUT[1];USBD/SIZE.EPOUT[2];USBD/SIZE.EPOUT[3];USBD/SIZE.EPOUT[4];USBD/SIZE.EPOUT[5];USBD/SIZE.EPOUT[6];USBD/SIZE.EPOUT[7];USBD/SIZE.ISOOUT;USBD/EPIN[0].PTR;USBD/EPIN[0].MAXCNT;USBD/EPIN[0].AMOUNT;USBD/EPIN[1].PTR;USBD/EPIN[1].MAXCNT;USBD/EPIN[1].AMOUNT;USBD/EPIN[2].PTR;USBD/EPIN[2].MAXCNT;USBD/EPIN[2].AMOUNT;USBD/EPIN[3].PTR;USBD/EPIN[3].MAXCNT;USBD/EPIN[3].AMOUNT;USBD/EPIN[4].PTR;USBD/EPIN[4].MAXCNT;USBD/EPIN[4].AMOUNT;USBD/EPIN[5].PTR;USBD/EPIN[5].MAXCNT;USBD/EPIN[5].AMOUNT;USBD/EPIN[6].PTR;USBD/EPIN[6].MAXCNT;USBD/EPIN[6].AMOUNT;USBD/EPIN[7].PTR;USBD/EPIN[7].MAXCNT;USBD/EPIN[7].AMOUNT;USBD/ISOIN.PTR;USBD/ISOIN.MAXCNT;USBD/ISOIN.AMOUNT;USBD/EPOUT[0].PTR;USBD/EPOUT[0].MAXCNT;USBD/EPOUT[0].AMOUNT;USBD/EPOUT[1].PTR;USBD/EPOUT[1].MAXCNT;USBD/EPOUT[1].AMOUNT;USBD/EPOUT[2].PTR;USBD/EPOUT[2].MAXCNT;USBD/EPOUT[2].AMOUNT;USBD/EPOUT[3].PTR;USBD/EPOUT[3].MAXCNT;USBD/EPOUT[3].AMOUNT;USBD/EPOUT[4].PTR;USBD/EPOUT[4].MAXCNT;USBD/EPOUT[4].AMOUNT;USBD/EPOUT[5].PTR;USBD/EPOUT[5].MAXCNT;USBD/EPOUT[5].AMOUNT;USBD/EPOUT[6].PTR;USBD/EPOUT[6].MAXCNT;USBD/EPOUT[6].AMOUNT;USBD/EPOUT[7].PTR;USBD/EPOUT[7].MAXCNT;USBD/EPOUT[7].AMOUNT;USBD/ISOOUT.PTR;USBD/ISOOUT.MAXCNT;USBD/ISOOUT.AMOUNT" binaryNodes="" asciiNodes="" openNodes="USBD;USBD/EPSTATUS;USBD/BMREQUESTTYPE" name="Nordic nrf5x" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
<RegisterWindow visibleNodes="USB (DEVICE)/USB_CTRLA;USB (DEVICE)/USB_SYNCBUSY;USB (DEVICE)/USB_QOSCTRL;USB (DEVICE)/USB_CTRLB;USB (DEVICE)/USB_DADD;USB (DEVICE)/USB_STATUS;USB (DEVICE)/USB_FSMSTATUS;USB (DEVICE)/USB_FNUM;USB (DEVICE)/USB_INTENCLR;USB (DEVICE)/USB_INTENSET;USB (DEVICE)/USB_INTFLAG;USB (DEVICE)/USB_EPINTSMRY;USB (DEVICE)/USB_DESCADD;USB (DEVICE)/USB_PADCAL;USB (DEVICE)/USB_EPCFG0;USB (DEVICE)/USB_EPCFG1;USB (DEVICE)/USB_EPCFG2;USB (DEVICE)/USB_EPCFG3;USB (DEVICE)/USB_EPCFG4;USB (DEVICE)/USB_EPCFG5;USB (DEVICE)/USB_EPCFG6;USB (DEVICE)/USB_EPCFG7;USB (DEVICE)/USB_EPSTATUSCLR0;USB (DEVICE)/USB_EPSTATUSCLR1;USB (DEVICE)/USB_EPSTATUSCLR2;USB (DEVICE)/USB_EPSTATUSCLR3;USB (DEVICE)/USB_EPSTATUSCLR4;USB (DEVICE)/USB_EPSTATUSCLR5;USB (DEVICE)/USB_EPSTATUSCLR6;USB (DEVICE)/USB_EPSTATUSCLR7;USB (DEVICE)/USB_EPSTATUSSET0;USB (DEVICE)/USB_EPSTATUSSET1;USB (DEVICE)/USB_EPSTATUSSET2;USB (DEVICE)/USB_EPSTATUSSET3;USB (DEVICE)/USB_EPSTATUSSET4;USB (DEVICE)/USB_EPSTATUSSET5;USB (DEVICE)/USB_EPSTATUSSET6;USB (DEVICE)/USB_EPSTATUSSET7;USB (DEVICE)/USB_EPSTATUS0;USB (DEVICE)/USB_EPSTATUS1;USB (DEVICE)/USB_EPSTATUS2;USB (DEVICE)/USB_EPSTATUS3;USB (DEVICE)/USB_EPSTATUS4;USB (DEVICE)/USB_EPSTATUS5;USB (DEVICE)/USB_EPSTATUS6;USB (DEVICE)/USB_EPSTATUS7;USB (DEVICE)/USB_EPINTFLAG0;USB (DEVICE)/USB_EPINTFLAG1;USB (DEVICE)/USB_EPINTFLAG2;USB (DEVICE)/USB_EPINTFLAG3;USB (DEVICE)/USB_EPINTFLAG4;USB (DEVICE)/USB_EPINTFLAG5;USB (DEVICE)/USB_EPINTFLAG6;USB (DEVICE)/USB_EPINTFLAG7;USB (DEVICE)/USB_EPINTENCLR0;USB (DEVICE)/USB_EPINTENCLR1;USB (DEVICE)/USB_EPINTENCLR2;USB (DEVICE)/USB_EPINTENCLR3;USB (DEVICE)/USB_EPINTENCLR4;USB (DEVICE)/USB_EPINTENCLR5;USB (DEVICE)/USB_EPINTENCLR6;USB (DEVICE)/USB_EPINTENCLR7;USB (DEVICE)/USB_EPINTENSET0;USB (DEVICE)/USB_EPINTENSET1;USB (DEVICE)/USB_EPINTENSET2;USB (DEVICE)/USB_EPINTENSET3;USB (DEVICE)/USB_EPINTENSET4;USB (DEVICE)/USB_EPINTENSET5;USB (DEVICE)/USB_EPINTENSET6;USB (DEVICE)/USB_EPINTENSET7" binaryNodes="" asciiNodes="" openNodes="USB (DEVICE);USB (DEVICE)/USB_EPSTATUS0" name="Microchip samd51" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
<RegisterWindow visibleNodes="USB (DEVICE)/USB_CTRLA;USB (DEVICE)/USB_CTRLB;USB (DEVICE)/USB_DADD;USB (DEVICE)/USB_DESCADD;USB (DEVICE)/USB_EPCFG0;USB (DEVICE)/USB_EPCFG1;USB (DEVICE)/USB_EPCFG2;USB (DEVICE)/USB_EPCFG3;USB (DEVICE)/USB_EPCFG4;USB (DEVICE)/USB_EPCFG5;USB (DEVICE)/USB_EPCFG6;USB (DEVICE)/USB_EPCFG7;USB (DEVICE)/USB_EPINTENCLR0;USB (DEVICE)/USB_EPINTENCLR1;USB (DEVICE)/USB_EPINTENCLR2;USB (DEVICE)/USB_EPINTENCLR3;USB (DEVICE)/USB_EPINTENCLR4;USB (DEVICE)/USB_EPINTENCLR5;USB (DEVICE)/USB_EPINTENCLR6;USB (DEVICE)/USB_EPINTENCLR7;USB (DEVICE)/USB_EPINTENSET0;USB (DEVICE)/USB_EPINTENSET1;USB (DEVICE)/USB_EPINTENSET2;USB (DEVICE)/USB_EPINTENSET3;USB (DEVICE)/USB_EPINTENSET4;USB (DEVICE)/USB_EPINTENSET5;USB (DEVICE)/USB_EPINTENSET6;USB (DEVICE)/USB_EPINTENSET7;USB (DEVICE)/USB_EPINTFLAG0;USB (DEVICE)/USB_EPINTFLAG1;USB (DEVICE)/USB_EPINTFLAG2;USB (DEVICE)/USB_EPINTFLAG3;USB (DEVICE)/USB_EPINTFLAG4;USB (DEVICE)/USB_EPINTFLAG5;USB (DEVICE)/USB_EPINTFLAG6;USB (DEVICE)/USB_EPINTFLAG7;USB (DEVICE)/USB_EPINTSMRY;USB (DEVICE)/USB_EPSTATUS0;USB (DEVICE)/USB_EPSTATUS1;USB (DEVICE)/USB_EPSTATUS2;USB (DEVICE)/USB_EPSTATUS3;USB (DEVICE)/USB_EPSTATUS4;USB (DEVICE)/USB_EPSTATUS5;USB (DEVICE)/USB_EPSTATUS6;USB (DEVICE)/USB_EPSTATUS7;USB (DEVICE)/USB_EPSTATUSCLR0;USB (DEVICE)/USB_EPSTATUSCLR1;USB (DEVICE)/USB_EPSTATUSCLR2;USB (DEVICE)/USB_EPSTATUSCLR3;USB (DEVICE)/USB_EPSTATUSCLR4;USB (DEVICE)/USB_EPSTATUSCLR5;USB (DEVICE)/USB_EPSTATUSCLR6;USB (DEVICE)/USB_EPSTATUSCLR7;USB (DEVICE)/USB_EPSTATUSSET0;USB (DEVICE)/USB_EPSTATUSSET1;USB (DEVICE)/USB_EPSTATUSSET2;USB (DEVICE)/USB_EPSTATUSSET3;USB (DEVICE)/USB_EPSTATUSSET4;USB (DEVICE)/USB_EPSTATUSSET5;USB (DEVICE)/USB_EPSTATUSSET6;USB (DEVICE)/USB_EPSTATUSSET7;USB (DEVICE)/USB_FNUM;USB (DEVICE)/USB_FSMSTATUS;USB (DEVICE)/USB_INTENCLR;USB (DEVICE)/USB_INTENSET;USB (DEVICE)/USB_INTFLAG;USB (DEVICE)/USB_PADCAL;USB (DEVICE)/USB_QOSCTRL;USB (DEVICE)/USB_STATUS;USB (DEVICE)/USB_SYNCBUSY" binaryNodes="" asciiNodes="" openNodes="USB (DEVICE);USB (DEVICE)/USB_CTRLA;USB (DEVICE)/USB_CTRLB;USB (DEVICE)/USB_DADD;USB (DEVICE)/USB_EPCFG0;USB (DEVICE)/USB_EPINTENCLR0;USB (DEVICE)/USB_EPSTATUS0;USB (DEVICE)/USB_STATUS" name="Microchip SAMD21" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
</Register1>
|
||||
<Register2>
|
||||
<RegisterWindow visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" binaryNodes="" asciiNodes="" openNodes="CPU - Current Context" name="Hello World" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
<RegisterWindow visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" binaryNodes="" asciiNodes="" openNodes="CPU - Current Context" name="Nordic nrf5x" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
<RegisterWindow visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" binaryNodes="" asciiNodes="" openNodes="CPU - Current Context" name="Microchip samd51" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
<RegisterWindow visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" binaryNodes="" asciiNodes="" openNodes="CPU - Current Context" name="Microchip SAMD21" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
</Register2>
|
||||
<Register3>
|
||||
<RegisterWindow visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" binaryNodes="" asciiNodes="" openNodes="CPU - Current Context" name="Hello World" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
<RegisterWindow visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" binaryNodes="" asciiNodes="" openNodes="CPU - Current Context" name="Nordic nrf5x" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
<RegisterWindow visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" binaryNodes="" asciiNodes="" openNodes="CPU - Current Context" name="Microchip samd51" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
<RegisterWindow visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" binaryNodes="" asciiNodes="" openNodes="CPU - Current Context" name="Microchip SAMD21" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
</Register3>
|
||||
<Register4>
|
||||
<RegisterWindow visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" binaryNodes="" asciiNodes="" openNodes="CPU - Current Context" name="Hello World" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
<RegisterWindow visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" binaryNodes="" asciiNodes="" openNodes="CPU - Current Context" name="Nordic nrf5x" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
<RegisterWindow visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" binaryNodes="" asciiNodes="" openNodes="CPU - Current Context" name="Microchip samd51" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
<RegisterWindow visibleNodes="CPU - Current Context/r0;CPU - Current Context/r1;CPU - Current Context/r2;CPU - Current Context/r3;CPU - Current Context/r4;CPU - Current Context/r5;CPU - Current Context/r6;CPU - Current Context/r7;CPU - Current Context/r8;CPU - Current Context/r9;CPU - Current Context/r10;CPU - Current Context/r11;CPU - Current Context/r12;CPU - Current Context/sp(r13);CPU - Current Context/lr(r14);CPU - Current Context/pc(r15);CPU - Current Context/apsr;CPU/r0;CPU/r1;CPU/r2;CPU/r3;CPU/r4;CPU/r5;CPU/r6;CPU/r7;CPU/r8;CPU/r9;CPU/r10;CPU/r11;CPU/r12;CPU/sp(r13);CPU/lr(r14);CPU/pc(r15);CPU/xpsr;CPU/msp;CPU/psp;CPU/cfbp" binaryNodes="" asciiNodes="" openNodes="CPU - Current Context" name="Microchip SAMD21" decimalNodes="" octalNodes="" unsignedNodes=""/>
|
||||
</Register4>
|
||||
<Threads>
|
||||
<ThreadsWindow showLists=""/>
|
||||
</Threads>
|
||||
<TraceWindow>
|
||||
<Trace enabled="Yes"/>
|
||||
</TraceWindow>
|
||||
<Watch1>
|
||||
<Watches active="1" update="Never">
|
||||
<Watchpoint numelements="0" expression="_usbd_q" evalMode="1" name="_usbd_q" radix="-1" linenumber="0" filename="../ses" list=""/>
|
||||
<Watchpoint numelements="0" expression="_dcd" evalMode="0" name="_dcd" radix="-1" linenumber="0" filename="../ses" list=""/>
|
||||
<Watchpoint numelements="0" expression="_control_state" evalMode="0" name="_control_state" radix="-1" linenumber="0" filename="../ses" list=""/>
|
||||
<Watchpoint numelements="0" expression="_cdcd_itf[0]" evalMode="0" name="_cdcd_itf[0]" radix="-1" linenumber="0" filename="../ses" list=""/>
|
||||
</Watches>
|
||||
</Watch1>
|
||||
<Watch2>
|
||||
<Watches active="0" update="Never"/>
|
||||
</Watch2>
|
||||
<Watch3>
|
||||
<Watches active="0" update="Never"/>
|
||||
</Watch3>
|
||||
<Watch4>
|
||||
<Watches active="0" update="Never"/>
|
||||
</Watch4>
|
||||
<Files>
|
||||
<SessionOpenFile windowGroup="DockEditLeft" x="29" y="49" useTextEdit="1" useBinaryEdit="0" left="0" path="../src/main.c" selected="1" top="23" codecName="Default"/>
|
||||
</Files>
|
||||
<ARMCrossStudioWindow activeProject="samd51(samd51)" fileDialogDefaultFilter="*.c" autoConnectTarget="J-Link" buildConfiguration="Metro M4 Express" debugSearchFileMap="" fileDialogInitialDirectory="/home/hathach/Dropbox/tinyusb/workspace/tinyusb/hw/mcu/microchip/samd/asf4/samd21/hpl/sysctrl" debugSearchPath="" autoConnectCapabilities="3199"/>
|
||||
</session>
|
||||
@@ -0,0 +1,37 @@
|
||||
<!DOCTYPE Linker_Placement_File>
|
||||
<Root name="Flash Section Placement">
|
||||
<MemorySegment name="$(FLASH_NAME:FLASH)">
|
||||
<ProgramSection alignment="0x100" load="Yes" name=".vectors" start="$(FLASH_START:)" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".init" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".init_rodata" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".text" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".dtors" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".ctors" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".rodata" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".ARM.exidx" address_symbol="__exidx_start" end_symbol="__exidx_end" />
|
||||
<ProgramSection alignment="4" load="Yes" runin=".fast_run" name=".fast" />
|
||||
<ProgramSection alignment="4" load="Yes" runin=".data_run" name=".data" />
|
||||
<ProgramSection alignment="4" load="Yes" runin=".tdata_run" name=".tdata" />
|
||||
</MemorySegment>
|
||||
<MemorySegment name="$(RAM_NAME:RAM);SRAM">
|
||||
<ProgramSection alignment="0x100" load="No" name=".vectors_ram" start="$(RAM_START:$(SRAM_START:))" />
|
||||
<ProgramSection alignment="4" load="No" name=".fast_run" />
|
||||
<ProgramSection alignment="4" load="No" name=".data_run" />
|
||||
<ProgramSection alignment="4" load="No" name=".tdata_run" />
|
||||
<ProgramSection alignment="4" load="No" name=".bss" />
|
||||
<ProgramSection alignment="4" load="No" name=".tbss" />
|
||||
<ProgramSection alignment="4" load="No" name=".non_init" />
|
||||
<ProgramSection alignment="4" size="__HEAPSIZE__" load="No" name=".heap" />
|
||||
<ProgramSection alignment="8" size="__STACKSIZE__" load="No" place_from_segment_end="Yes" name=".stack" />
|
||||
<ProgramSection alignment="8" size="__STACKSIZE_PROCESS__" load="No" name=".stack_process" />
|
||||
</MemorySegment>
|
||||
<MemorySegment name="$(FLASH2_NAME:FLASH2)">
|
||||
<ProgramSection alignment="4" load="Yes" name=".text2" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".rodata2" />
|
||||
<ProgramSection alignment="4" load="Yes" runin=".data2_run" name=".data2" />
|
||||
</MemorySegment>
|
||||
<MemorySegment name="$(RAM2_NAME:RAM2)">
|
||||
<ProgramSection alignment="4" load="No" name=".data2_run" />
|
||||
<ProgramSection alignment="4" load="No" name=".bss2" />
|
||||
</MemorySegment>
|
||||
</Root>
|
||||
@@ -0,0 +1,5 @@
|
||||
<!DOCTYPE Board_Memory_Definition_File>
|
||||
<root name="nRF52840_xxAA">
|
||||
<MemorySegment name="FLASH" start="0x00000000" size="0x00100000" access="ReadOnly" />
|
||||
<MemorySegment name="RAM" start="0x20000000" size="0x00040000" access="Read/Write" />
|
||||
</root>
|
||||
@@ -0,0 +1,19 @@
|
||||
/*****************************************************************************
|
||||
* SEGGER Microcontroller GmbH & Co. KG *
|
||||
* Solutions for real time microcontroller applications *
|
||||
*****************************************************************************
|
||||
* *
|
||||
* (c) 2017 SEGGER Microcontroller GmbH & Co. KG *
|
||||
* *
|
||||
* Internet: www.segger.com Support: support@segger.com *
|
||||
* *
|
||||
*****************************************************************************/
|
||||
|
||||
function Reset() {
|
||||
TargetInterface.resetAndStop();
|
||||
}
|
||||
|
||||
function EnableTrace(traceInterfaceType) {
|
||||
// TODO: Enable trace
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,109 @@
|
||||
<!DOCTYPE CrossStudio_Project_File>
|
||||
<solution Name="nrf5x" target="8" version="2">
|
||||
<project Name="nrf5x">
|
||||
<configuration
|
||||
Name="Common"
|
||||
Placement="Flash"
|
||||
Target="nRF52840_xxAA"
|
||||
arm_architecture="v7EM"
|
||||
arm_core_type="Cortex-M4"
|
||||
arm_endian="Little"
|
||||
arm_fp_abi="Hard"
|
||||
arm_fpu_type="FPv4-SP-D16"
|
||||
arm_interwork="No"
|
||||
arm_linker_heap_size="1024"
|
||||
arm_linker_process_stack_size="0"
|
||||
arm_linker_stack_size="1024"
|
||||
arm_simulator_memory_simulation_parameter="ROM;0x00000000;0x00100000;RAM;0x20000000;0x00040000"
|
||||
arm_target_debug_interface_type="ADIv5"
|
||||
arm_target_device_name="nRF52840_xxAA"
|
||||
arm_target_interface_type="SWD"
|
||||
build_treat_warnings_as_errors="Yes"
|
||||
c_preprocessor_definitions="NRF52840_XXAA;__nRF_FAMILY;ARM_MATH_CM4;FLASH_PLACEMENT=1;BOARD_PCA10056;CFG_TUSB_MCU=OPT_MCU_NRF5X"
|
||||
c_user_include_directories="../../src;$(rootDir)/hw/cmsis/Include;$(rootDir)/hw;$(rootDir)/src;$(nrfxDir)/..;$(nrfxDir);$(nrfxDir)/mdk;$(nrfxDir)/hal;$(nrfxDir)/drivers/include"
|
||||
debug_register_definition_file="nrf52840_Registers.xml"
|
||||
debug_target_connection="J-Link"
|
||||
gcc_entry_point="Reset_Handler"
|
||||
link_use_linker_script_file="No"
|
||||
linker_memory_map_file="nRF52840_xxAA_MemoryMap.xml"
|
||||
linker_section_placement_file="flash_placement.xml"
|
||||
macros="DeviceFamily=nRF;Target=nRF52840_xxAA;Placement=Flash;rootDir=../../../..;nrfxDir=../../../../hw/mcu/nordic/nrfx"
|
||||
project_directory=""
|
||||
project_type="Executable"
|
||||
target_reset_script="Reset();"
|
||||
target_script_file="$(ProjectDir)/nRF_Target.js"
|
||||
target_trace_initialize_script="EnableTrace("$(TraceInterfaceType)")" />
|
||||
<folder
|
||||
Name="tinyusb"
|
||||
exclude=""
|
||||
filter="*.c;*.h"
|
||||
path="../../../../src"
|
||||
recurse="Yes" />
|
||||
<folder Name="hw">
|
||||
<folder Name="bsp">
|
||||
<folder Name="pca10056">
|
||||
<file file_name="../../../../hw/bsp/pca10056/board_pca10056.c" />
|
||||
<file file_name="../../../../hw/bsp/pca10056/board_pca10056.h" />
|
||||
</folder>
|
||||
<file file_name="../../../../hw/bsp/ansi_escape.h" />
|
||||
<file file_name="../../../../hw/bsp/board.h" />
|
||||
</folder>
|
||||
<folder Name="mcu">
|
||||
<folder Name="nordic">
|
||||
<folder Name="nrfx">
|
||||
<folder Name="drivers">
|
||||
<folder Name="include">
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/drivers/include/nrfx_power_clock.h" />
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/drivers/include/nrfx_power.h" />
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/drivers/include/nrfx_qspi.h" />
|
||||
</folder>
|
||||
<folder Name="src">
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/drivers/src/nrfx_power.c" />
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/drivers/src/nrfx_qspi.c" />
|
||||
</folder>
|
||||
</folder>
|
||||
<folder Name="hal">
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/hal/nrf_power.h" />
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/hal/nrf_qspi.h" />
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/hal/nrf_usbd.h" />
|
||||
</folder>
|
||||
<folder Name="mdk">
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/mdk/nrf51_to_nrf52840.h" />
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/mdk/nrf52840_bitfields.h" />
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/mdk/nrf52840.h" />
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/mdk/nrf52840_peripherals.h" />
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/mdk/nrf52_to_nrf52840.h" />
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/mdk/ses_startup_nrf52840.s" />
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/mdk/ses_startup_nrf_common.s" />
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/mdk/system_nrf52840.c" />
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx/mdk/system_nrf52840.h" />
|
||||
</folder>
|
||||
</folder>
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx_config.h" />
|
||||
<file file_name="../../../../hw/mcu/nordic/nrfx_glue.h" />
|
||||
</folder>
|
||||
</folder>
|
||||
</folder>
|
||||
<configuration Name="Debug" build_treat_warnings_as_errors="Yes" />
|
||||
<folder
|
||||
Name="src"
|
||||
exclude=""
|
||||
filter="*.c;*.h"
|
||||
path="../../src"
|
||||
recurse="Yes" />
|
||||
<folder Name="System Files">
|
||||
<file file_name="flash_placement.xml" />
|
||||
<file file_name="nrf52840_Registers.xml" />
|
||||
<file file_name="nRF52840_xxAA_MemoryMap.xml" />
|
||||
<file file_name="nRF_Target.js" />
|
||||
<file file_name="thumb_crt0.s" />
|
||||
</folder>
|
||||
<folder
|
||||
Name="segger_rtt"
|
||||
exclude=""
|
||||
filter="*.c;*.h"
|
||||
path="../../../../lib/segger_rtt"
|
||||
recurse="No" />
|
||||
</project>
|
||||
<configuration Name="pca10056" />
|
||||
</solution>
|
||||
@@ -0,0 +1,420 @@
|
||||
// SEGGER Embedded Studio, runtime support.
|
||||
//
|
||||
// Copyright (c) 2014-2017 SEGGER Microcontroller GmbH & Co KG
|
||||
// Copyright (c) 2001-2017 Rowley Associates Limited.
|
||||
//
|
||||
// This file may be distributed under the terms of the License Agreement
|
||||
// provided with this software.
|
||||
//
|
||||
// THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE
|
||||
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
||||
//
|
||||
//
|
||||
// Preprocessor Definitions
|
||||
// ------------------------
|
||||
// APP_ENTRY_POINT
|
||||
//
|
||||
// Defines the application entry point function, if undefined this setting
|
||||
// defaults to "main".
|
||||
//
|
||||
// INITIALIZE_STACK
|
||||
//
|
||||
// If defined, the contents of the stack will be initialized to a the
|
||||
// value 0xCC.
|
||||
//
|
||||
// INITIALIZE_SECONDARY_SECTIONS
|
||||
//
|
||||
// If defined, the .data2, .text2, .rodata2 and .bss2 sections will be initialized.
|
||||
//
|
||||
// INITIALIZE_TCM_SECTIONS
|
||||
//
|
||||
// If defined, the .data_tcm, .text_tcm, .rodata_tcm and .bss_tcm sections
|
||||
// will be initialized.
|
||||
//
|
||||
// INITIALIZE_USER_SECTIONS
|
||||
//
|
||||
// If defined, the function InitializeUserMemorySections will be called prior
|
||||
// to entering main in order to allow the user to initialize any user defined
|
||||
// memory sections.
|
||||
//
|
||||
// FULL_LIBRARY
|
||||
//
|
||||
// If defined then
|
||||
// - argc, argv are setup by the debug_getargs.
|
||||
// - the exit symbol is defined and executes on return from main.
|
||||
// - the exit symbol calls destructors, atexit functions and then debug_exit.
|
||||
//
|
||||
// If not defined then
|
||||
// - argc and argv are zero.
|
||||
// - the exit symbol is defined, executes on return from main and loops
|
||||
//
|
||||
|
||||
#ifndef APP_ENTRY_POINT
|
||||
#define APP_ENTRY_POINT main
|
||||
#endif
|
||||
|
||||
#ifndef ARGSSPACE
|
||||
#define ARGSSPACE 128
|
||||
#endif
|
||||
.syntax unified
|
||||
|
||||
.global _start
|
||||
.extern APP_ENTRY_POINT
|
||||
.global exit
|
||||
.weak exit
|
||||
|
||||
#ifdef INITIALIZE_USER_SECTIONS
|
||||
.extern InitializeUserMemorySections
|
||||
#endif
|
||||
|
||||
.section .init, "ax"
|
||||
.code 16
|
||||
.align 2
|
||||
.thumb_func
|
||||
|
||||
_start:
|
||||
/* Set up main stack if size > 0 */
|
||||
ldr r1, =__stack_end__
|
||||
ldr r0, =__stack_start__
|
||||
subs r2, r1, r0
|
||||
beq 1f
|
||||
#ifdef __ARM_EABI__
|
||||
movs r2, #0x7
|
||||
bics r1, r2
|
||||
#endif
|
||||
mov sp, r1
|
||||
#ifdef INITIALIZE_STACK
|
||||
movs r2, #0xCC
|
||||
ldr r0, =__stack_start__
|
||||
bl memory_set
|
||||
#endif
|
||||
1:
|
||||
|
||||
/* Set up process stack if size > 0 */
|
||||
ldr r1, =__stack_process_end__
|
||||
ldr r0, =__stack_process_start__
|
||||
subs r2, r1, r0
|
||||
beq 1f
|
||||
#ifdef __ARM_EABI__
|
||||
movs r2, #0x7
|
||||
bics r1, r2
|
||||
#endif
|
||||
msr psp, r1
|
||||
movs r2, #2
|
||||
msr control, r2
|
||||
#ifdef INITIALIZE_STACK
|
||||
movs r2, #0xCC
|
||||
bl memory_set
|
||||
#endif
|
||||
1:
|
||||
|
||||
/* Copy initialized memory sections into RAM (if necessary). */
|
||||
ldr r0, =__data_load_start__
|
||||
ldr r1, =__data_start__
|
||||
ldr r2, =__data_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__text_load_start__
|
||||
ldr r1, =__text_start__
|
||||
ldr r2, =__text_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__fast_load_start__
|
||||
ldr r1, =__fast_start__
|
||||
ldr r2, =__fast_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__ctors_load_start__
|
||||
ldr r1, =__ctors_start__
|
||||
ldr r2, =__ctors_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__dtors_load_start__
|
||||
ldr r1, =__dtors_start__
|
||||
ldr r2, =__dtors_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__rodata_load_start__
|
||||
ldr r1, =__rodata_start__
|
||||
ldr r2, =__rodata_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__tdata_load_start__
|
||||
ldr r1, =__tdata_start__
|
||||
ldr r2, =__tdata_end__
|
||||
bl memory_copy
|
||||
#ifdef INITIALIZE_SECONDARY_SECTIONS
|
||||
ldr r0, =__data2_load_start__
|
||||
ldr r1, =__data2_start__
|
||||
ldr r2, =__data2_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__text2_load_start__
|
||||
ldr r1, =__text2_start__
|
||||
ldr r2, =__text2_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__rodata2_load_start__
|
||||
ldr r1, =__rodata2_start__
|
||||
ldr r2, =__rodata2_end__
|
||||
bl memory_copy
|
||||
#endif /* #ifdef INITIALIZE_SECONDARY_SECTIONS */
|
||||
#ifdef INITIALIZE_TCM_SECTIONS
|
||||
ldr r0, =__data_tcm_load_start__
|
||||
ldr r1, =__data_tcm_start__
|
||||
ldr r2, =__data_tcm_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__text_tcm_load_start__
|
||||
ldr r1, =__text_tcm_start__
|
||||
ldr r2, =__text_tcm_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__rodata_tcm_load_start__
|
||||
ldr r1, =__rodata_tcm_start__
|
||||
ldr r2, =__rodata_tcm_end__
|
||||
bl memory_copy
|
||||
#endif /* #ifdef INITIALIZE_TCM_SECTIONS */
|
||||
|
||||
/* Zero the bss. */
|
||||
ldr r0, =__bss_start__
|
||||
ldr r1, =__bss_end__
|
||||
movs r2, #0
|
||||
bl memory_set
|
||||
ldr r0, =__tbss_start__
|
||||
ldr r1, =__tbss_end__
|
||||
movs r2, #0
|
||||
bl memory_set
|
||||
#ifdef INITIALIZE_SECONDARY_SECTIONS
|
||||
ldr r0, =__bss2_start__
|
||||
ldr r1, =__bss2_end__
|
||||
mov r2, #0
|
||||
bl memory_set
|
||||
#endif /* #ifdef INITIALIZE_SECONDARY_SECTIONS */
|
||||
#ifdef INITIALIZE_TCM_SECTIONS
|
||||
ldr r0, =__bss_tcm_start__
|
||||
ldr r1, =__bss_tcm_end__
|
||||
mov r2, #0
|
||||
bl memory_set
|
||||
#endif /* #ifdef INITIALIZE_TCM_SECTIONS */
|
||||
|
||||
/* Initialize the heap */
|
||||
ldr r0, = __heap_start__
|
||||
ldr r1, = __heap_end__
|
||||
subs r1, r1, r0
|
||||
cmp r1, #8
|
||||
blt 1f
|
||||
movs r2, #0
|
||||
str r2, [r0]
|
||||
adds r0, r0, #4
|
||||
str r1, [r0]
|
||||
1:
|
||||
|
||||
#ifdef INITIALIZE_USER_SECTIONS
|
||||
ldr r2, =InitializeUserMemorySections
|
||||
blx r2
|
||||
#endif
|
||||
|
||||
/* Call constructors */
|
||||
ldr r0, =__ctors_start__
|
||||
ldr r1, =__ctors_end__
|
||||
ctor_loop:
|
||||
cmp r0, r1
|
||||
beq ctor_end
|
||||
ldr r2, [r0]
|
||||
adds r0, #4
|
||||
push {r0-r1}
|
||||
blx r2
|
||||
pop {r0-r1}
|
||||
b ctor_loop
|
||||
ctor_end:
|
||||
|
||||
/* Setup initial call frame */
|
||||
movs r0, #0
|
||||
mov lr, r0
|
||||
mov r12, sp
|
||||
|
||||
.type start, function
|
||||
start:
|
||||
/* Jump to application entry point */
|
||||
#ifdef FULL_LIBRARY
|
||||
movs r0, #ARGSSPACE
|
||||
ldr r1, =args
|
||||
ldr r2, =debug_getargs
|
||||
blx r2
|
||||
ldr r1, =args
|
||||
#else
|
||||
movs r0, #0
|
||||
movs r1, #0
|
||||
#endif
|
||||
ldr r2, =APP_ENTRY_POINT
|
||||
blx r2
|
||||
|
||||
.thumb_func
|
||||
exit:
|
||||
#ifdef FULL_LIBRARY
|
||||
mov r5, r0 // save the exit parameter/return result
|
||||
|
||||
/* Call destructors */
|
||||
ldr r0, =__dtors_start__
|
||||
ldr r1, =__dtors_end__
|
||||
dtor_loop:
|
||||
cmp r0, r1
|
||||
beq dtor_end
|
||||
ldr r2, [r0]
|
||||
add r0, #4
|
||||
push {r0-r1}
|
||||
blx r2
|
||||
pop {r0-r1}
|
||||
b dtor_loop
|
||||
dtor_end:
|
||||
|
||||
/* Call atexit functions */
|
||||
ldr r2, =_execute_at_exit_fns
|
||||
blx r2
|
||||
|
||||
/* Call debug_exit with return result/exit parameter */
|
||||
mov r0, r5
|
||||
ldr r2, =debug_exit
|
||||
blx r2
|
||||
#endif
|
||||
|
||||
/* Returned from application entry point, loop forever. */
|
||||
exit_loop:
|
||||
b exit_loop
|
||||
|
||||
.thumb_func
|
||||
memory_copy:
|
||||
cmp r0, r1
|
||||
beq 2f
|
||||
subs r2, r2, r1
|
||||
beq 2f
|
||||
1:
|
||||
ldrb r3, [r0]
|
||||
adds r0, r0, #1
|
||||
strb r3, [r1]
|
||||
adds r1, r1, #1
|
||||
subs r2, r2, #1
|
||||
bne 1b
|
||||
2:
|
||||
bx lr
|
||||
|
||||
.thumb_func
|
||||
memory_set:
|
||||
cmp r0, r1
|
||||
beq 1f
|
||||
strb r2, [r0]
|
||||
adds r0, r0, #1
|
||||
b memory_set
|
||||
1:
|
||||
bx lr
|
||||
|
||||
// default C/C++ library helpers
|
||||
|
||||
.macro HELPER helper_name
|
||||
.section .text.\helper_name, "ax", %progbits
|
||||
.global \helper_name
|
||||
.weak \helper_name
|
||||
\helper_name:
|
||||
.thumb_func
|
||||
.endm
|
||||
|
||||
.macro JUMPTO name
|
||||
#if defined(__thumb__) && !defined(__thumb2__)
|
||||
mov r12, r0
|
||||
ldr r0, =\name
|
||||
push {r0}
|
||||
mov r0, r12
|
||||
pop {pc}
|
||||
#else
|
||||
b \name
|
||||
#endif
|
||||
.endm
|
||||
|
||||
HELPER __aeabi_read_tp
|
||||
ldr r0, =__tbss_start__-8
|
||||
bx lr
|
||||
HELPER __heap_lock
|
||||
bx lr
|
||||
HELPER __heap_unlock
|
||||
bx lr
|
||||
HELPER __printf_lock
|
||||
bx lr
|
||||
HELPER __printf_unlock
|
||||
bx lr
|
||||
HELPER __scanf_lock
|
||||
bx lr
|
||||
HELPER __scanf_unlock
|
||||
bx lr
|
||||
HELPER __debug_io_lock
|
||||
bx lr
|
||||
HELPER __debug_io_unlock
|
||||
bx lr
|
||||
HELPER abort
|
||||
b .
|
||||
HELPER __assert
|
||||
b .
|
||||
HELPER __aeabi_assert
|
||||
b .
|
||||
HELPER __cxa_pure_virtual
|
||||
b .
|
||||
HELPER __cxa_guard_acquire
|
||||
ldr r3, [r0]
|
||||
#if defined(__thumb__) && !defined(__thumb2__)
|
||||
movs r0, #1
|
||||
tst r3, r0
|
||||
#else
|
||||
tst r3, #1
|
||||
#endif
|
||||
beq 1f
|
||||
movs r0, #0
|
||||
bx lr
|
||||
1:
|
||||
movs r0, #1
|
||||
bx lr
|
||||
HELPER __cxa_guard_release
|
||||
movs r3, #1
|
||||
str r3, [r0]
|
||||
bx lr
|
||||
HELPER __cxa_guard_abort
|
||||
bx lr
|
||||
HELPER __sync_synchronize
|
||||
bx lr
|
||||
HELPER __getchar
|
||||
JUMPTO debug_getchar
|
||||
HELPER __putchar
|
||||
JUMPTO debug_putchar
|
||||
HELPER __open
|
||||
JUMPTO debug_fopen
|
||||
HELPER __close
|
||||
JUMPTO debug_fclose
|
||||
HELPER __write
|
||||
mov r3, r0
|
||||
mov r0, r1
|
||||
movs r1, #1
|
||||
JUMPTO debug_fwrite
|
||||
HELPER __read
|
||||
mov r3, r0
|
||||
mov r0, r1
|
||||
movs r1, #1
|
||||
JUMPTO debug_fread
|
||||
HELPER __seek
|
||||
push {r4, lr}
|
||||
mov r4, r0
|
||||
bl debug_fseek
|
||||
cmp r0, #0
|
||||
bne 1f
|
||||
mov r0, r4
|
||||
bl debug_ftell
|
||||
pop {r4, pc}
|
||||
1:
|
||||
ldr r0, =-1
|
||||
pop {r4, pc}
|
||||
// char __user_locale_name_buffer[];
|
||||
.section .bss.__user_locale_name_buffer, "aw", %nobits
|
||||
.global __user_locale_name_buffer
|
||||
.weak __user_locale_name_buffer
|
||||
__user_locale_name_buffer:
|
||||
.word 0x0
|
||||
|
||||
#ifdef FULL_LIBRARY
|
||||
.bss
|
||||
args:
|
||||
.space ARGSSPACE
|
||||
#endif
|
||||
|
||||
/* Setup attibutes of stack and heap sections so they don't take up room in the elf file */
|
||||
.section .stack, "wa", %nobits
|
||||
.section .stack_process, "wa", %nobits
|
||||
.section .heap, "wa", %nobits
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<!DOCTYPE Board_Memory_Definition_File>
|
||||
<root name="ATSAMD21G18A">
|
||||
<MemorySegment name="FLASH" start="0x00002000" size="0x0003E000" access="ReadOnly" />
|
||||
<MemorySegment name="RAM" start="0x20000000" size="0x00008000" access="Read/Write" />
|
||||
</root>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,331 @@
|
||||
/*****************************************************************************
|
||||
* SEGGER Microcontroller GmbH & Co. KG *
|
||||
* Solutions for real time microcontroller applications *
|
||||
*****************************************************************************
|
||||
* *
|
||||
* (c) 2017 SEGGER Microcontroller GmbH & Co. KG *
|
||||
* *
|
||||
* Internet: www.segger.com Support: support@segger.com *
|
||||
* *
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* Preprocessor Definitions *
|
||||
* ------------------------ *
|
||||
* VECTORS_IN_RAM *
|
||||
* *
|
||||
* If defined, an area of RAM will large enough to store the vector table *
|
||||
* will be reserved. *
|
||||
* *
|
||||
*****************************************************************************/
|
||||
|
||||
.syntax unified
|
||||
.code 16
|
||||
|
||||
.section .init, "ax"
|
||||
.align 0
|
||||
|
||||
/*****************************************************************************
|
||||
* Default Exception Handlers *
|
||||
*****************************************************************************/
|
||||
|
||||
.thumb_func
|
||||
.weak NMI_Handler
|
||||
NMI_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak HardFault_Handler
|
||||
HardFault_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak SVC_Handler
|
||||
SVC_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak PendSV_Handler
|
||||
PendSV_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak SysTick_Handler
|
||||
SysTick_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
Dummy_Handler:
|
||||
b .
|
||||
|
||||
#if defined(__OPTIMIZATION_SMALL)
|
||||
|
||||
.weak PM_Handler
|
||||
.thumb_set PM_Handler,Dummy_Handler
|
||||
|
||||
.weak SYSCTRL_Handler
|
||||
.thumb_set SYSCTRL_Handler,Dummy_Handler
|
||||
|
||||
.weak WDT_Handler
|
||||
.thumb_set WDT_Handler,Dummy_Handler
|
||||
|
||||
.weak RTC_Handler
|
||||
.thumb_set RTC_Handler,Dummy_Handler
|
||||
|
||||
.weak EIC_Handler
|
||||
.thumb_set EIC_Handler,Dummy_Handler
|
||||
|
||||
.weak NVMCTRL_Handler
|
||||
.thumb_set NVMCTRL_Handler,Dummy_Handler
|
||||
|
||||
.weak DMAC_Handler
|
||||
.thumb_set DMAC_Handler,Dummy_Handler
|
||||
|
||||
.weak USB_Handler
|
||||
.thumb_set USB_Handler,Dummy_Handler
|
||||
|
||||
.weak EVSYS_Handler
|
||||
.thumb_set EVSYS_Handler,Dummy_Handler
|
||||
|
||||
.weak SERCOM0_Handler
|
||||
.thumb_set SERCOM0_Handler,Dummy_Handler
|
||||
|
||||
.weak SERCOM1_Handler
|
||||
.thumb_set SERCOM1_Handler,Dummy_Handler
|
||||
|
||||
.weak SERCOM2_Handler
|
||||
.thumb_set SERCOM2_Handler,Dummy_Handler
|
||||
|
||||
.weak SERCOM3_Handler
|
||||
.thumb_set SERCOM3_Handler,Dummy_Handler
|
||||
|
||||
.weak SERCOM4_Handler
|
||||
.thumb_set SERCOM4_Handler,Dummy_Handler
|
||||
|
||||
.weak SERCOM5_Handler
|
||||
.thumb_set SERCOM5_Handler,Dummy_Handler
|
||||
|
||||
.weak TCC0_Handler
|
||||
.thumb_set TCC0_Handler,Dummy_Handler
|
||||
|
||||
.weak TCC1_Handler
|
||||
.thumb_set TCC1_Handler,Dummy_Handler
|
||||
|
||||
.weak TCC2_Handler
|
||||
.thumb_set TCC2_Handler,Dummy_Handler
|
||||
|
||||
.weak TC3_Handler
|
||||
.thumb_set TC3_Handler,Dummy_Handler
|
||||
|
||||
.weak TC4_Handler
|
||||
.thumb_set TC4_Handler,Dummy_Handler
|
||||
|
||||
.weak TC5_Handler
|
||||
.thumb_set TC5_Handler,Dummy_Handler
|
||||
|
||||
.weak ADC_Handler
|
||||
.thumb_set ADC_Handler,Dummy_Handler
|
||||
|
||||
.weak AC_Handler
|
||||
.thumb_set AC_Handler,Dummy_Handler
|
||||
|
||||
.weak DAC_Handler
|
||||
.thumb_set DAC_Handler,Dummy_Handler
|
||||
|
||||
.weak I2S_Handler
|
||||
.thumb_set I2S_Handler,Dummy_Handler
|
||||
|
||||
#else
|
||||
|
||||
.thumb_func
|
||||
.weak PM_Handler
|
||||
PM_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak SYSCTRL_Handler
|
||||
SYSCTRL_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak WDT_Handler
|
||||
WDT_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak RTC_Handler
|
||||
RTC_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak EIC_Handler
|
||||
EIC_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak NVMCTRL_Handler
|
||||
NVMCTRL_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak DMAC_Handler
|
||||
DMAC_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak USB_Handler
|
||||
USB_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak EVSYS_Handler
|
||||
EVSYS_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak SERCOM0_Handler
|
||||
SERCOM0_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak SERCOM1_Handler
|
||||
SERCOM1_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak SERCOM2_Handler
|
||||
SERCOM2_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak SERCOM3_Handler
|
||||
SERCOM3_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak SERCOM4_Handler
|
||||
SERCOM4_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak SERCOM5_Handler
|
||||
SERCOM5_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak TCC0_Handler
|
||||
TCC0_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak TCC1_Handler
|
||||
TCC1_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak TCC2_Handler
|
||||
TCC2_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak TC3_Handler
|
||||
TC3_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak TC4_Handler
|
||||
TC4_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak TC5_Handler
|
||||
TC5_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak ADC_Handler
|
||||
ADC_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak AC_Handler
|
||||
AC_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak DAC_Handler
|
||||
DAC_Handler:
|
||||
b .
|
||||
|
||||
.thumb_func
|
||||
.weak I2S_Handler
|
||||
I2S_Handler:
|
||||
b .
|
||||
|
||||
#endif
|
||||
|
||||
/*****************************************************************************
|
||||
* Vector Table *
|
||||
*****************************************************************************/
|
||||
|
||||
.section .vectors, "ax"
|
||||
.align 0
|
||||
.global _vectors
|
||||
.extern __stack_end__
|
||||
.extern Reset_Handler
|
||||
|
||||
_vectors:
|
||||
.word __stack_end__
|
||||
.word Reset_Handler
|
||||
.word NMI_Handler
|
||||
.word HardFault_Handler
|
||||
.word 0 /* Reserved */
|
||||
.word 0 /* Reserved */
|
||||
.word 0 /* Reserved */
|
||||
.word 0 /* Reserved */
|
||||
.word 0 /* Reserved */
|
||||
.word 0 /* Reserved */
|
||||
.word 0 /* Reserved */
|
||||
.word SVC_Handler
|
||||
.word 0 /* Reserved */
|
||||
.word 0 /* Reserved */
|
||||
.word PendSV_Handler
|
||||
.word SysTick_Handler
|
||||
.word PM_Handler
|
||||
.word SYSCTRL_Handler
|
||||
.word WDT_Handler
|
||||
.word RTC_Handler
|
||||
.word EIC_Handler
|
||||
.word NVMCTRL_Handler
|
||||
.word DMAC_Handler
|
||||
.word USB_Handler
|
||||
.word EVSYS_Handler
|
||||
.word SERCOM0_Handler
|
||||
.word SERCOM1_Handler
|
||||
.word SERCOM2_Handler
|
||||
.word SERCOM3_Handler
|
||||
.word SERCOM4_Handler
|
||||
.word SERCOM5_Handler
|
||||
.word TCC0_Handler
|
||||
.word TCC1_Handler
|
||||
.word TCC2_Handler
|
||||
.word TC3_Handler
|
||||
.word TC4_Handler
|
||||
.word TC5_Handler
|
||||
.word Dummy_Handler /* Reserved */
|
||||
.word Dummy_Handler /* Reserved */
|
||||
.word ADC_Handler
|
||||
.word AC_Handler
|
||||
.word DAC_Handler
|
||||
.word Dummy_Handler /* Reserved */
|
||||
.word I2S_Handler
|
||||
_vectors_end:
|
||||
|
||||
#ifdef VECTORS_IN_RAM
|
||||
.section .vectors_ram, "ax"
|
||||
.align 0
|
||||
.global _vectors_ram
|
||||
|
||||
_vectors_ram:
|
||||
.space _vectors_end - _vectors, 0
|
||||
#endif
|
||||
@@ -0,0 +1,114 @@
|
||||
/*****************************************************************************
|
||||
* SEGGER Microcontroller GmbH & Co. KG *
|
||||
* Solutions for real time microcontroller applications *
|
||||
*****************************************************************************
|
||||
* *
|
||||
* (c) 2017 SEGGER Microcontroller GmbH & Co. KG *
|
||||
* *
|
||||
* Internet: www.segger.com Support: support@segger.com *
|
||||
* *
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* Preprocessor Definitions *
|
||||
* ------------------------ *
|
||||
* NO_STACK_INIT *
|
||||
* *
|
||||
* If defined, the stack pointer will not be initialised. *
|
||||
* *
|
||||
* NO_SYSTEM_INIT *
|
||||
* *
|
||||
* If defined, the SystemInit() function will not be called. By default *
|
||||
* SystemInit() is called after reset to enable the clocks and memories to *
|
||||
* be initialised prior to any C startup initialisation. *
|
||||
* *
|
||||
* NO_VTOR_CONFIG *
|
||||
* *
|
||||
* If defined, the vector table offset register will not be configured. *
|
||||
* *
|
||||
* MEMORY_INIT *
|
||||
* *
|
||||
* If defined, the MemoryInit() function will be called. By default *
|
||||
* MemoryInit() is called after SystemInit() to enable an external memory *
|
||||
* controller. *
|
||||
* *
|
||||
* STACK_INIT_VAL *
|
||||
* *
|
||||
* If defined, specifies the initial stack pointer value. If undefined, *
|
||||
* the stack pointer will be initialised to point to the end of the *
|
||||
* RAM segment. *
|
||||
* *
|
||||
* VECTORS_IN_RAM *
|
||||
* *
|
||||
* If defined, the exception vectors will be copied from Flash to RAM. *
|
||||
* *
|
||||
*****************************************************************************/
|
||||
|
||||
.syntax unified
|
||||
|
||||
.global Reset_Handler
|
||||
.extern _vectors
|
||||
|
||||
.section .init, "ax"
|
||||
.thumb_func
|
||||
|
||||
.equ VTOR_REG, 0xE000ED08
|
||||
|
||||
#ifndef STACK_INIT_VAL
|
||||
#define STACK_INIT_VAL __RAM_segment_end__
|
||||
#endif
|
||||
|
||||
Reset_Handler:
|
||||
#ifndef NO_STACK_INIT
|
||||
/* Initialise main stack */
|
||||
ldr r0, =STACK_INIT_VAL
|
||||
ldr r1, =0x7
|
||||
bics r0, r1
|
||||
mov sp, r0
|
||||
#endif
|
||||
|
||||
#ifndef NO_SYSTEM_INIT
|
||||
/* Initialise system */
|
||||
ldr r0, =SystemInit
|
||||
blx r0
|
||||
.pushsection .init_array, "aw", %init_array
|
||||
.word SystemCoreClockUpdate
|
||||
.popsection
|
||||
#endif
|
||||
|
||||
#ifdef MEMORY_INIT
|
||||
ldr r0, =MemoryInit
|
||||
blx r0
|
||||
#endif
|
||||
|
||||
#ifdef VECTORS_IN_RAM
|
||||
/* Copy exception vectors into RAM */
|
||||
ldr r0, =__vectors_start__
|
||||
ldr r1, =__vectors_end__
|
||||
ldr r2, =__vectors_ram_start__
|
||||
1:
|
||||
cmp r0, r1
|
||||
beq 2f
|
||||
ldr r3, [r0]
|
||||
str r3, [r2]
|
||||
adds r0, r0, #4
|
||||
adds r2, r2, #4
|
||||
b 1b
|
||||
2:
|
||||
#endif
|
||||
|
||||
#ifndef NO_VTOR_CONFIG
|
||||
/* Configure vector table offset register */
|
||||
ldr r0, =VTOR_REG
|
||||
#ifdef VECTORS_IN_RAM
|
||||
ldr r1, =_vectors_ram
|
||||
#else
|
||||
ldr r1, =_vectors
|
||||
#endif
|
||||
str r1, [r0]
|
||||
#endif
|
||||
|
||||
/* Jump to program start */
|
||||
b _start
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
/*****************************************************************************
|
||||
* SEGGER Microcontroller GmbH & Co. KG *
|
||||
* Solutions for real time microcontroller applications *
|
||||
*****************************************************************************
|
||||
* *
|
||||
* (c) 2017 SEGGER Microcontroller GmbH & Co. KG *
|
||||
* *
|
||||
* Internet: www.segger.com Support: support@segger.com *
|
||||
* *
|
||||
*****************************************************************************/
|
||||
|
||||
function Reset() {
|
||||
TargetInterface.resetAndStop();
|
||||
}
|
||||
|
||||
function EnableTrace(traceInterfaceType) {
|
||||
// TODO: Enable trace
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
<!DOCTYPE Linker_Placement_File>
|
||||
<Root name="Flash Section Placement">
|
||||
<MemorySegment name="$(FLASH_NAME:FLASH)">
|
||||
<ProgramSection alignment="0x100" load="Yes" name=".vectors" start="$(FLASH_START:)" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".init" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".init_rodata" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".text" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".dtors" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".ctors" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".rodata" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".ARM.exidx" address_symbol="__exidx_start" end_symbol="__exidx_end" />
|
||||
<ProgramSection alignment="4" load="Yes" runin=".fast_run" name=".fast" />
|
||||
<ProgramSection alignment="4" load="Yes" runin=".data_run" name=".data" />
|
||||
<ProgramSection alignment="4" load="Yes" runin=".tdata_run" name=".tdata" />
|
||||
</MemorySegment>
|
||||
<MemorySegment name="$(RAM_NAME:RAM);SRAM">
|
||||
<ProgramSection alignment="0x100" load="No" name=".vectors_ram" start="$(RAM_START:$(SRAM_START:))" />
|
||||
<ProgramSection alignment="4" load="No" name=".fast_run" />
|
||||
<ProgramSection alignment="4" load="No" name=".data_run" />
|
||||
<ProgramSection alignment="4" load="No" name=".bss" />
|
||||
<ProgramSection alignment="4" load="No" name=".tbss" />
|
||||
<ProgramSection alignment="4" load="No" name=".tdata_run" />
|
||||
<ProgramSection alignment="4" load="No" name=".non_init" />
|
||||
<ProgramSection alignment="4" size="__HEAPSIZE__" load="No" name=".heap" />
|
||||
<ProgramSection alignment="8" size="__STACKSIZE__" load="No" place_from_segment_end="Yes" name=".stack" />
|
||||
<ProgramSection alignment="8" size="__STACKSIZE_PROCESS__" load="No" name=".stack_process" />
|
||||
</MemorySegment>
|
||||
<MemorySegment name="$(FLASH2_NAME:FLASH2)">
|
||||
<ProgramSection alignment="4" load="Yes" name=".text2" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".rodata2" />
|
||||
<ProgramSection alignment="4" load="Yes" runin=".data2_run" name=".data2" />
|
||||
</MemorySegment>
|
||||
<MemorySegment name="$(RAM2_NAME:RAM2)">
|
||||
<ProgramSection alignment="4" load="No" name=".data2_run" />
|
||||
<ProgramSection alignment="4" load="No" name=".bss2" />
|
||||
</MemorySegment>
|
||||
</Root>
|
||||
@@ -0,0 +1,103 @@
|
||||
<!DOCTYPE CrossStudio_Project_File>
|
||||
<solution Name="samd21" target="8" version="2">
|
||||
<project Name="samd21">
|
||||
<configuration
|
||||
Name="Common"
|
||||
Placement="Flash"
|
||||
Target="nRF52840_xxAA"
|
||||
arm_architecture="v6M"
|
||||
arm_core_type="Cortex-M0+"
|
||||
arm_endian="Little"
|
||||
arm_fpu_type="None"
|
||||
arm_interwork="No"
|
||||
arm_linker_heap_size="1024"
|
||||
arm_linker_process_stack_size="0"
|
||||
arm_linker_stack_size="1024"
|
||||
arm_simulator_memory_simulation_parameter="RX 00000000,00080000,FFFFFFFF;RWX 20000000,00030000,CDCDCDCD"
|
||||
arm_target_debug_interface_type="ADIv5"
|
||||
arm_target_device_name="ATSAMD21G18A"
|
||||
arm_target_interface_type="SWD"
|
||||
build_treat_warnings_as_errors="Yes"
|
||||
c_preprocessor_definitions="__SAMD21G18A__;__SAMD21_FAMILY;__SAM_D21_SUBFAMILY;ARM_MATH_CM0PLUS;FLASH_PLACEMENT=1;USE_SIMPLE_ASSERT;CONF_XOSC32K_CONFIG=1;CONF_OSC32K_ENABLE=1;CONF_OSC32K_EN32K=1;CONF_XOSC32K_STARTUP=CONF_XOSC32K_STARTUP_TIME_2000092MCS;CONF_DFLL_ONDEMAND=0;CONF_DFLL_OVERWRITE_CALIBRATION=0;BOARD_METRO_M0_EXPRESS;CFG_TUSB_MCU=OPT_MCU_SAMD21"
|
||||
c_user_include_directories="../../src;$(rootDir)/hw/cmsis/Include;$(rootDir)/hw;$(rootDir)/src;$(asf4Dir);$(asf4Dir)/include;$(asf4Dir)/config;$(asf4Dir)/hri;$(asf4Dir)/hal/include;$(asf4Dir)/hal/utils/include;$(asf4Dir)/hpl/port;$(asf4Dir)/hpl/gclk;$(asf4Dir)/hpl/pm"
|
||||
debug_register_definition_file="ATSAMD21G18A_Registers.xml"
|
||||
debug_target_connection="J-Link"
|
||||
gcc_entry_point="Reset_Handler"
|
||||
link_use_linker_script_file="No"
|
||||
linker_memory_map_file="$(ProjectDir)/ATSAMD21G18A_MemoryMap.xml"
|
||||
linker_section_placement_file="flash_placement.xml"
|
||||
linker_section_placements_segments="FLASH RX 0x00000000 0x00080000;RAM RWX 0x20000000 0x00030000"
|
||||
macros="DeviceFamily=SAMD21;Target=ATSAMD21G18A;Placement=Flash;rootDir=../../../..;asf4Dir=../../../../hw/mcu/microchip/samd/asf4/samd21"
|
||||
project_directory=""
|
||||
project_type="Executable"
|
||||
target_reset_script="Reset();"
|
||||
target_script_file="$(ProjectDir)/SAMD21_Target.js"
|
||||
target_trace_initialize_script="EnableTrace("$(TraceInterfaceType)")" />
|
||||
<folder
|
||||
Name="tinyusb"
|
||||
exclude=""
|
||||
filter="*.c;*.h"
|
||||
path="../../../../src"
|
||||
recurse="Yes" />
|
||||
<folder Name="hw">
|
||||
<folder Name="bsp">
|
||||
<file file_name="../../../../hw/bsp/ansi_escape.h" />
|
||||
<file file_name="../../../../hw/bsp/board.h" />
|
||||
<folder Name="metro_m0_express">
|
||||
<file file_name="../../../../hw/bsp/metro_m0_express/board_metro_m0_express.c" />
|
||||
<file file_name="../../../../hw/bsp/metro_m0_express/board_metro_m0_express.h" />
|
||||
</folder>
|
||||
</folder>
|
||||
<folder Name="mcu">
|
||||
<folder Name="microchip">
|
||||
<folder Name="samd">
|
||||
<folder Name="asf4">
|
||||
<folder Name="samd21">
|
||||
<folder Name="gcc">
|
||||
<file file_name="../../../../hw/mcu/microchip/samd/asf4/samd21/gcc/system_samd21.c" />
|
||||
</folder>
|
||||
<folder Name="hpl">
|
||||
<folder Name="core">
|
||||
<file file_name="../../../../hw/mcu/microchip/samd/asf4/samd21/hpl/core/hpl_init.c" />
|
||||
</folder>
|
||||
<folder Name="gclk">
|
||||
<file file_name="../../../../hw/mcu/microchip/samd/asf4/samd21/hpl/gclk/hpl_gclk.c" />
|
||||
</folder>
|
||||
<folder Name="pm">
|
||||
<file file_name="../../../../hw/mcu/microchip/samd/asf4/samd21/hpl/pm/hpl_pm.c" />
|
||||
</folder>
|
||||
<folder Name="sysctrl">
|
||||
<file file_name="../../../../hw/mcu/microchip/samd/asf4/samd21/hpl/sysctrl/hpl_sysctrl.c" />
|
||||
</folder>
|
||||
</folder>
|
||||
</folder>
|
||||
</folder>
|
||||
</folder>
|
||||
</folder>
|
||||
</folder>
|
||||
</folder>
|
||||
<configuration Name="Debug" build_treat_warnings_as_errors="Yes" />
|
||||
<folder
|
||||
Name="src"
|
||||
exclude=""
|
||||
filter="*.c;*.h"
|
||||
path="../../src"
|
||||
recurse="Yes" />
|
||||
<folder Name="System Files">
|
||||
<file file_name="ATSAMD21G18A_MemoryMap.xml" />
|
||||
<file file_name="ATSAMD21G18A_Registers.xml" />
|
||||
<file file_name="ATSAMD21G18A_Vectors.s" />
|
||||
<file file_name="flash_placement.xml" />
|
||||
<file file_name="SAMD21_Startup.s" />
|
||||
<file file_name="SAMD21_Target.js" />
|
||||
<file file_name="thumb_crt0.s" />
|
||||
</folder>
|
||||
<folder
|
||||
Name="segger_rtt"
|
||||
exclude=""
|
||||
filter="*.c;*.h"
|
||||
path="../../../../lib/segger_rtt"
|
||||
recurse="No" />
|
||||
</project>
|
||||
<configuration Name="Metro M0 Express" />
|
||||
</solution>
|
||||
@@ -0,0 +1,415 @@
|
||||
// **********************************************************************
|
||||
// * SEGGER Microcontroller GmbH *
|
||||
// * The Embedded Experts *
|
||||
// **********************************************************************
|
||||
// * *
|
||||
// * (c) 2014 - 2018 SEGGER Microcontroller GmbH *
|
||||
// * (c) 2001 - 2018 Rowley Associates Limited *
|
||||
// * *
|
||||
// * www.segger.com Support: support@segger.com *
|
||||
// * *
|
||||
// **********************************************************************
|
||||
// * *
|
||||
// * All rights reserved. *
|
||||
// * *
|
||||
// * Redistribution and use in source and binary forms, with or *
|
||||
// * without modification, are permitted provided that the following *
|
||||
// * conditions are met: *
|
||||
// * *
|
||||
// * - Redistributions of source code must retain the above copyright *
|
||||
// * notice, this list of conditions and the following disclaimer. *
|
||||
// * *
|
||||
// * - Neither the name of SEGGER Microcontroller GmbH *
|
||||
// * nor the names of its contributors may be used to endorse or *
|
||||
// * promote products derived from this software without specific *
|
||||
// * prior written permission. *
|
||||
// * *
|
||||
// * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
|
||||
// * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
|
||||
// * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
|
||||
// * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||
// * DISCLAIMED. *
|
||||
// * IN NO EVENT SHALL SEGGER Microcontroller GmbH BE LIABLE FOR *
|
||||
// * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
|
||||
// * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
|
||||
// * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
|
||||
// * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
|
||||
// * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||
// * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
|
||||
// * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
|
||||
// * DAMAGE. *
|
||||
// * *
|
||||
// **********************************************************************
|
||||
//
|
||||
//
|
||||
// Preprocessor Definitions
|
||||
// ------------------------
|
||||
// APP_ENTRY_POINT
|
||||
//
|
||||
// Defines the application entry point function, if undefined this setting
|
||||
// defaults to "main".
|
||||
//
|
||||
// INITIALIZE_STACK
|
||||
//
|
||||
// If defined, the contents of the stack will be initialized to a the
|
||||
// value 0xCC.
|
||||
//
|
||||
// INITIALIZE_SECONDARY_SECTIONS
|
||||
//
|
||||
// If defined, the .data2, .text2, .rodata2 and .bss2 sections will be initialized.
|
||||
//
|
||||
// INITIALIZE_TCM_SECTIONS
|
||||
//
|
||||
// If defined, the .data_tcm, .text_tcm, .rodata_tcm and .bss_tcm sections
|
||||
// will be initialized.
|
||||
//
|
||||
// INITIALIZE_USER_SECTIONS
|
||||
//
|
||||
// If defined, the function InitializeUserMemorySections will be called prior
|
||||
// to entering main in order to allow the user to initialize any user defined
|
||||
// memory sections.
|
||||
//
|
||||
// FULL_LIBRARY
|
||||
//
|
||||
// If defined then
|
||||
// - argc, argv are setup by the debug_getargs.
|
||||
// - the exit symbol is defined and executes on return from main.
|
||||
// - the exit symbol calls destructors, atexit functions and then debug_exit.
|
||||
//
|
||||
// If not defined then
|
||||
// - argc and argv are zero.
|
||||
// - the exit symbol is defined, executes on return from main and loops
|
||||
//
|
||||
|
||||
#ifndef APP_ENTRY_POINT
|
||||
#define APP_ENTRY_POINT main
|
||||
#endif
|
||||
|
||||
#ifndef ARGSSPACE
|
||||
#define ARGSSPACE 128
|
||||
#endif
|
||||
.syntax unified
|
||||
|
||||
.global _start
|
||||
.extern APP_ENTRY_POINT
|
||||
.global exit
|
||||
.weak exit
|
||||
|
||||
#ifdef INITIALIZE_USER_SECTIONS
|
||||
.extern InitializeUserMemorySections
|
||||
#endif
|
||||
|
||||
.section .init, "ax"
|
||||
.code 16
|
||||
.balign 2
|
||||
.thumb_func
|
||||
|
||||
_start:
|
||||
/* Set up main stack if size > 0 */
|
||||
ldr r1, =__stack_end__
|
||||
ldr r0, =__stack_start__
|
||||
subs r2, r1, r0
|
||||
beq 1f
|
||||
#ifdef __ARM_EABI__
|
||||
movs r2, #0x7
|
||||
bics r1, r2
|
||||
#endif
|
||||
mov sp, r1
|
||||
#ifdef INITIALIZE_STACK
|
||||
movs r2, #0xCC
|
||||
ldr r0, =__stack_start__
|
||||
bl memory_set
|
||||
#endif
|
||||
1:
|
||||
|
||||
/* Set up process stack if size > 0 */
|
||||
ldr r1, =__stack_process_end__
|
||||
ldr r0, =__stack_process_start__
|
||||
subs r2, r1, r0
|
||||
beq 1f
|
||||
#ifdef __ARM_EABI__
|
||||
movs r2, #0x7
|
||||
bics r1, r2
|
||||
#endif
|
||||
msr psp, r1
|
||||
movs r2, #2
|
||||
msr control, r2
|
||||
#ifdef INITIALIZE_STACK
|
||||
movs r2, #0xCC
|
||||
bl memory_set
|
||||
#endif
|
||||
1:
|
||||
|
||||
/* Copy initialized memory sections into RAM (if necessary). */
|
||||
ldr r0, =__data_load_start__
|
||||
ldr r1, =__data_start__
|
||||
ldr r2, =__data_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__text_load_start__
|
||||
ldr r1, =__text_start__
|
||||
ldr r2, =__text_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__fast_load_start__
|
||||
ldr r1, =__fast_start__
|
||||
ldr r2, =__fast_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__ctors_load_start__
|
||||
ldr r1, =__ctors_start__
|
||||
ldr r2, =__ctors_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__dtors_load_start__
|
||||
ldr r1, =__dtors_start__
|
||||
ldr r2, =__dtors_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__rodata_load_start__
|
||||
ldr r1, =__rodata_start__
|
||||
ldr r2, =__rodata_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__tdata_load_start__
|
||||
ldr r1, =__tdata_start__
|
||||
ldr r2, =__tdata_end__
|
||||
bl memory_copy
|
||||
#ifdef INITIALIZE_SECONDARY_SECTIONS
|
||||
ldr r0, =__data2_load_start__
|
||||
ldr r1, =__data2_start__
|
||||
ldr r2, =__data2_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__text2_load_start__
|
||||
ldr r1, =__text2_start__
|
||||
ldr r2, =__text2_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__rodata2_load_start__
|
||||
ldr r1, =__rodata2_start__
|
||||
ldr r2, =__rodata2_end__
|
||||
bl memory_copy
|
||||
#endif /* #ifdef INITIALIZE_SECONDARY_SECTIONS */
|
||||
#ifdef INITIALIZE_TCM_SECTIONS
|
||||
ldr r0, =__data_tcm_load_start__
|
||||
ldr r1, =__data_tcm_start__
|
||||
ldr r2, =__data_tcm_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__text_tcm_load_start__
|
||||
ldr r1, =__text_tcm_start__
|
||||
ldr r2, =__text_tcm_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__rodata_tcm_load_start__
|
||||
ldr r1, =__rodata_tcm_start__
|
||||
ldr r2, =__rodata_tcm_end__
|
||||
bl memory_copy
|
||||
#endif /* #ifdef INITIALIZE_TCM_SECTIONS */
|
||||
|
||||
/* Zero the bss. */
|
||||
ldr r0, =__bss_start__
|
||||
ldr r1, =__bss_end__
|
||||
movs r2, #0
|
||||
bl memory_set
|
||||
ldr r0, =__tbss_start__
|
||||
ldr r1, =__tbss_end__
|
||||
movs r2, #0
|
||||
bl memory_set
|
||||
#ifdef INITIALIZE_SECONDARY_SECTIONS
|
||||
ldr r0, =__bss2_start__
|
||||
ldr r1, =__bss2_end__
|
||||
mov r2, #0
|
||||
bl memory_set
|
||||
#endif /* #ifdef INITIALIZE_SECONDARY_SECTIONS */
|
||||
#ifdef INITIALIZE_TCM_SECTIONS
|
||||
ldr r0, =__bss_tcm_start__
|
||||
ldr r1, =__bss_tcm_end__
|
||||
mov r2, #0
|
||||
bl memory_set
|
||||
#endif /* #ifdef INITIALIZE_TCM_SECTIONS */
|
||||
|
||||
/* Initialize the heap */
|
||||
ldr r0, = __heap_start__
|
||||
ldr r1, = __heap_end__
|
||||
subs r1, r1, r0
|
||||
cmp r1, #8
|
||||
blt 1f
|
||||
movs r2, #0
|
||||
str r2, [r0]
|
||||
adds r0, r0, #4
|
||||
str r1, [r0]
|
||||
1:
|
||||
|
||||
#ifdef INITIALIZE_USER_SECTIONS
|
||||
ldr r2, =InitializeUserMemorySections
|
||||
blx r2
|
||||
#endif
|
||||
|
||||
/* Call constructors */
|
||||
ldr r0, =__ctors_start__
|
||||
ldr r1, =__ctors_end__
|
||||
ctor_loop:
|
||||
cmp r0, r1
|
||||
beq ctor_end
|
||||
ldr r2, [r0]
|
||||
adds r0, #4
|
||||
push {r0-r1}
|
||||
blx r2
|
||||
pop {r0-r1}
|
||||
b ctor_loop
|
||||
ctor_end:
|
||||
|
||||
/* Setup initial call frame */
|
||||
movs r0, #0
|
||||
mov lr, r0
|
||||
mov r12, sp
|
||||
|
||||
.type start, function
|
||||
start:
|
||||
/* Jump to application entry point */
|
||||
#ifdef FULL_LIBRARY
|
||||
movs r0, #ARGSSPACE
|
||||
ldr r1, =args
|
||||
ldr r2, =debug_getargs
|
||||
blx r2
|
||||
ldr r1, =args
|
||||
#else
|
||||
movs r0, #0
|
||||
movs r1, #0
|
||||
#endif
|
||||
ldr r2, =APP_ENTRY_POINT
|
||||
blx r2
|
||||
|
||||
.thumb_func
|
||||
exit:
|
||||
#ifdef FULL_LIBRARY
|
||||
mov r5, r0 // save the exit parameter/return result
|
||||
|
||||
/* Call destructors */
|
||||
ldr r0, =__dtors_start__
|
||||
ldr r1, =__dtors_end__
|
||||
dtor_loop:
|
||||
cmp r0, r1
|
||||
beq dtor_end
|
||||
ldr r2, [r0]
|
||||
add r0, #4
|
||||
push {r0-r1}
|
||||
blx r2
|
||||
pop {r0-r1}
|
||||
b dtor_loop
|
||||
dtor_end:
|
||||
|
||||
/* Call atexit functions */
|
||||
ldr r2, =_execute_at_exit_fns
|
||||
blx r2
|
||||
|
||||
/* Call debug_exit with return result/exit parameter */
|
||||
mov r0, r5
|
||||
ldr r2, =debug_exit
|
||||
blx r2
|
||||
#endif
|
||||
|
||||
/* Returned from application entry point, loop forever. */
|
||||
exit_loop:
|
||||
b exit_loop
|
||||
|
||||
.thumb_func
|
||||
memory_copy:
|
||||
cmp r0, r1
|
||||
beq 2f
|
||||
subs r2, r2, r1
|
||||
beq 2f
|
||||
1:
|
||||
ldrb r3, [r0]
|
||||
adds r0, r0, #1
|
||||
strb r3, [r1]
|
||||
adds r1, r1, #1
|
||||
subs r2, r2, #1
|
||||
bne 1b
|
||||
2:
|
||||
bx lr
|
||||
|
||||
.thumb_func
|
||||
memory_set:
|
||||
cmp r0, r1
|
||||
beq 1f
|
||||
strb r2, [r0]
|
||||
adds r0, r0, #1
|
||||
b memory_set
|
||||
1:
|
||||
bx lr
|
||||
|
||||
// default C/C++ library helpers
|
||||
|
||||
.macro HELPER helper_name
|
||||
.section .text.\helper_name, "ax", %progbits
|
||||
.balign 2
|
||||
.global \helper_name
|
||||
.weak \helper_name
|
||||
\helper_name:
|
||||
.thumb_func
|
||||
.endm
|
||||
|
||||
.macro JUMPTO name
|
||||
#if defined(__thumb__) && !defined(__thumb2__)
|
||||
mov r12, r0
|
||||
ldr r0, =\name
|
||||
push {r0}
|
||||
mov r0, r12
|
||||
pop {pc}
|
||||
#else
|
||||
b \name
|
||||
#endif
|
||||
.endm
|
||||
|
||||
HELPER __aeabi_read_tp
|
||||
ldr r0, =__tbss_start__-8
|
||||
bx lr
|
||||
HELPER abort
|
||||
b .
|
||||
HELPER __assert
|
||||
b .
|
||||
HELPER __aeabi_assert
|
||||
b .
|
||||
HELPER __sync_synchronize
|
||||
bx lr
|
||||
HELPER __getchar
|
||||
JUMPTO debug_getchar
|
||||
HELPER __putchar
|
||||
JUMPTO debug_putchar
|
||||
HELPER __open
|
||||
JUMPTO debug_fopen
|
||||
HELPER __close
|
||||
JUMPTO debug_fclose
|
||||
HELPER __write
|
||||
mov r3, r0
|
||||
mov r0, r1
|
||||
movs r1, #1
|
||||
JUMPTO debug_fwrite
|
||||
HELPER __read
|
||||
mov r3, r0
|
||||
mov r0, r1
|
||||
movs r1, #1
|
||||
JUMPTO debug_fread
|
||||
HELPER __seek
|
||||
push {r4, lr}
|
||||
mov r4, r0
|
||||
bl debug_fseek
|
||||
cmp r0, #0
|
||||
bne 1f
|
||||
mov r0, r4
|
||||
bl debug_ftell
|
||||
pop {r4, pc}
|
||||
1:
|
||||
ldr r0, =-1
|
||||
pop {r4, pc}
|
||||
// char __user_locale_name_buffer[];
|
||||
.section .bss.__user_locale_name_buffer, "aw", %nobits
|
||||
.global __user_locale_name_buffer
|
||||
.weak __user_locale_name_buffer
|
||||
__user_locale_name_buffer:
|
||||
.word 0x0
|
||||
|
||||
#ifdef FULL_LIBRARY
|
||||
.bss
|
||||
args:
|
||||
.space ARGSSPACE
|
||||
#endif
|
||||
|
||||
/* Setup attibutes of stack and heap sections so they don't take up room in the elf file */
|
||||
.section .stack, "wa", %nobits
|
||||
.section .stack_process, "wa", %nobits
|
||||
.section .heap, "wa", %nobits
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
<!DOCTYPE Board_Memory_Definition_File>
|
||||
<root name="ATSAMD51J19A">
|
||||
<MemorySegment name="FLASH" start="0x00004000" size="0x0007C000" access="ReadOnly" />
|
||||
<MemorySegment name="RAM" start="0x20000000" size="0x00030000" access="Read/Write" />
|
||||
<MemorySegment name="RAM2" start="0x47000000" size="0x00002000" access="Read/Write" />
|
||||
</root>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,128 @@
|
||||
/*****************************************************************************
|
||||
* SEGGER Microcontroller GmbH & Co. KG *
|
||||
* Solutions for real time microcontroller applications *
|
||||
*****************************************************************************
|
||||
* *
|
||||
* (c) 2017 SEGGER Microcontroller GmbH & Co. KG *
|
||||
* *
|
||||
* Internet: www.segger.com Support: support@segger.com *
|
||||
* *
|
||||
*****************************************************************************/
|
||||
|
||||
/*****************************************************************************
|
||||
* Preprocessor Definitions *
|
||||
* ------------------------ *
|
||||
* NO_FPU_ENABLE *
|
||||
* *
|
||||
* If defined, FPU will not be enabled. *
|
||||
* *
|
||||
* NO_STACK_INIT *
|
||||
* *
|
||||
* If defined, the stack pointer will not be initialised. *
|
||||
* *
|
||||
* NO_SYSTEM_INIT *
|
||||
* *
|
||||
* If defined, the SystemInit() function will not be called. By default *
|
||||
* SystemInit() is called after reset to enable the clocks and memories to *
|
||||
* be initialised prior to any C startup initialisation. *
|
||||
* *
|
||||
* NO_VTOR_CONFIG *
|
||||
* *
|
||||
* If defined, the vector table offset register will not be configured. *
|
||||
* *
|
||||
* MEMORY_INIT *
|
||||
* *
|
||||
* If defined, the MemoryInit() function will be called. By default *
|
||||
* MemoryInit() is called after SystemInit() to enable an external memory *
|
||||
* controller. *
|
||||
* *
|
||||
* STACK_INIT_VAL *
|
||||
* *
|
||||
* If defined, specifies the initial stack pointer value. If undefined, *
|
||||
* the stack pointer will be initialised to point to the end of the *
|
||||
* RAM segment. *
|
||||
* *
|
||||
* VECTORS_IN_RAM *
|
||||
* *
|
||||
* If defined, the exception vectors will be copied from Flash to RAM. *
|
||||
* *
|
||||
*****************************************************************************/
|
||||
|
||||
.syntax unified
|
||||
|
||||
.global Reset_Handler
|
||||
.extern _vectors
|
||||
|
||||
.section .init, "ax"
|
||||
.thumb_func
|
||||
|
||||
.equ VTOR_REG, 0xE000ED08
|
||||
.equ FPU_CPACR_REG, 0xE000ED88
|
||||
|
||||
#ifndef STACK_INIT_VAL
|
||||
#define STACK_INIT_VAL __RAM_segment_end__
|
||||
#endif
|
||||
|
||||
Reset_Handler:
|
||||
#ifndef NO_STACK_INIT
|
||||
/* Initialise main stack */
|
||||
ldr r0, =STACK_INIT_VAL
|
||||
bic r0, #0x7
|
||||
mov sp, r0
|
||||
#endif
|
||||
|
||||
#ifndef NO_SYSTEM_INIT
|
||||
/* Initialise system */
|
||||
ldr r0, =SystemInit
|
||||
blx r0
|
||||
.pushsection .init_array, "aw", %init_array
|
||||
.word SystemCoreClockUpdate
|
||||
.popsection
|
||||
#endif
|
||||
|
||||
#ifdef MEMORY_INIT
|
||||
ldr r0, =MemoryInit
|
||||
blx r0
|
||||
#endif
|
||||
|
||||
#ifdef VECTORS_IN_RAM
|
||||
/* Copy exception vectors into RAM */
|
||||
ldr r0, =__vectors_start__
|
||||
ldr r1, =__vectors_end__
|
||||
ldr r2, =__vectors_ram_start__
|
||||
1:
|
||||
cmp r0, r1
|
||||
beq 2f
|
||||
ldr r3, [r0]
|
||||
str r3, [r2]
|
||||
adds r0, r0, #4
|
||||
adds r2, r2, #4
|
||||
b 1b
|
||||
2:
|
||||
#endif
|
||||
|
||||
#ifndef NO_VTOR_CONFIG
|
||||
/* Configure vector table offset register */
|
||||
ldr r0, =VTOR_REG
|
||||
#ifdef VECTORS_IN_RAM
|
||||
ldr r1, =_vectors_ram
|
||||
#else
|
||||
ldr r1, =_vectors
|
||||
#endif
|
||||
str r1, [r0]
|
||||
#endif
|
||||
|
||||
#if (defined(__ARM_ARCH_FPV4_SP_D16__) || defined(__ARM_ARCH_FPV5_D16__)) && !defined(NO_FPU_ENABLE)
|
||||
/* Enable FPU */
|
||||
ldr r0, =FPU_CPACR_REG
|
||||
ldr r1, [r0]
|
||||
orr r1, r1, #(0xF << 20)
|
||||
str r1, [r0]
|
||||
dsb
|
||||
isb
|
||||
#endif
|
||||
|
||||
/* Jump to program start */
|
||||
b _start
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
/*****************************************************************************
|
||||
* SEGGER Microcontroller GmbH & Co. KG *
|
||||
* Solutions for real time microcontroller applications *
|
||||
*****************************************************************************
|
||||
* *
|
||||
* (c) 2017 SEGGER Microcontroller GmbH & Co. KG *
|
||||
* *
|
||||
* Internet: www.segger.com Support: support@segger.com *
|
||||
* *
|
||||
*****************************************************************************/
|
||||
|
||||
function Reset() {
|
||||
TargetInterface.resetAndStop();
|
||||
}
|
||||
|
||||
function EnableTrace(traceInterfaceType) {
|
||||
// TODO: Enable trace
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
<!DOCTYPE Linker_Placement_File>
|
||||
<Root name="Flash Section Placement">
|
||||
<MemorySegment name="$(FLASH_NAME:FLASH)">
|
||||
<ProgramSection alignment="0x100" load="Yes" name=".vectors" start="$(FLASH_START:)" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".init" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".init_rodata" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".text" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".dtors" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".ctors" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".rodata" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".ARM.exidx" address_symbol="__exidx_start" end_symbol="__exidx_end" />
|
||||
<ProgramSection alignment="4" load="Yes" runin=".fast_run" name=".fast" />
|
||||
<ProgramSection alignment="4" load="Yes" runin=".data_run" name=".data" />
|
||||
<ProgramSection alignment="4" load="Yes" runin=".tdata_run" name=".tdata" />
|
||||
</MemorySegment>
|
||||
<MemorySegment name="$(RAM_NAME:RAM);SRAM">
|
||||
<ProgramSection alignment="0x100" load="No" name=".vectors_ram" start="$(RAM_START:$(SRAM_START:))" />
|
||||
<ProgramSection alignment="4" load="No" name=".fast_run" />
|
||||
<ProgramSection alignment="4" load="No" name=".data_run" />
|
||||
<ProgramSection alignment="4" load="No" name=".bss" />
|
||||
<ProgramSection alignment="4" load="No" name=".tbss" />
|
||||
<ProgramSection alignment="4" load="No" name=".tdata_run" />
|
||||
<ProgramSection alignment="4" load="No" name=".non_init" />
|
||||
<ProgramSection alignment="4" size="__HEAPSIZE__" load="No" name=".heap" />
|
||||
<ProgramSection alignment="8" size="__STACKSIZE__" load="No" place_from_segment_end="Yes" name=".stack" />
|
||||
<ProgramSection alignment="8" size="__STACKSIZE_PROCESS__" load="No" name=".stack_process" />
|
||||
</MemorySegment>
|
||||
<MemorySegment name="$(FLASH2_NAME:FLASH2)">
|
||||
<ProgramSection alignment="4" load="Yes" name=".text2" />
|
||||
<ProgramSection alignment="4" load="Yes" name=".rodata2" />
|
||||
<ProgramSection alignment="4" load="Yes" runin=".data2_run" name=".data2" />
|
||||
</MemorySegment>
|
||||
<MemorySegment name="$(RAM2_NAME:RAM2)">
|
||||
<ProgramSection alignment="4" load="No" name=".data2_run" />
|
||||
<ProgramSection alignment="4" load="No" name=".bss2" />
|
||||
</MemorySegment>
|
||||
</Root>
|
||||
@@ -0,0 +1,107 @@
|
||||
<!DOCTYPE CrossStudio_Project_File>
|
||||
<solution Name="samd51" target="8" version="2">
|
||||
<project Name="samd51">
|
||||
<configuration
|
||||
Name="Common"
|
||||
Placement="Flash"
|
||||
Target="nRF52840_xxAA"
|
||||
arm_architecture="v7EM"
|
||||
arm_core_type="Cortex-M4"
|
||||
arm_endian="Little"
|
||||
arm_fp_abi="Hard"
|
||||
arm_fpu_type="FPv4-SP-D16"
|
||||
arm_interwork="No"
|
||||
arm_linker_heap_size="1024"
|
||||
arm_linker_process_stack_size="0"
|
||||
arm_linker_stack_size="1024"
|
||||
arm_simulator_memory_simulation_parameter="RX 00000000,00080000,FFFFFFFF;RWX 20000000,00030000,CDCDCDCD"
|
||||
arm_target_debug_interface_type="ADIv5"
|
||||
arm_target_device_name="ATSAMD51J19"
|
||||
arm_target_interface_type="SWD"
|
||||
build_treat_warnings_as_errors="Yes"
|
||||
c_preprocessor_definitions="__SAMD51_FAMILY;__SAMD51J19A__;ARM_MATH_CM4;FLASH_PLACEMENT=1;USE_SIMPLE_ASSERT;BOARD_METRO_M4_EXPRESS;CFG_TUSB_MCU=OPT_MCU_SAMD51"
|
||||
c_user_include_directories="../../src;$(rootDir)/hw/cmsis/Include;$(rootDir)/hw;$(rootDir)/src;$(asf4Dir);$(asf4Dir)/include;$(asf4Dir)/config;$(asf4Dir)/hri;$(asf4Dir)/hal/include;$(asf4Dir)/hal/utils/include;$(asf4Dir)/hpl/port;$(asf4Dir)/hpl/gclk"
|
||||
debug_register_definition_file="ATSAMD51J19A_Registers.xml"
|
||||
debug_target_connection="J-Link"
|
||||
gcc_entry_point="Reset_Handler"
|
||||
link_use_linker_script_file="No"
|
||||
linker_memory_map_file="ATSAMD51J19A_MemoryMap.xml"
|
||||
linker_section_placement_file="flash_placement.xml"
|
||||
linker_section_placements_segments="FLASH RX 0x00000000 0x00080000;RAM RWX 0x20000000 0x00030000"
|
||||
macros="DeviceFamily=SAMD51;Target=ATSAMD51J19A;Placement=Flash;rootDir=../../../..;asf4Dir=../../../../hw/mcu/microchip/samd/asf4/samd51"
|
||||
project_directory=""
|
||||
project_type="Executable"
|
||||
target_reset_script="Reset();"
|
||||
target_script_file="$(ProjectDir)/SAMD51_Target.js"
|
||||
target_trace_initialize_script="EnableTrace("$(TraceInterfaceType)")" />
|
||||
<folder
|
||||
Name="tinyusb"
|
||||
exclude=""
|
||||
filter="*.c;*.h"
|
||||
path="../../../../src"
|
||||
recurse="Yes" />
|
||||
<folder Name="hw">
|
||||
<folder Name="bsp">
|
||||
<file file_name="../../../../hw/bsp/ansi_escape.h" />
|
||||
<file file_name="../../../../hw/bsp/board.h" />
|
||||
<folder Name="metro_m4_express">
|
||||
<file file_name="../../../../hw/bsp/metro_m4_express/board_metro_m4_express.c" />
|
||||
<file file_name="../../../../hw/bsp/metro_m4_express/board_metro_m4_express.h" />
|
||||
</folder>
|
||||
</folder>
|
||||
<folder Name="mcu">
|
||||
<folder Name="microchip">
|
||||
<folder Name="samd">
|
||||
<folder Name="asf4">
|
||||
<folder Name="samd51">
|
||||
<folder Name="gcc">
|
||||
<file file_name="../../../../hw/mcu/microchip/samd/asf4/samd51/gcc/system_samd51.c" />
|
||||
</folder>
|
||||
<folder Name="hpl">
|
||||
<folder Name="core">
|
||||
<file file_name="../../../../hw/mcu/microchip/samd/asf4/samd51/hpl/core/hpl_init.c" />
|
||||
</folder>
|
||||
<folder Name="osc32kctrl">
|
||||
<file file_name="../../../../hw/mcu/microchip/samd/asf4/samd51/hpl/osc32kctrl/hpl_osc32kctrl.c" />
|
||||
</folder>
|
||||
<folder Name="oscctrl">
|
||||
<file file_name="../../../../hw/mcu/microchip/samd/asf4/samd51/hpl/oscctrl/hpl_oscctrl.c" />
|
||||
</folder>
|
||||
<folder Name="mclk">
|
||||
<file file_name="../../../../hw/mcu/microchip/samd/asf4/samd51/hpl/mclk/hpl_mclk.c" />
|
||||
</folder>
|
||||
<folder Name="gclk">
|
||||
<file file_name="../../../../hw/mcu/microchip/samd/asf4/samd51/hpl/gclk/hpl_gclk.c" />
|
||||
</folder>
|
||||
</folder>
|
||||
</folder>
|
||||
</folder>
|
||||
</folder>
|
||||
</folder>
|
||||
</folder>
|
||||
</folder>
|
||||
<configuration Name="Debug" build_treat_warnings_as_errors="Yes" />
|
||||
<folder
|
||||
Name="src"
|
||||
exclude=""
|
||||
filter="*.c;*.h"
|
||||
path="../../src"
|
||||
recurse="Yes" />
|
||||
<folder Name="System Files">
|
||||
<file file_name="ATSAMD51J19A_MemoryMap.xml" />
|
||||
<file file_name="ATSAMD51J19A_Registers.xml" />
|
||||
<file file_name="ATSAMD51J19A_Vectors.s" />
|
||||
<file file_name="flash_placement.xml" />
|
||||
<file file_name="SAMD51_Startup.s" />
|
||||
<file file_name="SAMD51_Target.js" />
|
||||
<file file_name="thumb_crt0.s" />
|
||||
</folder>
|
||||
<folder
|
||||
Name="segger_rtt"
|
||||
exclude=""
|
||||
filter="*.c;*.h"
|
||||
path="../../../../lib/segger_rtt"
|
||||
recurse="No" />
|
||||
</project>
|
||||
<configuration Name="Metro M4 Express" />
|
||||
</solution>
|
||||
@@ -0,0 +1,415 @@
|
||||
// **********************************************************************
|
||||
// * SEGGER Microcontroller GmbH *
|
||||
// * The Embedded Experts *
|
||||
// **********************************************************************
|
||||
// * *
|
||||
// * (c) 2014 - 2018 SEGGER Microcontroller GmbH *
|
||||
// * (c) 2001 - 2018 Rowley Associates Limited *
|
||||
// * *
|
||||
// * www.segger.com Support: support@segger.com *
|
||||
// * *
|
||||
// **********************************************************************
|
||||
// * *
|
||||
// * All rights reserved. *
|
||||
// * *
|
||||
// * Redistribution and use in source and binary forms, with or *
|
||||
// * without modification, are permitted provided that the following *
|
||||
// * conditions are met: *
|
||||
// * *
|
||||
// * - Redistributions of source code must retain the above copyright *
|
||||
// * notice, this list of conditions and the following disclaimer. *
|
||||
// * *
|
||||
// * - Neither the name of SEGGER Microcontroller GmbH *
|
||||
// * nor the names of its contributors may be used to endorse or *
|
||||
// * promote products derived from this software without specific *
|
||||
// * prior written permission. *
|
||||
// * *
|
||||
// * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND *
|
||||
// * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, *
|
||||
// * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF *
|
||||
// * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE *
|
||||
// * DISCLAIMED. *
|
||||
// * IN NO EVENT SHALL SEGGER Microcontroller GmbH BE LIABLE FOR *
|
||||
// * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR *
|
||||
// * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT *
|
||||
// * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; *
|
||||
// * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
|
||||
// * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *
|
||||
// * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE *
|
||||
// * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH *
|
||||
// * DAMAGE. *
|
||||
// * *
|
||||
// **********************************************************************
|
||||
//
|
||||
//
|
||||
// Preprocessor Definitions
|
||||
// ------------------------
|
||||
// APP_ENTRY_POINT
|
||||
//
|
||||
// Defines the application entry point function, if undefined this setting
|
||||
// defaults to "main".
|
||||
//
|
||||
// INITIALIZE_STACK
|
||||
//
|
||||
// If defined, the contents of the stack will be initialized to a the
|
||||
// value 0xCC.
|
||||
//
|
||||
// INITIALIZE_SECONDARY_SECTIONS
|
||||
//
|
||||
// If defined, the .data2, .text2, .rodata2 and .bss2 sections will be initialized.
|
||||
//
|
||||
// INITIALIZE_TCM_SECTIONS
|
||||
//
|
||||
// If defined, the .data_tcm, .text_tcm, .rodata_tcm and .bss_tcm sections
|
||||
// will be initialized.
|
||||
//
|
||||
// INITIALIZE_USER_SECTIONS
|
||||
//
|
||||
// If defined, the function InitializeUserMemorySections will be called prior
|
||||
// to entering main in order to allow the user to initialize any user defined
|
||||
// memory sections.
|
||||
//
|
||||
// FULL_LIBRARY
|
||||
//
|
||||
// If defined then
|
||||
// - argc, argv are setup by the debug_getargs.
|
||||
// - the exit symbol is defined and executes on return from main.
|
||||
// - the exit symbol calls destructors, atexit functions and then debug_exit.
|
||||
//
|
||||
// If not defined then
|
||||
// - argc and argv are zero.
|
||||
// - the exit symbol is defined, executes on return from main and loops
|
||||
//
|
||||
|
||||
#ifndef APP_ENTRY_POINT
|
||||
#define APP_ENTRY_POINT main
|
||||
#endif
|
||||
|
||||
#ifndef ARGSSPACE
|
||||
#define ARGSSPACE 128
|
||||
#endif
|
||||
.syntax unified
|
||||
|
||||
.global _start
|
||||
.extern APP_ENTRY_POINT
|
||||
.global exit
|
||||
.weak exit
|
||||
|
||||
#ifdef INITIALIZE_USER_SECTIONS
|
||||
.extern InitializeUserMemorySections
|
||||
#endif
|
||||
|
||||
.section .init, "ax"
|
||||
.code 16
|
||||
.balign 2
|
||||
.thumb_func
|
||||
|
||||
_start:
|
||||
/* Set up main stack if size > 0 */
|
||||
ldr r1, =__stack_end__
|
||||
ldr r0, =__stack_start__
|
||||
subs r2, r1, r0
|
||||
beq 1f
|
||||
#ifdef __ARM_EABI__
|
||||
movs r2, #0x7
|
||||
bics r1, r2
|
||||
#endif
|
||||
mov sp, r1
|
||||
#ifdef INITIALIZE_STACK
|
||||
movs r2, #0xCC
|
||||
ldr r0, =__stack_start__
|
||||
bl memory_set
|
||||
#endif
|
||||
1:
|
||||
|
||||
/* Set up process stack if size > 0 */
|
||||
ldr r1, =__stack_process_end__
|
||||
ldr r0, =__stack_process_start__
|
||||
subs r2, r1, r0
|
||||
beq 1f
|
||||
#ifdef __ARM_EABI__
|
||||
movs r2, #0x7
|
||||
bics r1, r2
|
||||
#endif
|
||||
msr psp, r1
|
||||
movs r2, #2
|
||||
msr control, r2
|
||||
#ifdef INITIALIZE_STACK
|
||||
movs r2, #0xCC
|
||||
bl memory_set
|
||||
#endif
|
||||
1:
|
||||
|
||||
/* Copy initialized memory sections into RAM (if necessary). */
|
||||
ldr r0, =__data_load_start__
|
||||
ldr r1, =__data_start__
|
||||
ldr r2, =__data_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__text_load_start__
|
||||
ldr r1, =__text_start__
|
||||
ldr r2, =__text_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__fast_load_start__
|
||||
ldr r1, =__fast_start__
|
||||
ldr r2, =__fast_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__ctors_load_start__
|
||||
ldr r1, =__ctors_start__
|
||||
ldr r2, =__ctors_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__dtors_load_start__
|
||||
ldr r1, =__dtors_start__
|
||||
ldr r2, =__dtors_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__rodata_load_start__
|
||||
ldr r1, =__rodata_start__
|
||||
ldr r2, =__rodata_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__tdata_load_start__
|
||||
ldr r1, =__tdata_start__
|
||||
ldr r2, =__tdata_end__
|
||||
bl memory_copy
|
||||
#ifdef INITIALIZE_SECONDARY_SECTIONS
|
||||
ldr r0, =__data2_load_start__
|
||||
ldr r1, =__data2_start__
|
||||
ldr r2, =__data2_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__text2_load_start__
|
||||
ldr r1, =__text2_start__
|
||||
ldr r2, =__text2_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__rodata2_load_start__
|
||||
ldr r1, =__rodata2_start__
|
||||
ldr r2, =__rodata2_end__
|
||||
bl memory_copy
|
||||
#endif /* #ifdef INITIALIZE_SECONDARY_SECTIONS */
|
||||
#ifdef INITIALIZE_TCM_SECTIONS
|
||||
ldr r0, =__data_tcm_load_start__
|
||||
ldr r1, =__data_tcm_start__
|
||||
ldr r2, =__data_tcm_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__text_tcm_load_start__
|
||||
ldr r1, =__text_tcm_start__
|
||||
ldr r2, =__text_tcm_end__
|
||||
bl memory_copy
|
||||
ldr r0, =__rodata_tcm_load_start__
|
||||
ldr r1, =__rodata_tcm_start__
|
||||
ldr r2, =__rodata_tcm_end__
|
||||
bl memory_copy
|
||||
#endif /* #ifdef INITIALIZE_TCM_SECTIONS */
|
||||
|
||||
/* Zero the bss. */
|
||||
ldr r0, =__bss_start__
|
||||
ldr r1, =__bss_end__
|
||||
movs r2, #0
|
||||
bl memory_set
|
||||
ldr r0, =__tbss_start__
|
||||
ldr r1, =__tbss_end__
|
||||
movs r2, #0
|
||||
bl memory_set
|
||||
#ifdef INITIALIZE_SECONDARY_SECTIONS
|
||||
ldr r0, =__bss2_start__
|
||||
ldr r1, =__bss2_end__
|
||||
mov r2, #0
|
||||
bl memory_set
|
||||
#endif /* #ifdef INITIALIZE_SECONDARY_SECTIONS */
|
||||
#ifdef INITIALIZE_TCM_SECTIONS
|
||||
ldr r0, =__bss_tcm_start__
|
||||
ldr r1, =__bss_tcm_end__
|
||||
mov r2, #0
|
||||
bl memory_set
|
||||
#endif /* #ifdef INITIALIZE_TCM_SECTIONS */
|
||||
|
||||
/* Initialize the heap */
|
||||
ldr r0, = __heap_start__
|
||||
ldr r1, = __heap_end__
|
||||
subs r1, r1, r0
|
||||
cmp r1, #8
|
||||
blt 1f
|
||||
movs r2, #0
|
||||
str r2, [r0]
|
||||
adds r0, r0, #4
|
||||
str r1, [r0]
|
||||
1:
|
||||
|
||||
#ifdef INITIALIZE_USER_SECTIONS
|
||||
ldr r2, =InitializeUserMemorySections
|
||||
blx r2
|
||||
#endif
|
||||
|
||||
/* Call constructors */
|
||||
ldr r0, =__ctors_start__
|
||||
ldr r1, =__ctors_end__
|
||||
ctor_loop:
|
||||
cmp r0, r1
|
||||
beq ctor_end
|
||||
ldr r2, [r0]
|
||||
adds r0, #4
|
||||
push {r0-r1}
|
||||
blx r2
|
||||
pop {r0-r1}
|
||||
b ctor_loop
|
||||
ctor_end:
|
||||
|
||||
/* Setup initial call frame */
|
||||
movs r0, #0
|
||||
mov lr, r0
|
||||
mov r12, sp
|
||||
|
||||
.type start, function
|
||||
start:
|
||||
/* Jump to application entry point */
|
||||
#ifdef FULL_LIBRARY
|
||||
movs r0, #ARGSSPACE
|
||||
ldr r1, =args
|
||||
ldr r2, =debug_getargs
|
||||
blx r2
|
||||
ldr r1, =args
|
||||
#else
|
||||
movs r0, #0
|
||||
movs r1, #0
|
||||
#endif
|
||||
ldr r2, =APP_ENTRY_POINT
|
||||
blx r2
|
||||
|
||||
.thumb_func
|
||||
exit:
|
||||
#ifdef FULL_LIBRARY
|
||||
mov r5, r0 // save the exit parameter/return result
|
||||
|
||||
/* Call destructors */
|
||||
ldr r0, =__dtors_start__
|
||||
ldr r1, =__dtors_end__
|
||||
dtor_loop:
|
||||
cmp r0, r1
|
||||
beq dtor_end
|
||||
ldr r2, [r0]
|
||||
add r0, #4
|
||||
push {r0-r1}
|
||||
blx r2
|
||||
pop {r0-r1}
|
||||
b dtor_loop
|
||||
dtor_end:
|
||||
|
||||
/* Call atexit functions */
|
||||
ldr r2, =_execute_at_exit_fns
|
||||
blx r2
|
||||
|
||||
/* Call debug_exit with return result/exit parameter */
|
||||
mov r0, r5
|
||||
ldr r2, =debug_exit
|
||||
blx r2
|
||||
#endif
|
||||
|
||||
/* Returned from application entry point, loop forever. */
|
||||
exit_loop:
|
||||
b exit_loop
|
||||
|
||||
.thumb_func
|
||||
memory_copy:
|
||||
cmp r0, r1
|
||||
beq 2f
|
||||
subs r2, r2, r1
|
||||
beq 2f
|
||||
1:
|
||||
ldrb r3, [r0]
|
||||
adds r0, r0, #1
|
||||
strb r3, [r1]
|
||||
adds r1, r1, #1
|
||||
subs r2, r2, #1
|
||||
bne 1b
|
||||
2:
|
||||
bx lr
|
||||
|
||||
.thumb_func
|
||||
memory_set:
|
||||
cmp r0, r1
|
||||
beq 1f
|
||||
strb r2, [r0]
|
||||
adds r0, r0, #1
|
||||
b memory_set
|
||||
1:
|
||||
bx lr
|
||||
|
||||
// default C/C++ library helpers
|
||||
|
||||
.macro HELPER helper_name
|
||||
.section .text.\helper_name, "ax", %progbits
|
||||
.balign 2
|
||||
.global \helper_name
|
||||
.weak \helper_name
|
||||
\helper_name:
|
||||
.thumb_func
|
||||
.endm
|
||||
|
||||
.macro JUMPTO name
|
||||
#if defined(__thumb__) && !defined(__thumb2__)
|
||||
mov r12, r0
|
||||
ldr r0, =\name
|
||||
push {r0}
|
||||
mov r0, r12
|
||||
pop {pc}
|
||||
#else
|
||||
b \name
|
||||
#endif
|
||||
.endm
|
||||
|
||||
HELPER __aeabi_read_tp
|
||||
ldr r0, =__tbss_start__-8
|
||||
bx lr
|
||||
HELPER abort
|
||||
b .
|
||||
HELPER __assert
|
||||
b .
|
||||
HELPER __aeabi_assert
|
||||
b .
|
||||
HELPER __sync_synchronize
|
||||
bx lr
|
||||
HELPER __getchar
|
||||
JUMPTO debug_getchar
|
||||
HELPER __putchar
|
||||
JUMPTO debug_putchar
|
||||
HELPER __open
|
||||
JUMPTO debug_fopen
|
||||
HELPER __close
|
||||
JUMPTO debug_fclose
|
||||
HELPER __write
|
||||
mov r3, r0
|
||||
mov r0, r1
|
||||
movs r1, #1
|
||||
JUMPTO debug_fwrite
|
||||
HELPER __read
|
||||
mov r3, r0
|
||||
mov r0, r1
|
||||
movs r1, #1
|
||||
JUMPTO debug_fread
|
||||
HELPER __seek
|
||||
push {r4, lr}
|
||||
mov r4, r0
|
||||
bl debug_fseek
|
||||
cmp r0, #0
|
||||
bne 1f
|
||||
mov r0, r4
|
||||
bl debug_ftell
|
||||
pop {r4, pc}
|
||||
1:
|
||||
ldr r0, =-1
|
||||
pop {r4, pc}
|
||||
// char __user_locale_name_buffer[];
|
||||
.section .bss.__user_locale_name_buffer, "aw", %nobits
|
||||
.global __user_locale_name_buffer
|
||||
.weak __user_locale_name_buffer
|
||||
__user_locale_name_buffer:
|
||||
.word 0x0
|
||||
|
||||
#ifdef FULL_LIBRARY
|
||||
.bss
|
||||
args:
|
||||
.space ARGSSPACE
|
||||
#endif
|
||||
|
||||
/* Setup attibutes of stack and heap sections so they don't take up room in the elf file */
|
||||
.section .stack, "wa", %nobits
|
||||
.section .stack_process, "wa", %nobits
|
||||
.section .heap, "wa", %nobits
|
||||
|
||||
Reference in New Issue
Block a user