Funpack第11期用LPC55S69播放tf卡中的音乐
Funpack第11期使用用LPC55S69播放tf卡中的音乐,主要使用到FATFS以及I2S。
标签
嵌入式系统
funpack11
山茶半两
更新2021-11-02
887

1.资源介绍

该项目主要为LPC55S69开发板的体验项目。该开发板的主要功能如下图所示。

微控制器

LPC55S69双核Arm Cortex-M33微控制器运行频率高达100 MHz

存储器

微型SD卡插槽(4位SDIO)

连接

  • 板载高速USB、Link2硬件调试器,支持CMSIS-DAP和SEGGER J-Link协议
  • UART和SPI端口通过板载硬件调试器将目标LPC55S69和USB桥接起来
  • 高速和全速USB端口,具有主机或设备功能可用的微型A/B连接器

调试

支持外部硬件调试器

传感器

恩智浦MMA8652FCR1加速度传感器

音频

立体声音频编解码器,带线路输入/输出

扩展端口

  • MikroEletronika Click扩展选项
  • LPCXpresso-V3扩展选项与Arduino®UNO兼容
  • 兼容PMod的扩展/主机接头

用户组件

3个用户LED,加上复位、ISP (3)和用户按钮

LPC55S69-EVK开发板是NXP公司推出的,LPC55S6x MCU家族是全球首款基于通用Cortex-M33的微控制器,控制器为双核结构,运行频率高达100MHz。

开发板具有USB、SD卡插槽、音频输入输出、I2C、SPI等接口,并支持mikroBUS接口扩展。

2.功能介绍

本次任务主要是制作一个通过TF卡获取音乐播放的程序,主要使用到FATFS和I2S,因此可以通过配置基础代码进行修改,实现最终功能。

3.代码

    
		if (sdcardWaitCardInsert() != kStatus_Success)
				{
						return -1;
				}

				if (f_mount(&g_fileSystem, driverNumberBuffer, 0U))
				{
						PRINTF("Mount volume failed.\r\n");
						return -1;
				}

		#if (FF_FS_RPATH >= 2U)
				error = f_chdrive((char const *)&driverNumberBuffer[0U]);
				if (error)
				{
						PRINTF("Change drive failed.\r\n");
						return -1;
				}
		#endif


		error = f_open(&g_fileObject, _T("/song.wav"), (FA_READ | FA_OPEN_EXISTING));
    if (error)
    {
        if (error == FR_EXIST)
        {
            PRINTF("File exists.\r\n");
        }
        else
        {
            PRINTF("Open file failed.\r\n");
            return -1;
        }
    }


				
    PRINTF("Configure WM8904 codec\r\n");

    /* protocol: i2s
     * sampleRate: 48K
     * bitwidth:16
     */
    if (CODEC_Init(&codecHandle, &boardCodecConfig) != kStatus_Success)
    {
        PRINTF("WM8904_Init failed!\r\n");
        assert(false);
    }

    /* Initial volume kept low for hearing safety.
     * Adjust it to your needs, 0-100, 0 for mute, 100 for maximum volume.
     */
    if (CODEC_SetVolume(&codecHandle, kCODEC_PlayChannelHeadphoneLeft | kCODEC_PlayChannelHeadphoneRight, 30U) !=
        kStatus_Success)
    {
        assert(false);
    }

    PRINTF("Configure I2S\r\n");
I2S_TxGetDefaultConfig(&s_TxConfig);
    s_TxConfig.divider     = DEMO_I2S_CLOCK_DIVIDER;
    s_TxConfig.masterSlave = DEMO_I2S_TX_MODE;
    I2S_TxInit(DEMO_I2S_TX, &s_TxConfig);

//    StartSoundPlayback();
//						s_TxTransfer.data     = &music1[0];
//						s_TxTransfer.dataSize = sizeof(music1);

//						I2S_TxTransferCreateHandle(DEMO_I2S_TX, &s_TxHandle, TxCallback, (void *)&s_TxTransfer);
//						I2S_TxTransferNonBlocking(DEMO_I2S_TX, &s_TxHandle, s_TxTransfer);
						
		error = f_read(&g_fileObject, music1, sizeof(music1), &bytesRead);
		if ((error) || (bytesRead != sizeof(music1)))
		{
				PRINTF("Read file failed. \r\n");
				failedFlag = true;
		}
		musicflag=1;
		s_TxTransfer.data     = &music1[0];
		s_TxTransfer.dataSize = sizeof(music1);
		I2S_TxTransferCreateHandle(DEMO_I2S_TX, &s_TxHandle, TxCallback, (void *)&s_TxTransfer);
		I2S_TxTransferNonBlocking(DEMO_I2S_TX, &s_TxHandle, s_TxTransfer);
	
		for(;;)
		{
			if(musicflag2!=musicflag)
			{
				if(musicflag==0)
				{
						error = f_read(&g_fileObject, music1, sizeof(music1), &bytesRead);
						if ((error) || (bytesRead != sizeof(music1)))
						{
								PRINTF("Read file failed. \r\n");
								failedFlag = true;
							  break;
						}
				}
				else
				{
				    error = f_read(&g_fileObject, music2, sizeof(music2), &bytesRead);
						if ((error) || (bytesRead != sizeof(music2)))
						{
								PRINTF("Read file failed. \r\n");
								failedFlag = true;
						  	break;
						}
				}
				musicflag2=musicflag;
			}
			
		}

4.功能展示

详见视频FhjEuzfu24ZqAg8YJgKXJYHlsfOi

5.心得体会

LPC55S69开发板还是比较好用的,只是用惯了CubeMX再用

MCUXpresso Config Tools v10确实有些用不惯,不过经过半天的学习,基本上可以正式使用该软件进行开发了。

6.实物图

FuOAsJLFyAF1jfAAVZNPTyydGyTPFie9UB-H6QdMkNcD3SvaPiUO5z4J

 

附件下载
sdcard_fatfs.7z
团队介绍
个人队,电子工程师+爱好者一枚
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号