embeded/Cortex-M4 Ti2018.04.20 09:39

예전에도 찾았다가 해결은 못한거 같은데

일단 간단하게 결론만 말하자면


__inline 대신에

estern __inline으로 선언하면 해결된다.

(__inline에서 호출되는 변수/함수들에 static이 되어있으면

이걸 다 따라가서 static 없애는 것 보다는 옳은 방향으로 보임)



error:  #1059-D: an entity with internal linkage cannot be referenced within an inline function with external linkage


internal linkage

internal linkage를 가지는 이름은 외부 translation unit으로 공개되지 않는다. internal linkage를 가지는 이름은 다음과 같다.


namespace scope에 선언된 static specifier가 붙은 이름

namespace scope에 선언된 anonymous union의 데이터 멤버

namespace scope에 선언된 const 혹은 constexpr이 붙고 volatile은 아닌 변수

unnamed namespace에 선언된 모든 이름



external linkage

 위에서 설명한 internal linkage와 다르게 external linkage를 가지는 이름은 다른 translation unit과 공유된다. 다시 말해서 어떤 이름이 external linkage를 가진다면 그 이름은 서로 다른 translation unit에서 사용되더라도 같은 내용을 가져야 한다.


namespace scoep에 선언 된 이름 중 internal linkage가 아닌 이름.

block scope에 선언된 함수

block scope에 선언된 변수 중에서 extern으로 선언된 변수 

[링크 : https://blog.seulgi.kim/2017/08/cpp-linkage.html]


Internal Linkage: An identifier implementing internal linkage is not accessible outside the translation unit it is declared in. Any identifier within the unit can access an identifier having internal linkage. It is implemented by the keyword static. An internally linked identifier is stored in initialized or uninitialized segment of RAM.  


External Linkage: An identifier implementing external linkage is visible to every translation unit. Externally linked identifiers are shared between translation units and are considered to be located at the outermost level of the program. In practice, this means that you must define an identifier in a place which is visible to all, such that it has only one visible definition. It is the default linkage for globally scoped variables and functions. Thus, all instances of a particular identifier with external linkage refer to the same identifier in the program. The keyword extern implements external linkage.

When we use the keyword extern, we tell the linker to look for the definition elsewhere. Thus, the declaration of an externally linked identifier does not take up any space. Extern identifiers are generally stored in initialized/uninitialized or text segment of RAM. If uninitialized, the value of the identifier is set to 0 by the kernel.

[링크 : https://www.geeksforgeeks.org/internal-linkage-external-linkage-c/]


That looks perfectly fine under the C99 rules. Because stack.c is compiled with both an extern and inline declaration of the function, it will be defined with external linkage and can also be inlined within that file.


Other files will have only the declaration, and so will link to the version with external linkage.


Note that the function isn't allowed to define any modifiable objects with static storage duration, or reference any functions or global variables that aren't extern. 

[링크 : https://stackoverflow.com/.../how-to-define-a-function-to-be-inline-internal-and-external-copy-in-c99]


If you specify both inline and extern in the function definition, then the definition is used only for inlining. In no case is the function compiled on its own, not even if you refer to its address explicitly. Such an address becomes an external reference, as if you had only declared the function, and had not defined it.


This combination of inline and extern has almost the effect of a macro. The way to use it is to put a function definition in a header file with these keywords, and put another copy of the definition (lacking inline and extern) in a library file. The definition in the header file causes most calls to the function to be inlined. If any uses of the function remain, they refer to the single copy in the library. 

[링크 : https://gcc.gnu.org/onlinedocs/gcc/Inline.html]


C99 inline semantics are often misunderstood. The inline specifier serves two purposes:


First, as a compiler hint in case of static inline and extern inline declarations. Semantics remain unchanged if you remove the specifier.


Second, in case of raw inline (ie without static or extern) to provide an inline definition as an alternative to an external one, which has to be present in a different translation unit. Not providing the external one is undefined behaviour, which will normally manifest as linking failure.

[링크 : https://stackoverflow.com/questions/16245521/c99-inline-function-in-c-file]


translation unit은 C++ compilation의 기본 단위입니다. <소스 파일 하나 + 직접/간접적으로 include된 헤더파일의 내용물(전처리기 조건에 따라 몇몇은 무시)>로 구성되어 있습니다.


translation unit 한개는 object file, library나 실행가능한 프로그램으로 컴파일 될 수 있습니다. 

[링크 : http://hashcode.co.kr/questions/1244/translation-unit에-대해서]


A translation unit is the basic unit of compilation in C++. It consists of the contents of a single source file, plus the contents of any header files directly or indirectly included by it, minus those lines that were ignored using conditional preprocessing statements.


A single translation unit can be compiled into an object file, library, or executable program.


The notion of a translation unit is most often mentioned in the contexts of the One Definition Rule, and templates. 

[링크 : https://stackoverflow.com/questions/1106149/what-is-a-translation-unit-in-c]


2016/04/12 - [embeded/Cortex-M4 Ti] - keil/c99 에서 __inline ...?


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

c99 inline과 extern  (0) 2018.04.20
tm4c1231 부트로더 + RS485  (0) 2018.01.04
tm4c 부트로더 파일 하나로 만들기 관련 검색중  (0) 2018.01.03
keil linker 옵션 entry  (0) 2017.12.28
tivaware bootloader + qs-rgb 테스트  (0) 2017.12.28
tm4c tivaware bootloader 빌드..  (2) 2017.12.26
Posted by 구차니

댓글을 달아 주세요

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) 있어야 작동


+

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

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

c99 inline과 extern  (0) 2018.04.20
tm4c1231 부트로더 + RS485  (0) 2018.01.04
tm4c 부트로더 파일 하나로 만들기 관련 검색중  (0) 2018.01.03
keil linker 옵션 entry  (0) 2017.12.28
tivaware bootloader + qs-rgb 테스트  (0) 2017.12.28
tm4c tivaware bootloader 빌드..  (2) 2017.12.26
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]

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

c99 inline과 extern  (0) 2018.04.20
tm4c1231 부트로더 + RS485  (0) 2018.01.04
tm4c 부트로더 파일 하나로 만들기 관련 검색중  (0) 2018.01.03
keil linker 옵션 entry  (0) 2017.12.28
tivaware bootloader + qs-rgb 테스트  (0) 2017.12.28
tm4c tivaware bootloader 빌드..  (2) 2017.12.26
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 구차니

댓글을 달아 주세요