embeded/Cortex-M4 Ti2018.01.04 14:35

일단.. 사용중인 보드가 UART0가 아닌 UART1을 외부용으로 쓰고 있어서 손을 봐야 했는데

bl_config.h 에서 얘가 원본이고

#define UART_ENABLE_UPDATE

#define UART_AUTOBAUD

//#define UART_FIXED_BAUDRATE     115200

#define UART_CLOCK_ENABLE         SYSCTL_RCGCUART_R0

#define UARTx_BASE                UART0_BASE

#define UART_RXPIN_CLOCK_ENABLE   SYSCTL_RCGCGPIO_R0

#define UART_RXPIN_BASE         GPIO_PORTA_BASE

#define UART_RXPIN_PCTL         0x1

#define UART_RXPIN_POS          0

#define UART_TXPIN_CLOCK_ENABLE SYSCTL_RCGCGPIO_R0

#define UART_TXPIN_BASE         GPIO_PORTA_BASE

#define UART_TXPIN_PCTL         0x1

#define UART_TXPIN_POS          1


UART1을 쓰려고 한다면 요렇게 6개를 손을 봐주어야 한다.

#define UART_ENABLE_UPDATE

//#define UART_AUTOBAUD

#define UART_FIXED_BAUDRATE     38400

#define UART_CLOCK_ENABLE         SYSCTL_RCGCUART_R1

#define UARTx_BASE                UART1_BASE

#define UART_RXPIN_CLOCK_ENABLE   SYSCTL_RCGCGPIO_R1

#define UART_RXPIN_BASE         GPIO_PORTB_BASE

#define UART_RXPIN_PCTL         0x1

#define UART_RXPIN_POS          0

#define UART_TXPIN_CLOCK_ENABLE SYSCTL_RCGCGPIO_R1

#define UART_TXPIN_BASE         GPIO_PORTB_BASE

#define UART_TXPIN_PCTL         0x1

#define UART_TXPIN_POS          1


그리고 PORTB의 2번 핀이 485 TXEN으로 했는데

좀 더 테스트를 해봐야겠지만, 38400 에서는 문제없이 PC와 1m 이내 선으로 연결해서는 문제없이 업데이트 된다.

(57600 까지는 성공적인듯.. 115k는 줄여줘도 안되네.. rs485 특성으로 보임)

(Autobaud는 작동을 못하네.. rs485 특성일려나?)

void

UARTSend(const uint8_t *pui8Data, uint32_t ui32Size)

{

    //

    // Transmit the number of bytes requested on the UART port.

    //

    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2, GPIO_PIN_2);

    Delay(10);

    while(ui32Size--)

    {

        //

        // Make sure that the transmit FIFO is not full.

        //

        while((HWREG(UARTx_BASE + UART_O_FR) & UART_FR_TXFF))

        {

        }


        //

        // Send out the next byte.

        //

        HWREG(UARTx_BASE + UART_O_DR) = *pui8Data++;

    }


    //

    // Wait until the UART is done transmitting.

    //

    UARTFlush();

    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2, 0);

    Delay(10);


LM Flash 에서는 UART로 하고 귀차니즘으로 인해(...)

Autobaud 대신 38400 으로 고정을 했는데


Program탭에서 Program Address Offset만 0x00001000 으로 바꾸어 주면 된다.

LR_IROM 0x00001000 0x00040000

{

    ER_IROM 0x00001000 0x00040000

    {

        *.o (RESET, +First)

        * (InRoot$$Sections, +RO)

    }


    RW_IRAM 0x20000000 0x00008000

    {

        ;* (vtable, +First)

        * (+RW, +ZI)

    }


(물론 해당 바이너리는 sct 파일에서 0x00000000을 0x00001000 으로 바꾸고 다시 컴파일 해야 한다)


coocox 라는 녀석을 사용중인데 이녀석은 0x1000이 아니라 0x1 섹터로 옵셋을 잡아주니 잘 쓴다.

옆에 써있듯 4번 섹터가 0x00001000 이니 offset을 0x04로 해주면 될것으로 보인다.

[링크 : http://www.coocox.org/book/coocox/CoFlash/GUI-Mode]

+

38400은 delay 없이도 일단 작동

57600은 delay(10) 있어야 작동


+

머지.. 부트로더 올리고 시리얼로 올린다음은 되는데 그 이후에는 안켜진다 -ㅁ-?

Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M4 Ti2018.01.03 09:18

영 안나오네..


[링크 : https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/634876/2342728]

[링크 : http://www.keil.com/forum/18679/]

윈도우용 툴 이용해서 합치기

[링크 : https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/543765/1984607]

    [링크 : https://superuser.com/questions/717624/concatenate-binary-files-in-windows-without-command-line]

Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M4 Ti2017.12.28 15:01

항상 만만한(?) qs-rgb 예제에서

Linker를 보다 보니... scatter 아래 Misc Control의

--entry Reset_Handler

가 보인다...?



startup_rvmdk.S에

해당 함수가 그럼 entry 포인트로 잡히고

얘는 적절한 초기화 이후 __main 을 호출하게 된다.

;******************************************************************************

;

; This is the code that gets called when the processor first starts execution

; following a reset event.

;

;******************************************************************************

        EXPORT  Reset_Handler

Reset_Handler

        ;

        ; Enable the floating-point unit.  This must be done here to handle the

        ; case where main() uses floating-point and the function prologue saves

        ; floating-point registers (which will fault if floating-point is not

        ; enabled).  Any configuration of the floating-point unit using

        ; DriverLib APIs must be done here prior to the floating-point unit

        ; being enabled.

        ;

        ; Note that this does not use DriverLib since it might not be included

        ; in this project.

        ;

        MOVW    R0, #0xED88

        MOVT    R0, #0xE000

        LDR     R1, [R0]

        ORR     R1, #0x00F00000

        STR     R1, [R0]


        ;

        ; Call the C library enty point that handles startup.  This will copy

        ; the .data section initializers from flash to SRAM and zero fill the

        ; .bss section.

        ;

        IMPORT  __main

        B       __main 


그럼.. main()이 __main 으로 맹글링 되는건가?

[링크 : https://en.wikipedia.org/wiki/Name_mangling]

[링크 : http://spikez.tistory.com/19]

[링크 : http://infocenter.arm.com/help/topic/com.arm.doc.dui0205d/RVCT_Compiler_and_Libraries_D.pdf]

Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M4 Ti2017.12.28 11:33

ICDI로 설정하고 일단은

부트로더 올리고

LM Flash 통해서 0x1000 에 시작 주소가 0x1000으로 바꾼 qs-rgb를 올리니

(Erase Method를 아무생각없이 Entire로 해서 몇번 고생..)

부트로더 안멈추고 바로 qs-rgb로 시작하는데..

부트로더에서 몇 초 기다리게는 못하려나?


올리고 나서 검증을 위해 Flash Utilties에서 부분 삭제를 해보니

부트로더에서 LED 흰색으로 켜지게 해준거 나오는거 봐서..

부팅이 진행가능하면 바로 qs-rgb로 넘어 가는거 같네...

수정한 내용

0x00000000 -> 0x00001000

;******************************************************************************

;

; qs-rgb.sct - Linker configuration file for qs-rgb.

;

; Copyright (c) 2012-2016 Texas Instruments Incorporated.  All rights reserved.

; Software License Agreement

; Texas Instruments (TI) is supplying this software for use solely and

; exclusively on TI's microcontroller products. The software is owned by

; TI and/or its suppliers, and is protected under applicable copyright

; laws. You may not combine this software with "viral" open-source

; software in order to form a larger program.

; THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.

; NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT

; NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

; A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY

; CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL

; DAMAGES, FOR ANY REASON WHATSOEVER.

; This is part of revision 2.1.3.156 of the EK-TM4C123GXL Firmware Package.

;

;******************************************************************************


LR_IROM 0x00001000 0x00040000

{

    ;

    ; Specify the Execution Address of the code and the size.

    ;

    ER_IROM 0x00001000 0x00040000

    {

        *.o (RESET, +First)

        * (InRoot$$Sections, +RO)

    }


    ;

    ; Specify the Execution Address of the data area.

    ;

    RW_IRAM 0x20000000 0x00008000

    {

        ;

        ; Uncomment the following line in order to use IntRegister().

        ;

        ;* (vtable, +First)

        * (+RW, +ZI)

    }


+

//*****************************************************************************

//

// Allows an application to perform in-place data decryption during download.

//

// If hooked, this function will be called on receipt of any new block of

// downloaded firmware image data.  The application must decrypt this data

// in place then return at which point the boot loader will write the data to

// flash.

//

// void MyDecryptionFunc(unsigned char *pucBuffer, unsigned long ulSize);

//

// where:

//

// - pucBuffer points to the first byte of data to be decrypted.

// - ulSize indicates the number of bytes of data at pucBuffer.

//

//*****************************************************************************

//#define BL_DECRYPT_FN_HOOK      MyDecryptionFunc 


bl_check.c 소스에서

사용자 함수 확인 부분과 시작 어드레스(기본값은 0x00001000) 에서

바이너리가 존재할 경우 확인하는 부분

uint32_t

CheckForceUpdate(void)

{

#ifdef CHECK_CRC

    uint32_t ui32Retcode;

#endif


#ifdef BL_CHECK_UPDATE_FN_HOOK

    //

    // If the update check function is hooked, call the application to determine

    // how to proceed.

    //

    return(BL_CHECK_UPDATE_FN_HOOK());

#else

    uint32_t *pui32App;


#ifdef ENABLE_UPDATE_CHECK

    g_ui32Forced = 0;

#endif


    //

    // See if the first location is 0xfffffffff or something that does not

    // look like a stack pointer, or if the second location is 0xffffffff or

    // something that does not look like a reset vector.

    //

    pui32App = (uint32_t *)APP_START_ADDRESS;

    if((pui32App[0] == 0xffffffff) ||

       ((pui32App[0] & 0xfff00000) != 0x20000000) ||

       (pui32App[1] == 0xffffffff) ||

       ((pui32App[1] & 0xfff00001) != 0x00000001))

    {

        return(1);

    }

...


빌드된 바이너리 파일을 보면 0x20000df8 이라고 해야하나? 아무튼 이 정보를 가지고 비교하는 듯


Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M4 Ti2017.12.26 16:25

받아둔지 좀 오래된 녀석이라 구버전일거 같은데

우여곡절 끝에 일단 keil 에서 빌드'만' 성공 -_-


보드는 ek-tm4c132gxl

소스는 C:\ti\TivaWare_C_Series-2.1.3.156\boot_loader

프로젝트 파일은 C:\ti\TivaWare_C_Series-2.1.3.156\examples\project


프로젝트 속성 - User - Run User Program Before Build/Rebuild에 아래 항목 추가

armcc --device DLM -o bl_config.inc -E ..\..\boot_loader\bl_config.c 


프로젝트 속성 - C/C++ - Preprocessor Symbols에 아래 항목 추가

UART_ENABLE_UPDATE UART_AUTOBAUD  

(위에껀 bl_config.h에 선언된 내용들 골라서 사용)


프로젝트 속성 - Linker - Scatter File 을 아래항목으로 수정

..\..\boot_loader\bl_link.sct 


빌드는 되고, 펌웨어 올려도 봤는데..

LM Flash Progammer랑 되질 않네.. 으으으 ㅠㅠ


+

__main 관련해서 검색하다 나온 녀석.. 책 한권 살까..

[링크 : http://recipes.egloos.com/5044366]


+

2017.12.27

한두개 define 열어줄게 아니라 bl_config.h 에서 여러개를 한번에 해주어야 한다.

//*****************************************************************************

//

// Selects the UART as the port for communicating with the boot loader.

//

// Depends on: None

// Exclusive of: CAN_ENABLE_UPDATE, ENET_ENABLE_UPDATE, I2C_ENABLE_UPDATE,

//               SSI_ENABLE_UPDATE, USB_ENABLE_UPDATE

// Requires: UART_AUTOBAUD or UART_FIXED_BAUDRATE, UART_CLOCK_ENABLE

//           UARTx_BASE, UART_RXPIN_CLOCK_ENABLE, UART_RXPIN_BASE

//           UART_RXPIN_PCTL, UART_RXPIN_POS, UART_TXPIN_CLOCK_ENABLE,

//           UART_TXPIN_BASE, UART_TXPIN_PCTL and UART_TXPIN_POS

//

//***************************************************************************** 

#define UART_ENABLE_UPDATE


Posted by 구차니

댓글을 달아 주세요

  1. ㅎㅎ 메리크리스마스입니당~~~^^ (몇일 지났지만^^)

    2017.12.27 07:29 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 늦었지만 메리크리스 마스 보내셨나요 ㅋㅋ
      요즘 하도 정신없어서 제 블로그에 머 적기도 빠듯하다 보니.. 이웃순회를 못하고 사네요 ㅠㅠ
      올해도 몇일 안남았는데 마무리 잘하시고 내년에는 행복한 일만 가득한 한해 되시길 기원합니다.

      2017.12.27 08:23 신고 [ ADDR : EDIT/ DEL ]

embeded/Cortex-M4 Ti2017.12.21 11:26

위의 USB에 연결하고 Power Select를 DEBUG로 하고 

C:\ti\TivaWare_C_Series-2.1.3.156\examples\boards\ek-tm4c123gxl\usb_dev_gamepad

usb gamepad 바이너리를 올린다음

[링크 : http://www.ti.com/lit/ug/spmu296/spmu296.pdf]


왼쪽의 USB에 연결하고 Power Select를 DEVICE로 해주니 엌ㅋ

HID 장비로 해서 게임 컨트롤러 인식이 된다. ㄷㄷ

보드에 버튼이 두개 있는데.. 도대체 저 X/Y/Z 축은 어떤 정보로 연결된건지 모르겠고

(기울기 센서 있는것도 아니니.. 무슨 값일까?)


아무튼 Example Game Pad 라는 이름으로 인식된다.



+

USB_DP / USB_DM 으로, PD4 / PD5에 연결이 되어있네..

driverlib에서 usb 지원하니 별다른 칩셋이나 회루 구성없이 바로 되나 보네..


[링크 : http://www.ti.com/lit/ug/spmu296/spmu296.pdf]


칩에 USB 컨트롤러가 들어있네

[링크 : http://www.ti.com/lit/ds/symlink/tm4c123gh6pm.pdf]

Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M4 Ti2017.01.10 18:53

정체 불명으로 의외로 빈번하게 안켜져서

하나하나 죽여 나가다 보니


while(!SysCtlPeripheralReady(SYSCTL_PERIPH_HIBERNATE)) ; 

위의 구문에서 무한루프 돌고 있었던거 같은데

VDD3ON 모드도 이야기가 나오고 이것저것 나오지만..

결론은 tivaware나 tm4c 시리즈가 이상해요 인가?


I discovered this on the Launchpad. I cannot hibernate with VDD3ON turned off becauseof the way my LDO is connected.

Yes, on the EK-TM4C123 only VDD3ON is the available Hibernate Mode.

[링크 : https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/389095/1375698]


[링크 : https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/385023/1358006#1358006]

'embeded > Cortex-M4 Ti' 카테고리의 다른 글

tm4c tivaware bootloader 빌드..  (2) 2017.12.26
심심해서 켜본 ek-tm4c123gxl 보드 (USB)  (0) 2017.12.21
tm4c hibernate module 초기화 무한루프  (0) 2017.01.10
tivaware swd debug / semihosting  (0) 2017.01.10
tm4c 하이버네이트 소스...  (0) 2016.12.20
tm4c rtc trim...  (0) 2016.11.23
Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M4 Ti2017.01.10 18:36


[링크 : http:/ /processors.wiki.ti.com/index.php/Debug_Handbook_for_CCS]

    [링크 : http://processors.wiki.ti.com/index.php/Debug_Handbook_for_CCS#Cortex_M3.2FM4.2FTiva.2FMSP432]


음.. XDS-200 같은 고가 JTAG이 있어야 가능한건가?

ARM's Serial Wire Output(SWO) Trace capability is one such tool incorporated in Code Composer Studio for the following Cortex M based TI devices:

MSP432

Tiva C (TM4C129 and TM4C123)

CC26xx

CC13xx


Tiva/TM4C

Pre-requisites:

CCS Version 6.1.1 or higher

XDS200 debug probe firmware version 1.0.0.5 or later. (Contact your XDS200 vendor for details on how to determine debug probe version and update it if needed).

[링크 : http://processors.wiki.ti.com/index.php/SWO_Trace]


+

semihosting을 활성화 하고 그거에 맞춰서 코딩해라?

[링크 : http://www.coocox.org/forum/viewtopic.php?f=2&t=3588]

[링크 : http://www.keil.com/support/man/docs/armcc/armcc_pge1358787046598.htm]

[링크 : http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471g/Bgbjjgij.html]

[링크 : http://www.trace32.com/wiki/index.php/SemiHosting_과_그_활용]

[링크 : http://processors.wiki.ti.com/index.php/Semihosting]

[링크 : http://www.edaboard.com/thread207776.html]

'embeded > Cortex-M4 Ti' 카테고리의 다른 글

심심해서 켜본 ek-tm4c123gxl 보드 (USB)  (0) 2017.12.21
tm4c hibernate module 초기화 무한루프  (0) 2017.01.10
tivaware swd debug / semihosting  (0) 2017.01.10
tm4c 하이버네이트 소스...  (0) 2016.12.20
tm4c rtc trim...  (0) 2016.11.23
tm4c rtc 빨라...  (0) 2016.11.02
Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M4 Ti2016.12.20 10:49

my Ti 계정 있어야 함

진즉에 검색해볼걸 그랬나...


SW-DK-TM4C123G-2.1.3.156.exeDK-TM4C123GL Kit Software60168K

[링크 : http://software-dl.ti.com/tiva-c/SW-TM4C/latest/index_FDS.html]



소스 기본 골격 자체는 lm3s1968이랑 차이가 없네

    //
    // Check to see if Hibernation module is already active, which could mean
    // that the processor is waking from a hibernation.
    //
    if(HibernateIsActive())
    {
        //
        // Read the status bits to see what caused the wake.
        //
        ui32Status = HibernateIntStatus(0);
        HibernateIntClear(ui32Status);

        //
        // If the wake is due to button or RTC, then read the first location
        // from the battery backed memory, as the hibernation count.
        //
        if(ui32Status & (HIBERNATE_INT_PIN_WAKE | HIBERNATE_INT_RTC_MATCH_0))
        {
            HibernateDataGet(&ui32HibernateCount, 1);
        }
    }

    //
    // Enable the Hibernation module.  This should always be called, even if
    // the module was already enabled, because this function also initializes
    // some timing parameters.
    //
    HibernateEnableExpClk(ROM_SysCtlClockGet());

    //
    // If the wake was not due to button or RTC match, then it was a reset.
    //
    if(!(ui32Status & (HIBERNATE_INT_PIN_WAKE | HIBERNATE_INT_RTC_MATCH_0)))
    {
        //
        // Configure the module clock source.
        //
        HibernateClockConfig(HIBERNATE_OSC_LOWDRIVE);

        //
        // Wait a couple of seconds in case we need to break in with the
        // debugger.
        //
        SysTickWait(3 * 100);

        //
        // Allow time for the crystal to power up.  This line is separated from
        // the above to make it clear this is still needed, even if the above
        // delay is removed.
        //
        SysTickWait(15);
    }

    //
    // Clear and enable the RTC and set the match registers to 5 seconds in the
    // future. Set both to same, though they could be set differently, the
    // first to match will cause a wake.
    //
    HibernateRTCSet(0);
    HibernateRTCEnable();
    HibernateRTCMatchSet(0, 5);

    //
    // Set wake condition on pin or RTC match.  Board will wake when 5 seconds
    // elapses, or when the button is pressed.
    //
    HibernateWakeSet(HIBERNATE_WAKE_PIN | HIBERNATE_WAKE_RTC);

    //
    // Request hibernation.
    //
    HibernateRequest();


'embeded > Cortex-M4 Ti' 카테고리의 다른 글

tm4c hibernate module 초기화 무한루프  (0) 2017.01.10
tivaware swd debug / semihosting  (0) 2017.01.10
tm4c 하이버네이트 소스...  (0) 2016.12.20
tm4c rtc trim...  (0) 2016.11.23
tm4c rtc 빨라...  (0) 2016.11.02
tm4c hibernate module 초기화 관련..  (0) 2016.11.01
Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M4 Ti2016.11.23 17:08

원인 불명(?)으로

trim 값이 0x7FFF가 기본값인데

0x0114정도 들어있어서

어느 순간인가 갑자기 1초 더해지는게 아닌 2초가 더해지는 현상을 발견 -_-


결론은.. 이걸 어떻게 구워삶냐 인가..

일단 

  if(HibernateIsActive())

{

HibernateRTCTrimSet(0x7FFF);

}

식으로 되어 있어야 trim이 설정되는거 같은데 끄응... 머리 아프네

어떤 조건에서 설정이 되는지 알수가 없다보니..


+

일단은.. hibernate가 on 되어야 설정이 되는데

그렇다면.. 설정이 안된채로 넘어간적도 있다는 건가? 싶은데.. 머지?


데이터 시트 상으로는, 64초 마다 더하거나 뺸다고

그런 이유로 보고 있으면 갑자기 시간이 2초가 간다거나 하는 식으로 드러난다.

(물론 0x7FFF 보다 적을 경우는 빠르게 가고 0x7FFF < x < 0x10000 일 경우에는 느리게가는 듯?)


+

lm3s1607의 hibernate예제

클럭 초기화가 두번이네.. 일단은 이렇게 해주니 문제없이 rtc가 가동되는 듯..

     //

    // Enable the Hibernation module.

    //

    SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE);


    //

    // Per an erratum, sometimes on wake the Hibernation module control

    // register will be cleared when it should not be.  As a workaround a

    // location in the non-volatile data area can be read instead.  This data

    // area is cleared to 0 on reset, so if the first location is non-zero then

    // the Hibernation module is in use.  In this case, re-enable the

    // Hibernation module which will ensure that the control register bits have

    // the proper value.

    //

    HibernateDataGet(&ulHibernateCount, 1);

    if(ulHibernateCount)

    {

        HibernateEnableExpClk(SysCtlClockGet());

        HibernateClockSelect(HIBERNATE_CLOCK_SEL_DIV128);

    }


    //

    // Check to see if Hibernation module is already active, which could mean

    // that the processor is waking from a hibernation.

    //

    if(HibernateIsActive())

    {

        //

        // Read the status bits to see what caused the wake.

        //

        ulStatus = HibernateIntStatus(0);

    }


    //

    // Enable the Hibernation module.  This should always be called, even if

    // the module was already enabled, because this function also initializes

    // some timing parameters.

    //

    HibernateEnableExpClk(SysCtlClockGet());


    //

    // If the wake was not due to button or RTC match, then it was a reset.

    //

    if(!(ulStatus & (HIBERNATE_INT_PIN_WAKE | HIBERNATE_INT_RTC_MATCH_0)))

    {

        //

        // Configure the module clock source.

        //

        HibernateClockSelect(HIBERNATE_CLOCK_SEL_DIV128);


        //

        // Finish the wake cause message.

        //

        RIT128x96x4StringDraw("RESET", COL(7), ROW(4), 15);


        //

        // Wait a couple of seconds in case we need to break in with the

        // debugger.

        //

        SysTickWait(3 * 100);


        //

        // Allow time for the crystal to power up.  This line is separated from

        // the above to make it clear this is still needed, even if the above

        // delay is removed.

        //

        SysTickWait(15);

    }


    //


Posted by 구차니

댓글을 달아 주세요