해보기는 했어?

오늘 안됐다고 포기하지 말고 용기내서 내일 다시 해 보자.

MEGAWIN

MG32F02A072 SPI

롬돌이 2022. 10. 27. 15:14
반응형

단종된 IC이긴하나 처음 나왔을 때 많이 구매 해 두었기에 이 IC를 지금까지 계속 사용중이다.

어플리케이션은 미용기기이다.

 

일단 SPI를 하기 위해서는 Manage Run-Time Environment의 MG32x02z_IRQ_Handler에서

Enable SPI0 NVIC를 선택해 준다.

ADC를 테스트 하기 위해서 함께 선택해 두었다.

 

이 후 SPI를 설정한다.

void BSP_SPI_Init (SPI_Struct* SPIx)
{
    /*=== 1. Default Initial SPI ===*/
    SPI_DeInit(SPIx);

    /*=== 2. Configure clock divider ===*/                          // SPI clock = 11.059MHz
    SPI_Clock_Select(SPIx, SPI_CK_SPIx_PR);                         // CK_SPIx = CK_SPIx_PR
    SPI_PreDivider_Select(SPIx, SPI_PDIV_1);                        // PDIV outpu = CK_SPIx /1
    SPI_Prescaler_Select(SPIx, SPI_PSC_1);                          // Prescaler outpu = PDIV outpu /1
    SPI_Divider_Select(SPIx, SPI_DIV_2);                            // DIV outpu = PDIV outpu /2

    /*=== 3. Configure SPI data line, mode and data size... ===*/
    SPI_DataLine_Select(SPIx, SPI_Standard);                        // SPI data line standard SPI
    SPI_ModeAndNss_Select(SPIx, SPI_MasterWithNss);                 // Master with NSS
    //      SPI_SingleMasterModeNssPulse_Cmd(SPIx, ENABLE);                 // Enable NSS pulse
    SPI_SingleMasterModeNssPulse_Cmd(SPIx, DISABLE);                 // Disable NSS pulse

    SPI_ClockPhase_Select(SPIx, SPI_TrailingEdge);                   // CPHA = 1
    SPI_ClockPolarity_Select(SPIx, SPI_Low);                        // CPOL = 0
    SPI_FirstBit_Select(SPIx, SPI_MSB);                             // MSB first
    SPI_DataSize_Select(SPIx, SPI_24bits);                          // Data size 24bits

    SPI_IT_Config(SPI0, SPI_INT_TC |SPI_INT_RX, ENABLE); // SPI Interrupt Source Seldct and enable
    SPI_ITEA_Cmd(SPI0, ENABLE); // SPI Interrupt Enable

    /*=== 4. Enable SPI module ===*/
    SPI_Cmd(SPI0, ENABLE);                                          // Enable SPI
}

 

MG32x02z_IRQHandler.c 함수에 보면 void SPI0_IRQHandler(void) 함수가 있다. 

SPI는 IRQ NO. = 24, Exception No. = 40이다.( chip user guide 참조)

이 파일의 위치에 그냥 두고 사용하는 것을 권장하지만 나는 이 IRQ 핸들러를

User file 인 app.c로 옮겨서 사용했다. 이 파일에 있는 것은 주석처리 했다.

 

BSP_SPI_Init(SPI0); 과 같이 호출해서 설정해 주면 된다.

SPI 통신으로 제어할 것을 여러개 사용하기 위해서 NSS는 제어하지 않고 필요할 때에

사용자 프로그램에서 제어해 주기로 했다.

 

 

 

 

 

반응형

'MEGAWIN' 카테고리의 다른 글

MG82F6D Series ADC with Interrupt - 4  (0) 2022.11.08
MG82F6D Series ADC with Interrupt - 3  (0) 2022.11.08
MG82F6D Series ADC with Interrupt - 2  (0) 2022.11.08
MG82F6D Series ADC with Interrupt - 1  (0) 2022.11.08
MG82F6D16 GPIO MODE  (0) 2022.10.25