embeded/Cortex-M3 Ti2018.02.12 13:35

이건 정체 불명

CMSIS Cortex-M3 Core Device Startup File for TI Stellaris

[링크 : https://github.com/speters/CMSIS/blob/master/Device/TI/LM3S/Source/ARM/startup_LM3S.s]

    [링크 : https://github.com/speters/CMSIS]


에라 모르겠다.. 없는건 아닌데 KEIL에서 지원하는건 드물고 RTOS 뿐이고

CCS를 통해서는 Stellaris와 TM4C 모두 존재하는 것으로 보인다.


[링크 : http://www.ti.com/tool/cmsis_dsp_headers]

[링크 : https://www.youtube.com/watch?v=jQZi81O3cMc]


CMSIS Drivers No CMSIS-Driver in Device Family Pack.

CMSIS-RTOS Blinky     EK-TM4C1294XL

CMSIS-RTOS Blinky     DK-TM4C129x 

[링크 : http://www.keil.com/dd2/texasinstruments/tm4c123gh6pm/]


Using the CMSIS DSP Library in Code Composer Studio™ for TM4C MCUs

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


Using the CMSIS DSP Library in Code Composer Studio™ for Stellaris®

[링크 : https://eng.eewiki.net/app/db_page/get_file.php?docid=2879]


Description

CMSIS provides additional debug functions to enlarge the Debug Access. Data can be transmitted via a certain global buffer variable towards the target system.


The Cortex-M3 / Cortex-M4 / Cortex-M7 incorporates the Instrumented Trace Macrocell (ITM) that provides together with the Serial Viewer Output (SVO) trace capabilities for the microcontroller system. The ITM has 32 communication channels; two ITM communication channels are used by CMSIS to output the following information:


ITM Channel 0: implements the ITM_SendChar function which can be used for printf-style output via the debug interface.

ITM Channel 31: is reserved for the RTOS kernel and can be used for kernel awareness debugging. 

[링크 : https://www.keil.com/pack/doc/CMSIS/Core/html/group__ITM__Debug__gr.html]

[링크 : http://www.keil.com/download/docs/402.asp]

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

CMSIS for stellaris/TM4C  (0) 2018.02.12
cortex m3 어셈블리 bl, cbz  (0) 2018.01.04
cortex-m3 keil 부트로더  (0) 2017.12.21
keil sct - 링커 스크립트  (0) 2017.12.11
lm3s 부트로더  (0) 2017.11.21
JTAG / SWD 핀 연결방법 조사..  (0) 2017.04.04
Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M3 Ti2018.01.04 16:17

B가 Branch

그러니까 x86의 JMP 같은건가?

[링크 : https://en.wikipedia.org/wiki/JMP_(x86_instruction)]


3.9.1. B, BL, BX, and BLX

Branch instructions.

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


3.9.2. CBZ and CBNZ

Compare and Branch on Zero, Compare and Branch on Non-Zero.

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

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

CMSIS for stellaris/TM4C  (0) 2018.02.12
cortex m3 어셈블리 bl, cbz  (0) 2018.01.04
cortex-m3 keil 부트로더  (0) 2017.12.21
keil sct - 링커 스크립트  (0) 2017.12.11
lm3s 부트로더  (0) 2017.11.21
JTAG / SWD 핀 연결방법 조사..  (0) 2017.04.04
Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M3 Ti2017.12.21 17:33

음.. bl_startup_rvmdk.S를 보니

아래와 같은 구문이 정상적일 경우 점프할 주소를 넣어 주는 구문인가?

어셈블리를 좀 봐야겠네...


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

;

; The reset handler, which gets called when the processor starts.

;

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

    export  Reset_Handler

Reset_Handler

    ;

    ; Initialize the processor.

    ;

    bl      ProcessorInit


    ;

    ; Branch to the SRAM copy of the reset handler.

    ;

    ldr     pc, =Reset_Handler_In_SRAM


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

;

; Initialize the processor by copying the boot loader from flash to SRAM, zero

; filling the .bss section, and moving the vector table to the beginning of

; SRAM.  The return address is modified to point to the SRAM copy of the boot

; loader instead of the flash copy, resulting in a branch to the copy now in

; SRAM.

;

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

    export  ProcessorInit

ProcessorInit

    ;

    ; Copy the code image from flash to SRAM.

    ;

    if      :def:_FLASH_PATCH_COMPATIBLE

    movs    r0, #0x1000

    else

    movs    r0, #0x0000

    endif

    movs    r1, #0x0000

    movt    r1, #0x2000

    import  ||Image$$SRAM$$ZI$$Base||

    ldr     r2, =||Image$$SRAM$$ZI$$Base||

copy_loop

        ldr     r3, [r0], #4

        str     r3, [r1], #4

        cmp     r1, r2

        blt     copy_loop


    ;

    ; Zero fill the .bss section.

    ;

    movs    r0, #0x0000

    import  ||Image$$SRAM$$ZI$$Limit||

    ldr     r2, =||Image$$SRAM$$ZI$$Limit||

zero_loop

        str     r0, [r1], #4

        cmp     r1, r2

        blt     zero_loop


    ;

    ; Set the vector table pointer to the beginning of SRAM.

    ;

    movw    r0, #(NVIC_VTABLE & 0xffff)

    movt    r0, #(NVIC_VTABLE >> 16)

    movs    r1, #0x0000

    movt    r1, #0x2000

    str     r1, [r0]


    ;

    ; Return to the caller.

    ;

    bx      lr 


[링크 : https://e2e.ti.com/support/microcontrollers/stellaris_arm/f/471/t/100834]

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

CMSIS for stellaris/TM4C  (0) 2018.02.12
cortex m3 어셈블리 bl, cbz  (0) 2018.01.04
cortex-m3 keil 부트로더  (0) 2017.12.21
keil sct - 링커 스크립트  (0) 2017.12.11
lm3s 부트로더  (0) 2017.11.21
JTAG / SWD 핀 연결방법 조사..  (0) 2017.04.04
Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M3 Ti2017.12.11 16:26

음.. 두개 섹션으로 된 녀석은 아직 발견 못함..

아무튼 이걸 이용해서 부트로더와 프로그램을 합칠 수 있을 거 같은데..

sct는 scatter의 약자라는데.. 왜 이런 용어를...


[링크 : http://www.keil.com/support/man/docs/armlink/armlink_pge1362075656353.htm]

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

cortex m3 어셈블리 bl, cbz  (0) 2018.01.04
cortex-m3 keil 부트로더  (0) 2017.12.21
keil sct - 링커 스크립트  (0) 2017.12.11
lm3s 부트로더  (0) 2017.11.21
JTAG / SWD 핀 연결방법 조사..  (0) 2017.04.04
어? 의외로 RX busy는 없네?  (0) 2017.03.27
Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M3 Ti2017.11.21 17:46

아.. 부트 시리얼이라고 따로 있었구나..

이녀석 프로젝트 분석해서 봐야 할 듯..


C:\StellarisWare\boards\ek-lm3s1968\boot_serial

C:\StellarisWare\tools\sflash



[링크 : https://e2e.ti.com/support/microcontrollers/stellaris_arm/f/471/t/237494]

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

cortex-m3 keil 부트로더  (0) 2017.12.21
keil sct - 링커 스크립트  (0) 2017.12.11
lm3s 부트로더  (0) 2017.11.21
JTAG / SWD 핀 연결방법 조사..  (0) 2017.04.04
어? 의외로 RX busy는 없네?  (0) 2017.03.27
lm3s1607 uart pull up 문제  (0) 2017.03.24
Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M3 Ti2017.04.04 11:41

이걸 샀는데 헉.. 2.54mm 간격이 아니네?!?!

아무튼.. 얘는 Serial Wire Debugger라.. JTAG 핀을 제공하지 않는다.

[링크 : http://www.devicemart.co.kr/1320869]


그림판으로 장난질.

SWD는 SWC SWD SWO 세개 이고

JTAG은 TCK TMS TDI TDO 인데

TDI를 제외한 3개의 핀은 연결이 가능한 듯 하다


데이터시트상 핀 배열은 이런데.. 

핀설명은 아래와 같음

+

[링크 : http://forum.falinux.com/zbxe/?document_srl=796669...readed_count]


+

실험을 해보니 다 필요 없고..

최소사양(?)인 SWCLK +SWDIO(I/O) 딱 두줄이면 끝..

지금까지 JTAG으로 쓴 줄 알았는데 SWD로 쓰고 있었다는거에 한번 더 깜놀..

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

keil sct - 링커 스크립트  (0) 2017.12.11
lm3s 부트로더  (0) 2017.11.21
JTAG / SWD 핀 연결방법 조사..  (0) 2017.04.04
어? 의외로 RX busy는 없네?  (0) 2017.03.27
lm3s1607 uart pull up 문제  (0) 2017.03.24
ti cortex-m3 driverlib - UARTConfigSetExpClk()  (0) 2017.03.23
Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M3 Ti2017.03.27 10:52

UART Flag에 BUSY는

어라? 전송에 대한 것?

UART Busy
When this bit is 1, the UART is busy transmitting data. This bit remains set until the complete byte, including all stop bits, has been sent from the shift register. This bit is set as soon as the transmit FIFO becomes non-empty (regardless of whether UART is enabled).
  




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

lm3s 부트로더  (0) 2017.11.21
JTAG / SWD 핀 연결방법 조사..  (0) 2017.04.04
어? 의외로 RX busy는 없네?  (0) 2017.03.27
lm3s1607 uart pull up 문제  (0) 2017.03.24
ti cortex-m3 driverlib - UARTConfigSetExpClk()  (0) 2017.03.23
lm3s1607 uart baudrate runtime change  (0) 2017.03.15
Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M3 Ti2017.03.24 10:58

얘랑은 좀 다른 이야기인데...

rs232 to rs485로 쓰다 보니

485쪽은 TXEN 하면 RX쪽이 Hi-Z로 설정되면서

아마도 0x00으로 들어 오는 듯?


그리고 driverlib에도 RX만 disable 시키는 건 없으니

함수를 하나 만들어서 RX만 disable enable을 시켜서 일단 우회

void

UARTDisable(uint32_t ui32Base)

{

    //

    // Check the arguments.

    //

    ASSERT(_UARTBaseValid(ui32Base));


    //

    // Wait for end of TX.

    //

    while(HWREG(ui32Base + UART_O_FR) & UART_FR_BUSY)

    {

    }


    //

    // Disable the FIFO.

    //

    HWREG(ui32Base + UART_O_LCRH) &= ~(UART_LCRH_FEN);


    //

    // Disable the UART.

    //

    HWREG(ui32Base + UART_O_CTL) &= ~(UART_CTL_UARTEN | UART_CTL_TXE |

                                      UART_CTL_RXE);


일단 정석(?)적인 해결책은 RX에 pull-up을 달아 주는 것

[링크 : https://e2e.ti.com/support/microcontrollers/stellaris_arm/f/471/t/45318]


OD나 PUD 안먹더라니, 직원이 push-pull로 작동한다고 하면 그런거겠지? ㅠㅠ

[링크 : https://e2e.ti.com/support/microcontrollers/stellaris_arm/f/471/t/88669]



9.2.2.27 GPIOPinTypeUART

Configures pin(s) for use by the UART peripheral.

Prototype:

void

GPIOPinTypeUART(unsigned long ulPort,

unsigned char ucPins)

Parameters:

ulPort is the base address of the GPIO port.

ucPins is the bit-packed representation of the pin(s).

Description:

The UART pins must be properly configured for the UART peripheral to function correctly. This

function provides a typical configuration for those pin(s); other configurations may work as well

depending upon the board setup (for example, using the on-chip pull-ups).

The pin(s) are specified using a bit-packed byte, where each bit that is set identifies the pin to

be accessed, and where bit 0 of the byte represents GPIO port pin 0, bit 1 represents GPIO

port pin 1, and so on.

Note:

This cannot be used to turn any pin into a UART pin; it only configures a UART pin for proper

operation. 


Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M3 Ti2017.03.23 14:21

uart의 baudrate를 설정해주는 녀석은

내부적으로 UARTDisable()과 UARTEnable()을 포함하는데

UARTEnable()은 fifo enable을 포함한다.(얘가 악의 축)


그리고 UARTDisable()은 TX 할게 있으면 다 보낼때 까지 기다려주는 역활을 한다.



void

UARTConfigSetExpClk(uint32_t ui32Base, uint32_t ui32UARTClk,

                    uint32_t ui32Baud, uint32_t ui32Config)

{

    // Stop the UART.

    UARTDisable(ui32Base);


    // Set the baud rate.

    HWREG(ui32Base + UART_O_IBRD) = ui32Div / 64;

    HWREG(ui32Base + UART_O_FBRD) = ui32Div % 64;


    // Set parity, data length, and number of stop bits.

    HWREG(ui32Base + UART_O_LCRH) = ui32Config;


    // Clear the flags register.

    HWREG(ui32Base + UART_O_FR) = 0;


    // Start the UART.

    UARTEnable(ui32Base);


void

UARTEnable(uint32_t ui32Base)

{

    //

    // Check the arguments.

    //

    ASSERT(_UARTBaseValid(ui32Base));


    //

    // Enable the FIFO.

    //

    HWREG(ui32Base + UART_O_LCRH) |= UART_LCRH_FEN;


    //

    // Enable RX, TX, and the UART.

    //

    HWREG(ui32Base + UART_O_CTL) |= (UART_CTL_UARTEN | UART_CTL_TXE |

                                     UART_CTL_RXE);

}


void
UARTDisable(uint32_t ui32Base)
{
    //
    // Check the arguments.
    //
    ASSERT(_UARTBaseValid(ui32Base));

    //
    // Wait for end of TX.
    //
    while(HWREG(ui32Base + UART_O_FR) & UART_FR_BUSY)
    {
    }

    //
    // Disable the FIFO.
    //
    HWREG(ui32Base + UART_O_LCRH) &= ~(UART_LCRH_FEN);

    //
    // Disable the UART.
    //
    HWREG(ui32Base + UART_O_CTL) &= ~(UART_CTL_UARTEN | UART_CTL_TXE |
                                      UART_CTL_RXE);
}



근데 도대체!!! 뒤에 0x00은 왜 붙는거야?

Posted by 구차니

댓글을 달아 주세요

embeded/Cortex-M3 Ti2017.03.15 10:07

테스트 코드

19200bps와 38400bps를 오가면서 1바이트씩 보내는 예제


  SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);

GPIOPinTypeUART(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1);


while(1)

{

UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 19200, UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE);

UARTCharPut(UART1_BASE,'A');

MDINDLY_mSec(100);

UARTConfigSetExpClk(UART1_BASE, SysCtlClockGet(), 38400, UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE);

UARTCharPut(UART1_BASE,'B');

MDINDLY_mSec(100);

}



근데 도대체.. 예전에는 왜 안되었던 거지??


+

추가로

FIFO 설정은 UARTConfigSetExpClk 에서 무조건 Enable 시키니 주의

Posted by 구차니

댓글을 달아 주세요