MSP432 JLINK JTAG SWD 오류

[MSP430]/MSP432 | 2016.05.16 22:22
Posted by nexp

 잘 동작하던 MSP432 JTAG가 붙었다 안붙었다(안붙는 경우가 더 많음) 하는 현상이 발생 했는데...

여러가지 시도 끝에 JTAG에서 공급되는 전원을 차단하니 잘 동작 한다.


전원레벨차이가 아닐까 싶다.


다음에는 JTAG전원 사용여부를 선택하는 비드를 추가 해두어야 할것 같다.

TAG MSP432

MSP432  - GPIO 스위치 인터럽트 테스트



MSP432 EVM에는 2개의 LED와 1개 스위치가 있고 GPIO인터럽트를 테스트 하기 위해 P10.3에 연결되어 있는 스위치로 테스트 해 보았다.



MSP432 GPIO 인터럽트 초기화 코드

   MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P10, GPIO_PIN3);

    MAP_GPIO_clearInterruptFlag(GPIO_PORT_P10, GPIO_PIN3);

    MAP_GPIO_enableInterrupt(GPIO_PORT_P10, GPIO_PIN3);



    /* Enabling interrupts and starting the watchdog timer */

    MAP_Interrupt_enableInterrupt(INT_PORT10);

    MAP_Interrupt_enableSleepOnIsrExit();

    MAP_Interrupt_enableMaster();




MSP432 GPIO 인터럽트 핸들러

void PORT10_IRQHandler(void)

{

    uint32_t status = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P10);

    MAP_GPIO_clearInterruptFlag(GPIO_PORT_P10, status);


    if (status & GPIO_PIN10)

    {


    }

}


MSP432 EVM - SPI테스트

[MSP430]/MSP432 | 2016.05.16 14:38
Posted by nexp

MSP432 EVM - SPI테스트



[MSP432 EVM] 보드의 SPI 포트는 UCB1 P6.2, P6.3, P6.4, P6.5에 할당되어 있다. SPI로 핀을 할당하기 위해 코드에서 아래와 같이 설정해 주면 된다.




void PinMuxConfig(void)

{

    //

    // Configure P6.3 for EUSCI_B1_SPI_I2C EUSCI_B1_SPI_I2C.CLK

    //

    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P6, GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);

    //

    // Configure P6.4 for EUSCI_B1_SPI_I2C EUSCI_B1_SPI_I2C.SIMO

    //

    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P6, GPIO_PIN4, GPIO_PRIMARY_MODULE_FUNCTION);

    //

    // Configure P6.5 for EUSCI_B1_SPI_I2C EUSCI_B1_SPI_I2C.SOMI

    //

    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P6, GPIO_PIN5, GPIO_PRIMARY_MODULE_FUNCTION);

    //

    // Configure P6.2 for EUSCI_B1_SPI_I2C EUSCI_B1_SPI_I2C.STE

    //

    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P6, GPIO_PIN2, GPIO_PRIMARY_MODULE_FUNCTION);

}





MSP432 SPI 초기화 함수

/* SPI Master Configuration Parameter */

const eUSCI_SPI_MasterConfig spiMasterConfig =

{

        EUSCI_B_SPI_CLOCKSOURCE_SMCLK,             // SMCLK Clock Source

        3000000,                                   // SMCLK = DCO = 3MHZ

        500000,                                    // SPICLK = 500khz

        EUSCI_B_SPI_MSB_FIRST,                     // MSB First

        EUSCI_B_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT,    // Phase

        EUSCI_B_SPI_CLOCKPOLARITY_INACTIVITY_HIGH, // High polarity

        EUSCI_B_SPI_3PIN                           // 3Wire SPI Mode

};



void SPI0_Init(void)

{

    /* Selecting  SPI mode */

    PinMuxConfig();


    /* Configuring SPI in 3wire master mode */

    SPI_initMaster(EUSCI_B0_BASE, &spiMasterConfig);


    /* Enable SPI module */

    SPI_enableModule(EUSCI_B0_BASE);


    /* Enabling interrupts */

    SPI_enableInterrupt(EUSCI_B0_BASE, EUSCI_B_SPI_RECEIVE_INTERRUPT);

    Interrupt_enableInterrupt(INT_EUSCIB0);

    Interrupt_enableSleepOnIsrExit();

    TXData = 0x01;

}





MSP432 SPI 송수신 함수

unsigned char SPI0_WriteReadByte(unsigned char Data)

{

        while (!(SPI_getInterruptStatus(EUSCI_B0_BASE, EUSCI_B_SPI_TRANSMIT_INTERRUPT)));


        RXData = SPI_receiveData(EUSCI_B0_BASE);


        /* Send the next data packet */

        SPI_transmitData(EUSCI_B0_BASE, Data);

}





MSP432 EVM - UART 테스트

[MSP430]/MSP432 | 2016.05.07 20:00
Posted by nexp

MSP432 EVM - UART 테스트





MSP43는 총 4개의 UART를 가지고 있다.

MSP432 EVM의 UART는 EUSCI_A0_BASE의 P1.2->RXD, P1.3->TXD 에 할당이 되어 있다.



MSP432의 보레이트 설정은 MSP430 보레이트 계산기를 이용하면 동일하게 설정 가능하다.

http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/



MSP432 UART 초기화 설정 코드


const eUSCI_UART_Config uartConfig =

{

        EUSCI_A_UART_CLOCKSOURCE_SMCLK,          // SMCLK Clock Source

        13,                                      // BRDIV = 13

        0,                                       // UCxBRF = 0

        37,                                      // UCxBRS = 37

        EUSCI_A_UART_NO_PARITY,                  // No Parity

        EUSCI_A_UART_MSB_FIRST,                  // MSB First

        EUSCI_A_UART_ONE_STOP_BIT,               // One stop bit

        EUSCI_A_UART_MODE,                       // UART mode

        EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION  // Oversampling

};



    /* Selecting P1.2 and P1.3 in UART mode */

    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);


    /* Setting DCO to 24MHz (upping Vcore) */

    FlashCtl_setWaitState(FLASH_BANK0, 2);

    FlashCtl_setWaitState(FLASH_BANK1, 2);

    MAP_PCM_setCoreVoltageLevel(PCM_VCORE1);

    CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_24);


    /* Configuring UART Module */

    MAP_UART_initModule(EUSCI_A0_BASE, &uartConfig);


    /* Enable UART module */

    MAP_UART_enableModule(EUSCI_A0_BASE);





MSP432 UART 송수신 함수 코드 

unsigned char U0_GetByte(void)

{

    unsigned char  temp = 0;

    temp = MAP_UART_receiveData(EUSCI_A0_BASE);


    return temp;

}


void U0_PutByte(unsigned char Data)

{

    MAP_UART_transmitData(EUSCI_A0_BASE, Data);

}




MSP432 EVM - TIMER32 테스트

[MSP430]/MSP432 | 2016.05.07 16:30
Posted by nexp

MSP432 EVM - TIMER32 테스트



기존 MSP430을 사용하면서 아쉬웠던 점은 16비트 코어 이므로 타이머나 long 타입 처리 드이 아쉬웠는데 MSP432의 새로운 기능으로 32비트 타이머가 있어 유용할 것 같다.



MSP432 타이머 초기화 함수

  TIMER32-> rCONTROL1.b.bMODE = 0; // 프리 런 

  TIMER32-> rCONTROL1.b.bIE = 1; // 인터럽트 비활성화 

  TIMER32-> rCONTROL1.b.bPRESCALE = 2; // 분주 / 256    

  TIMER32-> rCONTROL1.b.bSIZE = 0; // 16bit 

  TIMER32-> rCONTROL1.b.bONESHOT = 0; // Wrapping mode   

  TIMER32-> rCONTROL1.b.bENABLE = 1; // Timer를 사용     

  NVIC_ISER0 | = 1 << 25;     

  __enable_interrupt ();




MSP432 인터럽트 핸들러

void T32_1_Handler(void ) 

{

  gTimeTick_1++;


  TIMER32_INTCLR1=0x1;

}



MSP432 성능 테스트 - GPIO토글

[MSP430]/MSP432 | 2016.05.06 18:06
Posted by nexp

MSP432 성능 테스트 - GPIO토글



MSP432는 Cortex-M4 코어의 최대 48Mhz로 동작하는 저전력 MCU이다. 단순 비교는 의미 없기는 하지만 간단히 GPIO토글 속도로 성능 테스트를 진행 해 보았다.



MSP432의 CPU성능 테스트를 위해 TI에서 제공하는 기본 MSP432 GPIO 토글 예제를 구동해 보았다.


MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P7, GPIO_PIN6);


GPIO토글 속도는 16khz로 측정 된다.

너무 느리다.

MSP432 클럭 설정을 좀 들여다 볼 필요가 있을것 같다.



MSP432는 10kHz ~ 48Mhz로 구동 가능하고 2개의 외부 클럭과, 5개의 내부 클럭 소스로 구성된다.



MSP432의 클럭 소스

LFXTCLK 외부 클럭 Low-frequency oscillator (LFXT)에서 32768Hz 등을 이용 가능 (32kHz 이하 주파수)

VLOCLK 내부 클럭 : 10KHz 정도의 VLO (Very low power low frequency oscillator) 시계

REFOCLK 내부 클럭 : 32k 또는 128KHz의 REFO (low-power low-frequency oscillator) 시계

DCOCLK 내부 클럭 : DCO (digitally controlled oscillator) 클럭 주파수 선택 가능

MODCLK 내부 클럭 : 24MHz의 low-power oscillator

HFXTCLK 외부 클럭 : 고속 클럭 HFXT (High-frequency oscillator) 1MHz ~ 48MHz 범위

SYSOSC 내부 클럭 : 5MHz






물론 클럭 별로 파워 선택이 필요하고 제약사항도 따른다. 최대한의 저전력 구동을 위해 이런 구조가 된것 같지만 개발자는 신경 써야 할 부분이 많아 져서 부담으로 다가올것 같다.







우선 클럭 속도를 좀더 올리기 위해 코드 수정이 필요한데

system_msp432p401r.c

파일에서 설정 가능하다.


48Mhz로 설정해서 구동해 보자.

//  CPU Frequency

//     <1500000> 1.5 MHz

//     <3000000> 3 MHz

//     <12000000> 12 MHz

//     <24000000> 24 MHz

//     <48000000> 48 MHz


//#define  __SYSTEM_CLOCK    1500000


#define  __SYSTEM_CLOCK    48000000



48Mhz 설정하고 GPIO 토글 속도를 측정해 보면

1Mhz

로 측정된다.


   127                  MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P7, GPIO_PIN6);

   \                     ??main_1: (+1)

   \   00000014   0x2140             MOVS     R1,#+64

   \   00000016   0x2007             MOVS     R0,#+7

   \   00000018   0x.... 0x....      BL       GPIO_toggleOutputOnPin

   \   0000001C   0xE7FA             B.N      ??main_1

   \   0000001E   0xBF00             Nop      

   \                     ??main_0:

   \   00000020   0x02000864         DC32     0x2000864




TI제공 함수를 이용하지 않고 레제스터 직접 제어 해 보았다.

2Mhz

로 측정된다.

다른 회사의 Cortex-M4 코어에 있는 GPIO토글 레지스터가 있으면 좋을것 같은데... 

#define OFS_LIB_PAOUT   ((uint32_t)&P1->OUT - (uint32_t)P1)

#define PORT7           ((uint32_t)P7 + OFS_LIB_PAOUT)  



       98                  HWREG16(PORT7) ^= GPIO_PIN6;


   \                     ??main_1: (+1)

   \   00000016   0x8801             LDRH     R1,[R0, #+0]

   \   00000018   0xF081 0x0140      EOR      R1,R1,#0x40

   \   0000001C   0x8001             STRH     R1,[R0, #+0]

   \   0000001E   0xE7FA             B.N      ??main_1

   \                     ??main_0:

   \   00000020   0x02000864         DC32     0x2000864

   \   00000024   0x40004C62         DC32     0x40004c62



토글 하지 않고 직접 On/Off를 반복해서 측정 해 보니 

12Mhz로 측정이 된다.


와 비교해 보면 비슷한것 같은데... 저전력 기능을 감안하면 성능면에서는 나쁘지 않은것 같다.


MSP432 개발환경 설정하기

[MSP430]/MSP432 | 2016.05.05 23:30
Posted by nexp

MSP432 개발환경 설정하기




TI 제공 테스트 예제는 아래 링크에서 다운 받을 수 있다.

http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSPWare/latest/index_FDS.html


MSP432_drv_code.zip



MSP432 는 Cortex-M4 코어 이므로 IAR EWARM에서 컴파일 가능하다. EWARM 7.4이상 버전이 필요하다.



IAR 환경설정

$PROJ_DIR$\

$PROJ_DIR$\..\..\..\..\driverlib\MSP432P4xx\

$TOOLKIT_DIR$\inc\TexasInstruments

$TOOLKIT_DIR$\inc\TexasInstruments\CMSIS

$TOOLKIT_DIR$\CMSIS\Include



ewarm

TARGET_IS_MSP432P4XX

__MSP432P401R__





TI에서도 다양한 툴을 제공한다. 

그중 PinMux 는 핀설정을 좀더 쉽게 할 수 있도록 제공하는 툴로 웹상에서 실행 가능하며 나름편리하게 구성되어 있다.

https://dev.ti.com/

https://dev.ti.com/pinmux/






MSP432 DriverLib 


MSP432 DriverLib available as source

Always the latest, most updated version 

Library available as BSD source = industry standard

Flexibility for users to further customize/enhance


MSP432 DriverLib implemented & tested in ROM

ROM has lower current consumption

No wait-state [ even @ max speed = 48MHz]

Frees up flash space (25kB) for application code

Fully validated & robust ROM code: no future major changes










MSP432 EVM 보드 제작


TI사의 새로운 저전력 MCU인 MSP432 EVM 보드를 M-Tupe EVM 형태로 제작 했다.

48Mhz Cortex-M4 코어를 적용하고 기존 저전력 MCU인 MCP430보다 코어 속도 및 FPU가 추가되어  저전력 이면서 성능 향상시킨 모델이다.





MSP432 EVM 회로도









MSP432 EVM 보드는 M-Type EVM 형태의 표준 핀맵으로 제작 해서 기존의 다양한 확장 보드에서 테스트 가능하다.





Ethernet W5500, W5200 테스트 확장보드




MP3, Ehternet 확장 테스트 보드




TFT-LCD 확장 테스트 보드










MSP432 - Cortex-M4 저전력 MCU 출시

[MSP430]/MSP432 | 2016.05.05 11:54
Posted by nexp

MSP432 - Cortex-M4 저전력 MCU 출시


TI에서 MSP430 시리즈를 좀더 업그레이드 해서 MSP432시리즈를 출시 했다.

Cortex-M4 코어의 48Mhz로 동작하는 저전력용 MCU이다. 

MSP430 코어를 업그레이드 했으면 좀더 좋았을것 같은데 Cortex 코어로 넘어가서 다양성 측면에서 보면 아쉬운점이 있다.

(MCU코어 시장이 Cortex가 거의 평정하고 있는 시점에서 다양한 코어가 계속 발전 했으면 하는 엔지니어적인 생각이다.)



어째거나 Cortex-M4 의 FPU까지 포함되어 있고 저전력을 지원한다면 저전력 분야에서 적용될 부분이 많을것 같다.





MSP430 코어와 비교해 보면 아래와 같이 성능 향상이 되어 있다.














TAG MSP432

블로그 이미지

nexp

카테고리

분류 전체보기 (1560)
[MyProject] (48)
[TI] (75)
[NXP] (51)
[ST_MICRO] (129)
[FreeScale] (31)
[MSP430] (140)
[Microchip] (131)
Cortex-M (36)
[ATMEL] (29)
[AnalogDevice] (22)
[Embedded] (2)
ARM9 (24)
[AVR] (80)
[DSP] (111)
[8051] (21)
[MCU] (50)
[INTERFACE] (213)
[AppBoard] (23)
[ROBOT] (25)
[MODULE] (129)
[SENSOR] (41)
[DATA] (21)
[FPGA] (32)
[EVB] (1)
[Proramming] (38)
[MyLog] (6)
[IDEA] (0)
[Utility] (19)
[Book] (24)
취미생활 (4)
[Link] (2)