历史上的今天
返回首页

历史上的今天

今天是:2025年10月18日(星期六)

正在发生

2022年10月18日 | linux2.6.32.2 mini2440平台移植-- UDA1341 音频驱动移植

2022-10-18 来源:csdn

1.6.1  在初始化文件中加入 UDA1341 设备结构


Linux-2.6.32.2已经完美的支持UDA1341音频芯片的驱动,我们只要在arch/arm/mach-s3c2440/mach-mini2440.c 文件中注册 UDA1341 平台设备的控制端口就可以了,打开 mach-mini2440.c,添加如下内容:


//在文件首部添加头文件


#include


//在 LCD 平台设备后面添加 UDA1341 设备结构


static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data = {


.l3_clk = S3C2410_GPB(4),


.l3_data = S3C2410_GPB(3),


.l3_mode = S3C2410_GPB(2),


.model = UDA134X_UDA1341,


};


static struct platform_device s3c24xx_uda134x = {


.name = "s3c24xx_uda134x",


.dev = {


.platform_data        = &s3c24xx_uda134x_data,


}


};


//注册 UDA1341 设备平台到内核中


//这些注册的结构在哪定义的??


static struct platform_device *mini2440_devices[] __initdata = {


&s3c_device_usb,


&s3c_device_rtc,


&s3c_device_lcd,


&s3c_device_wdt,


&s3c_device_i2c0,


&s3c_device_iis,


&mini2440_device_eth,


&s3c24xx_uda134x,


&s3c_device_nand,


};


这样,我们基本就添加好了  UDA1341  音频设备的驱动,接下来我们在内核中配置该驱动。


注意:其实在做完以上工作时还是不能放MP3,没有DSP节点,我后面根据


http://www.arm9home.net/read.php?tid-1481-fpage-0-toread--page-2.html


引用


No device for DAI UDA134X

No device for DAI s3c24xx-i2s


这是ALSA的警告信息,不影响uda1341驱动的。


引用


S3C24XX_UDA134X SoC Audio driver

UDA134X SoC Audio Codec

asoc: UDA134X <-> s3c24xx-i2s mapping ok

ALSA device list:

#0: S3C24XX_UDA134X (UDA134X)


这说明UDA1341 for S3C24xx的ALSA驱动已经成功加载了。需要了解的是,ALSA本身并不会生成/dev/dsp节点,那是OSS驱动的东西。

要在你的系统里使用/dev/dsp节点,你必须确保选中了ALSA的“OSS 模拟”选项。它可以通过在内核配置中的

"Sound card support" ---> "Advanced Linux Sound Architecture" --> "OSS PCM (digital audio) API"

配置。


1.6.2  在内核中配置 UDA1341 设备驱动


在内核源代码目录输入:make  menuconfig 开始配置内核,依次选择如下子菜单,找到音频驱动配置菜单:


Device Drivers    --->


<*> Sound card support    --->


按空格选中"[*]       Preclaim OSS device numbers     ",


再选中"<*>       Advanced


Linux Sound Architecture    --->",并回车进入该子菜单


出现音频驱动体系结构菜单,在这里,我们选择 OSS 接口相关的配置选项,需


要注意的是,这里的 OSS 接口其实是基于 ALSA 接口创建的,因为新的内核中现在都已经改用 ALSA 设计,这里是为了和以前的软件兼容才这样做的,


再选择"<*> ALSA for SoC audio support    --->"子菜单并回车进入,在这里我们可以看到专门为  S3C24xx 系列芯片(包括  S3C2410/2440/2443 等)而做的


配置选项,打开 linux-2.6.32.2/sound/soc/s3c24xx/Makefile 文件就可以看到,


我们的开发板使用的是 UDA1341 音频芯片,在这里当然要选择


"-*- SoC I2S Audio support UDA134X wired to a S3C24XX"了。


退出保存以上各项配置。


1.6.3 mp3 放音测试


在内核源代码目录执行:make zImage,把生成的内核映像文件烧写到开发板,依然使用友善之臂提供的文件系统 root_qtopia,系统启动后,使用系统自带的 madplay 软件播放一首mp3 进行测试,把音箱或者耳机插入开发板的绿色音频输出插座,就可以听到音乐了,


1.6.4  修正驱动中的录音代码


虽然播放 mp3 很正常,但当使用系统自带的录音程序进行录音时,我们发现无法听到任何结果,这是因为开发板的录音电路和 SMDK2440 目标板的电路是有所区别的。


mini2440 开发板使用的录音通道为 VIN2,而 SMDK2440 使用的则是 VIN1,打开 linux-2.6.32.2/sound/soc/codecs/ uda134x.c,在大概 201 行添加如下红色代码:


uda134x->slave_substream = substream;


} else


uda134x->master_substream = substream;


uda134x_write(codec, 2, 2|(5U<<2)); //把录音通道改为 VIN2


return 0;


}


static void uda134x_shutdown(struct snd_pcm_substream *substream,


struct snd_soc_dai *dai)


{


这样,我们就完成了录音驱动的修正,在内核源代码目录下执行:make zImage,重新编译内核并烧写到开发板中。


1.6.5  录音测试


打开 Qtopia 中的"录音机"测试程序,根据提示,点"REC"按钮开始录音,这时对着板上的麦克风说话,可以看到录音的波形,点"STOP"按钮结束录音,此时可以点"PLAY"按钮播放刚才的录音,同时录制的音频文件将以"WAV"格式


自动存储到"文档"中:说明:Qtopia2.2.0 系统自带了一个录音程序,中文名为"语音便签",但它不能正常使用板上的麦克风进行录制。


推荐阅读

史海拾趣

Cobham Semiconductor Solutions公司的发展小趣事

Cobham Semiconductor Solutions自成立之初,便以技术创新为核心驱动力。公司不断投入研发,推动半导体技术的突破。在某一关键时期,Cobham团队成功研发出一款具有革命性的低功耗芯片,不仅大幅提升了设备的性能,还降低了能耗,迅速在市场上获得了广泛应用。这一创新不仅为公司带来了可观的利润,还奠定了其在半导体行业的领先地位。

BVLED公司的发展小趣事

随着公司规模的扩大和业务范围的拓展,BVLED公司开始注重产业链的整合和成本控制。公司通过与上游供应商建立长期稳定的合作关系,确保了原材料的稳定供应和质量保障;同时,公司还加强了对生产过程的监控和管理,通过优化生产流程和降低能耗等方式降低了生产成本。这些措施使得公司在激烈的市场竞争中保持了较强的竞争力。

广东华裕(GDHY)公司的发展小趣事

在电子行业的初期,BVLED公司只是众多初创企业之一,面临着资金短缺、技术不成熟和市场认可度低等问题。然而,公司的创始人凭借对LED技术的深刻理解和市场需求的敏锐洞察,决定专注于研发高效、节能的LED产品。经过数月的努力,公司成功开发出了一款具有竞争力的LED照明产品,并成功获得了第一批订单。这一突破为公司的发展奠定了坚实的基础。

Gemmy Electronics Co Ltd公司的发展小趣事
可能是由于电源线路未插好、电源开关未打开或电源本身故障导致。
鞍山圣罗佳(ASL)公司的发展小趣事
定期清理捕鼠器上的灰尘和污垢,保持其清洁干燥,有助于减少故障发生。
Henkel公司的发展小趣事
可能是由于电源线路未插好、电源开关未打开或电源本身故障导致。

问答坊 | AI 解惑

开关变压器实计工作和计算的差距

开关变压器实计工作和计算的差距…

查看全部问答>

请教我设计的按键控制为什么按住jia或jian键后程序会停止?

#include #define uchar unsigned char #define uint unsigned int uchar bb;  //定时器中断次数 。 uchar m;  //个位秒。 uchar tt;  //十位秒。 uchar tt1;  // 个位分。 uchar tt2;   ...…

查看全部问答>

触摸屏,大家开始用了么?

小弟最近关注触摸屏相关的技术,但是具备的相关经验甚少。只是记得Cypress之前一直在推电容感应触摸屏。 大家在实际中,用过触摸屏么?用的什么屏?觉得如何?…

查看全部问答>

FIFO和双口RAM

FIFO和RAM有什么区别 什么时候用FIFO 什么时候用RAM…

查看全部问答>

除了身高其他都很保守的简历。

**,您好:   小明。男。1986年17月40日出生。身高190,体重80KG。籍贯山东省济南市。信仰无神论力量崇拜。身体优良。未婚。爱好计算机,吉他,铅笔画,篮球,游泳,做饭。性格柔中带钢,讲原则,重诚信。   2005年9月入读乌 ...…

查看全部问答>

请问mc39i的串口电平是RS232电平还是TTL电平

在网上看到的信息,有说是RS232电平的,有说的TTL电平的,我看DATASHEET上说的电平是low :…

查看全部问答>

如何自学嵌入式软件开发

我是学习.Net的,但是对嵌入式比较感兴趣,希望各位高手给小弟指点一下,谢谢各位了…

查看全部问答>

如何计算有效值和谐波含量?

采样数据如下:lBFUIN[256] ={1026,1032,1039,1045,1052,1058,1066,1073,1081,1087,1095,1104,1113,1121,1129,1138,1146,1155,1165,1172,1183,1192,1201,1212,1222,1231,1242,1251,1262,1272,1284,1294,1303,1313,1324,1335,1346,1356,13 ...…

查看全部问答>

RTC中断允许问题

RTC中断是通过EXTI_17向内核申请中断的,但3.3版本的固件库,RTC例程没有配置EXTI17使能,只是允许了NVIC_RTC和RTC中断允许,怎么就能产生了RTC中断?好奇怪,没搞明白…

查看全部问答>

关于Keil uVision3软件的应用

我用的这个Keil uVision3软件,发现光标对应的字会有偏移,不知道大家有没有这情况,怎么解决…

查看全部问答>