'M052LBN_STUDY'에 해당되는 글 3건

  1. 2014.07.09 M052LBN EVM - NUVOTON 12bit ADC 테스트
  2. 2014.07.09 M052LBN EVM - SPI 테스트
  3. 2014.07.06 M052LBN EVM - UART테스트
Cortex-M/NUVOTON2014. 7. 9. 14:01

M052LBN EVM - NUVOTON 12bit ADC 테스트

M052LBN EVM - NUVOTON  12bit ADC 테스트



NUVOTON M051 시리즈 ADC는 최대 12비트해상도 이고 특이사항으로 5V까지 측정 가능하다.


- 입력레인지 : 0~5V

- 10bit 12bit, 해상도

- 8채널 싱글, 4채널 differenctial

- 760kSPS (16Mhz)




M052LBN ADC 블록도




M052LBN ADC 초기화 코드

void ADCInit( void)

{

    SYS_UnlockReg();

    /* Enable ADC module clock */

    CLK_EnableModuleClock(ADC_MODULE);

    /* ADC clock source is 22.1184MHz, set divider to 7, ADC clock is 22.1184/7 MHz */

    CLK_SetModuleClock(ADC_MODULE, CLK_CLKSEL1_ADC_S_HIRC, CLK_CLKDIV_ADC(7));

    

 

    //ADC 포트 설정

    GPIO_DISABLE_DIGITAL_PATH(P1, BIT0);


    SYS->P1_MFP &= ~(SYS_MFP_P10_Msk);

    SYS->P1_MFP |= SYS_MFP_P10_AIN0;

    SYS_LockReg();

}



M052LBN ADC Read 코드

nsigned int ADCRead( unsigned int channelNum )

{

    ADC_Open(ADC, ADC_ADCR_DIFFEN_SINGLE_END, ADC_ADCR_ADMD_SINGLE_CYCLE, BIT0<<channelNum);


    /* Power on ADC module */

    ADC_POWER_ON(ADC);


    /* clear the A/D interrupt flag for safe */

    ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);


    /* start A/D conversion */

    ADC_START_CONV(ADC);


    /* Wait conversion done */

    while(!ADC_GET_INT_FLAG(ADC, ADC_ADF_INT));


    return ADC_GET_CONVERSION_DATA(ADC, channelNum);    

}




M052LBN ADC 테스트 코드

int main(void)

{

    _SystemInit();

    

    Led1Init();

    Led1On();


    Led2Init();

    Led2On();

    

    //Serial Init

    DebugInit(BAUD_115200);

    DebugPrint("NUVOTON ADC Test Program.\r\n");

    

    //ADC 초기화

    ADCInit();


    while(1)

    {

        DebugPrint("adc=%d\r\n", ADCRead(0));

        Led1Toggle();

        Delay(300);

    }

}




M052LBN ADC 테스트 동영상

NUVOTON M052LBM 의 ADC Ch0에 연결되어 있는 VR의 전압값을 TFT-LCD 그래프로 표시하는 테스트


Posted by nexp

댓글을 달아 주세요

Cortex-M/NUVOTON2014. 7. 9. 12:52

M052LBN EVM - SPI 테스트

M052LBN EVM - SPI 테스트




M052LBN는 저렴한 MCU임에도 2채널의 SPI를 제공한다. FIFO있고 SPI속도도 빠르다.




M052LBN SPI 블록도



M052LBN SPI 초기화 함수

void SPI0_Init(void)

{

SYS_UnlockReg();    

     CLK_EnableModuleClock(SPI0_MODULE);

         

    /* Set multi function pin for SPI1 */

    //SYS->P0_MFP = SYS_MFP_P04_SPISS1 | SYS_MFP_P05_MOSI_1 | SYS_MFP_P06_MISO_1 | SYS_MFP_P07_SPICLK1;

     SYS->P1_MFP = SYS_MFP_P15_MOSI_0 | SYS_MFP_P16_MISO_0 | SYS_MFP_P17_SPICLK0;

    

    

        /* Select HXT as the clock source of SPI1 */

    CLK_SetModuleClock(SPI0_MODULE, CLK_CLKSEL1_SPI0_S_HCLK, MODULE_NoMsk);


    /* Enable SPI1 peripheral clock */

    CLK_EnableModuleClock(SPI0_MODULE);

    

    /* Lock protected registers */

    SYS_LockReg();

    

    

    /* Configure SPI1 as a master, MSB first, 8-bit transaction, SPI Mode-0 timing, clock is 6MHz */

    SPI_Open(SPI0, SPI_MASTER, SPI_MODE_0, 8, 6000000);


    /* Enable the automatic hardware slave select function. Select the SS0 pin and configure as low-active. */

    SPI_EnableAutoSS(SPI0, SPI_SS, SPI_SS_ACTIVE_LOW);

}




SPI_CNTRL 레지스터





M052LBN SPI 송수신 함수

unsigned char SPI0_WriteReadByte(unsigned char Data)

{

    SPI_WRITE_TX0(SPI0, Data);

    /* Trigger SPI transfer */

    SPI_TRIGGER(SPI0);


    /* Check busy state */

    while(SPI_IS_BUSY(SPI0));


   return SPI_READ_RX0(SPI0);

}


Posted by nexp

댓글을 달아 주세요

Cortex-M/NUVOTON2014. 7. 6. 23:00

M052LBN EVM - UART테스트

M052LBN - UART테스트




M052LBN UART 특징

M0521은 2채널의 UART가 있다. 그리고 FIFO 있고.. RS485 9bit 모지원한다. 저렴한 MCU에서 지원은 좋은것 같다.


 - Separate receive / transmit 16/16 bytes entry FIFO for data payloads

 - hardware auto-flow control and flow control

 - Supports RS-485 9-bit mode

 - Supports hardware or software enable to program RTS pin to control RS-485 transmission direction directly



M052LBN UART 블록도




M052LBN UART 초기화 코드

void U0_Init(unsigned char baud)

{

    SYS_UnlockReg();    

    /* Enable UART module clock */

    CLK_EnableModuleClock(UART0_MODULE);


    /* Select UART module clock source */

    CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_PLL, CLK_CLKDIV_UART(1));


    /* Set P3 multi-function pins for UART0 RXD and TXD */

    SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk);

    SYS->P3_MFP |= (SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0);


    /* Lock protected registers */

    SYS_LockReg(); 

    

    U0_SetBaud(baud);

}




M052LBN UART 송수신 함수

void U0_PutByte(unsigned char Data)

{

while((UART0->FSR & UART_FSR_TE_FLAG_Msk) == 0);

UART0->THR = Data;    

}


unsigned char U0_GetByte(void)

{

while(UART0->FSR & UART_FSR_RX_EMPTY_Msk); 

return UART0->RBR;

}




M052LBN RS485 기능 







Posted by nexp

댓글을 달아 주세요