단종된 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 |