- /**************************************************************************//**
- * [url=home.php?mod=space&uid=288409]@file[/url] main.c
- * [url=home.php?mod=space&uid=895143]@version[/url] V2.1
- * $Revision: 8 $
- * $Date: 16/01/09 3:40p $
- * [url=home.php?mod=space&uid=247401]@brief[/url] A MP3 file player demo using internal audio codec used to playback MP3 file stored in SD card.
- *
- * @note
- * Copyright (C) 2016 Nuvoton Technology Corp. All rights reserved.
- *
- ******************************************************************************/
- #include <stdio.h>
- #include <string.h>
- #include "NUC505Series.h"
- #include "config.h"
- #include "diskio.h"
- #include "ff.h"
- uint32_t volatile u32BuffPos = 0;
- FATFS FatFs[_VOLUMES]; /* File system object for logical drive */
- #ifdef __ICCARM__
- #pragma data_alignment=32
- BYTE Buff[16] ; /* Working buffer */
- #endif
- #ifdef __ARMCC_VERSION
- __align(32) BYTE Buff[16] ; /* Working buffer */
- #endif
- /*---------------------------------------------------------*/
- /* User Provided RTC Function for FatFs module */
- /*---------------------------------------------------------*/
- /* This is a real time clock service to be called from */
- /* FatFs module. Any valid time must be returned even if */
- /* the system does not support an RTC. */
- /* This function is not required in read-only cfg. */
- unsigned long get_fattime (void)
- {
- unsigned long tmr;
- tmr=0x00000;
- return tmr;
- }
- //---------------------------------------------------------
- //--- Initial SD0 multi-function GPIO pin
- //
- // NUC505 support 3 groups of GPIO pins and SD sockets for same one SD port.
- // Please select ONLY ONE configuration from them.
- // 1. SD-A socket on daughter board + default SD0_Init(). (Default)
- // 2. SD-B socket on main board + short JP3 and JP4
- // + define compile flag "SDH_GPIO_GB" in SD0_Init().
- // (Note: this configuration conflict with UART1)
- // 3. SD-C socket on main board + short JP3 and JP2
- // + define compile flag "SDH_GPIO_GA" in SD0_Init()
- // (Note: this configuration conflict with UART0)
- //---------------------------------------------------------
- void SD0_Init(void)
- {
- #ifdef SDH_GPIO_GA
- // The group A are GPA10~11, GPA13~15, GPB0~1
- // Conflict with UART0
- // printf("SD_Open(): Configure GPIO group A as SDH pins.\n");
- SYS->GPA_MFPH &= (~0x77707700);
- SYS->GPA_MFPH |= 0x44404400;
- SYS->GPA_MFPH &= (~0x00000077);
- SYS->GPB_MFPL |= 0x00000044;
- #elif defined SDH_GPIO_GB
- // The group B are GPB2~3, GPB5~9
- // Conflict with UART1
- // printf("SD_Open(): Configure GPIO group B as SDH pins.\n");
- SYS->GPB_MFPL &= (~0x77707700);
- SYS->GPB_MFPL |= 0x44404400;
- SYS->GPB_MFPH &= (~0x00000077);
- SYS->GPB_MFPH |= 0x00000044;
- #elif defined SDH_GPIO_G_48PIN
- // The group 48PIN are GPB0~3, GPB5~7 for NUC505 48PIN chip
- // Conflict with both UART0 and UART1
- // printf("SD_Open(): Configure special GPIO as SDH pins for 48 pins NUC505 chip.\n");
- SYS->GPB_MFPL &= (~0x77707777);
- SYS->GPB_MFPL |= 0x44404444;
- #else // default for defined SDH_GPIO_GC
- // The group C are GPC0~2, GPC4~7
- // printf("SD_Open(): Configure GPIO group C as SDH pins.\n");
- SYS->GPC_MFPL &= (~0x77770777);
- SYS->GPC_MFPL |= 0x11110111;
- #endif
- }
- void SYS_Init(void)
- {
- /*---------------------------------------------------------------------------------------------------------*/
- /* Init System Clock */
- /*---------------------------------------------------------------------------------------------------------*/
- /* Unlock protected registers */
- //SYS_UnlockReg();
-
- /* Enable XTAL */
- // CLK->PWRCTL |= CLK_PWRCTL_HXTEN_Msk;
- CLK_SetCoreClock(100000000);
-
- /* PCLK divider */
- CLK_SetModuleClock(PCLK_MODULE, NULL, 1);
-
- /* Lock protected registers */
- //SYS_LockReg();
- //--- Initial SD0 multi-function pin
- SD0_Init();
- }
- void UART0_Init(void)
- {
- /* Enable UART0 Module clock */
- CLK_EnableModuleClock(UART0_MODULE);
- /* UART0 module clock from EXT */
- CLK_SetModuleClock(UART0_MODULE, CLK_UART0_SRC_EXT, 0);
- /* Reset IP */
- SYS_ResetModule(UART0_RST);
- /* Configure UART0 and set UART0 Baud-rate */
- UART_Open(UART0, 115200);
- /*---------------------------------------------------------------------------------------------------------*/
- /* Init I/O Multi-function */
- /*---------------------------------------------------------------------------------------------------------*/
- /* Configure multi-function pins for UART0 RXD and TXD */
- SYS->GPB_MFPL = (SYS->GPB_MFPL & (~SYS_GPB_MFPL_PB0MFP_Msk) ) | SYS_GPB_MFPL_PB0MFP_UART0_TXD;
- SYS->GPB_MFPL = (SYS->GPB_MFPL & (~SYS_GPB_MFPL_PB1MFP_Msk) ) | SYS_GPB_MFPL_PB1MFP_UART0_RXD;
-
- }
- void I2S_Init(void)
- {
- /* Enable I2S Module clock */
- CLK_EnableModuleClock(I2S_MODULE);
- /* I2S module clock from APLL */
- //FIXME APLL CLOCK
- // ideal clock is 49.152MHz, real clock is 49152031Hz
- // CLK_SET_APLL(CLK_APLL_49152031); // APLL is 49152031Hz for 48000Hz
- CLK_SET_APLL(CLK_APLL_45158425); // APLL is 45158425Hz for 44100Hz
- CLK_SetModuleClock(I2S_MODULE, CLK_I2S_SRC_APLL, 0); // 0 means (APLL/1)
- /* Reset IP */
- SYS_ResetModule(I2S_RST);
- /*---------------------------------------------------------------------------------------------------------*/
- /* Init I/O Multi-function */
- /*---------------------------------------------------------------------------------------------------------*/
- /* Configure multi-function pins for I2S */
- // GPC[8] = MCLK
- // GPC[9] = DIN
- // GPC[10] = DOUT
- // GPC[11] = LRCLK
- // GPC[12] = BCLK
- SYS->GPC_MFPH = (SYS->GPC_MFPH & (~SYS_GPC_MFPH_PC8MFP_Msk) ) | SYS_GPC_MFPH_PC8MFP_I2S_MCLK;
- SYS->GPC_MFPH = (SYS->GPC_MFPH & (~SYS_GPC_MFPH_PC9MFP_Msk) ) | SYS_GPC_MFPH_PC9MFP_I2S_DIN;
- SYS->GPC_MFPH = (SYS->GPC_MFPH & (~SYS_GPC_MFPH_PC10MFP_Msk) ) | SYS_GPC_MFPH_PC10MFP_I2S_DOUT;
- SYS->GPC_MFPH = (SYS->GPC_MFPH & (~SYS_GPC_MFPH_PC11MFP_Msk) ) | SYS_GPC_MFPH_PC11MFP_I2S_LRCLK;
- SYS->GPC_MFPH = (SYS->GPC_MFPH & (~SYS_GPC_MFPH_PC12MFP_Msk) ) | SYS_GPC_MFPH_PC12MFP_I2S_BCLK;
-
- }
- /*---------------------------------------------------------------------------------------------------------*/
- /* Main Function */
- /*---------------------------------------------------------------------------------------------------------*/
- int32_t main (void)
- {
- /* Init System, IP clock and multi-function I/O */
- SYS_Init();
- /* Init UART0 to 115200-8n1 for print message */
- UART0_Init();
- printf("+------------------------------------------------------------------------+\n");
- printf("| MP3 Player Sample with Internal CODEC |\n");
- printf("+------------------------------------------------------------------------+\n");
- printf(" Please put MP3 files on SD card \n");
- printf("rc=%d\n", (WORD)disk_initialize(0));
- disk_read(0, Buff, 2, 1);
- //f_mount(0, &FatFs[0]); // for FATFS v0.09
- // Register work area to the default drive
- f_mount(&FatFs[0], "", 0); // for FATFS v0.11
- /* Init I2S, IP clock and multi-function I/O */
- I2S_Init();
- MP3Player();
- while(1);
- }
- /*** (C) COPYRIGHT 2015 Nuvoton Technology Corp. ***/
|