Fm发射功能在车载android系统的应用

FM发射功能在车载android系统的应用

 

       很久没有写android的文章了,今晚就写一篇FM发射功能在车载电子上的应用,以及软件需要注意的地方。所谓FM发射就是充当于FM电台,频率在76-108M之间都可以,我们选用的是QN8027。这个FM发射有什么意义呢?

      比如有些主机或者后座娱乐系统播放音乐,是没有喇叭或者喇叭比较差一点,用FM发射出去,在原厂配的FM里就可以搜到这个FM发射频点,听收音机一样来接受播放的音乐,再用原厂的音响放出来,整个在车上的人都可以享受这个音乐带来的高品质享受。那么这个系统怎么实现呢?

QN8027是用IIC控制的,对初始化有一定要求,参考时钟也有讲究,跟硬件电路设计很相关。初始化参考代码如下:

 

static void QN8027_init_setting(void) {
	unsigned char value = 0;
	int ret = -1;

	/*reset all regs to default value*/
	fm_radio_write_reg(gclient, 0x0, 0x81);
	msleep(20);/*sleep 20ms*/

	/*-----xtal--setup----------*/
	fm_radio_write_reg(gclient, 0x3, 0x30);
	/*osc=12M--0x33-40k 0x32--20k 0x31--10k TX digital gain=2dB*/
	fm_radio_write_reg(gclient, 0x4, 0x12);

	/*---recalibration-----*/
	fm_radio_write_reg(gclient, 0x0,0x41);
	fm_radio_write_reg(gclient, 0x0,0x01);
	msleep(20);/*sleep 20ms*/

	/*-----default---------*/
	fm_radio_write_reg(gclient,0x18,0xe4);/*SNR improve*/
	fm_radio_write_reg(gclient,0x1b,0xf0);/*Increase RF power output maximum*/

	fm_radio_write_reg(gclient, 0x2, 0xb9);

	/*enable transmit*/
	ret = fm_radio_read_reg(gclient, 0x0, &value);
	value |= 0x20;
	fm_radio_write_reg(gclient, 0x00, value);/*No reset. FSM runs normally*/

}

       必须特别强调的一点是在切换FM发射频点的时候,会发现在高频点的时候,也就是0x0寄存器的存储FM频率的第8-9bit有值的情况下,发射天线电压幅度会降低,后面跟着发现这种高频率点,同时需要更改两个寄存器的值,后面笔者在调频率的时候,先让fm进入standby模式,设置好新的频点的时候再让fm处于transmit的模式,这样就有效解决这个输出幅度异常的问题。参考代码如下:

static int QN8027_set_frequency(unsigned int freq) {
	int CH = 0, ret = -1;
	unsigned char value = 0;

	if(freq < 76000 || freq > 108000) {
		printk("Error,wrong freq %d KHz, [76--108MHz]\n", freq);
		return -1;
	}

	CH = (freq - 76000)/50;

	printk("QN8027_set_frequency: freq = %d KHz, CH = 0x%x\n", freq, CH);

	fm_radio_read_reg(gclient, 0X0, &value);
	value = (value & 0xFC) | ((CH&0X300)>>8);
	value &= 0xdf;/*set standby mode*/
	ret = fm_radio_write_reg(gclient, 0x00, value);/*update CH[8:9]*/

	if(ret <0)
		return -1;

	value = CH & 0xFF;
	ret = fm_radio_write_reg(gclient, 0x01, value);/*update CH[0:7]*/

	fm_radio_read_reg(gclient, 0X0, &value);
	value |= 0x20;/*set transmit mode*/
	ret = fm_radio_write_reg(gclient, 0x00, value);

	return ret;
}
时间: 2024-10-24 19:28:26

Fm发射功能在车载android系统的应用的相关文章

Android系统的定制---定制系统开机动画

4.3定制Android平台系统 通常产品厂商在拿到Android源码后会在Android源码基础上进行定制修改,以匹配适应自己的产品,从本节开始,我们从最原始的Android源码系统里一步一步定制出自己的Android系统.本节主要内容包含:根据Android源码,添加新产品编译项,定制系统启动界面和文字,定制系统启动动画和声音,定制系统桌面. 4.3.1 添加新产品编译项 Android系统的源代码是一个逻辑结构非常独立工程,在一套Android源码中可以编译出多个产品映像,在需要编译某一个

在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务

    在数字科技日新月异的今天,软件和硬件的完美结合,造就了智能移动设备的流行.今天大家对iOS和Android系统的趋之若鹜,一定程度上是由于这两个系统上有着丰富多彩的各种应用软件.因此,软件和硬件的关系,在一定程度上可以说,硬件是为软件服务的.硬件工程师研发出一款硬件设备,自然少了软件工程师为其编写驱动程序:而驱动程序的最终目的,是为了使得最上层的应用程序能够使用这些硬件提供的服务来为用户提供软件功能.对Android系统上的应用软件来说,就是要在系统的Application Framew

索爱Android系统Cyber-Shot手机曝光

Walkman系列音乐手机和Cyber-shot系列拍照手机曾经为http://www.aliyun.com/zixun/aggregation/18316.html">索尼爱立信带来了不少辉煌业界,所以在全面转投Android系统阵营的情况下,索尼爱立信自然也希望复制过去的成功经验,再次以音乐和拍照两大特色在趋于同质化的 Android手机大军中实现差异化和寻求突破.继不久前正式发布首款Android系统Walkman手机之后,在网络上日前又爆出了搭载 Android系统的索尼爱立信Cy

《Android Studio应用开发实战详解》——第1章,第1.3节Android系统架构

1.3 Android系统架构Android系统是一个移动设备的开发平台,其软件层次结构包括操作系统(OS).中间件(Middle Ware)和应用程序(Application).根据Android的软件框图,其软件层次结构自下而上依次分为以下4层. (1)操作系统层(OS). (2)各种库(Libraries)和Android运行环境(RunTime). (3)应用程序框架(Application Framework). (4)应用程序(Application). 上述各个层的具体结构如图1-

android车载娱乐系统跟android平板的分析比较

android车载娱乐系统跟android平板的分析比较              随着android系统风靡世界,艳冠全球,逐渐进入了各个电子应用领域,车载电子在android系统的应用上属于稍微晚一点的行业.近一年多来,市面上的android车载导航主机已有露面,但是由于导航显示屏比较小,核心功能导航.倒车等相对WINCE来说,体现不出优越性,WINCE系统响应时间更短.稳定性更好一些,WINCE功能虽然简单一点.但是在后座娱乐方面WINCE能抵挡住android前进的脚步呢?       

Android系统下载管理DownloadManager功能介绍及使用示例

本文主要结合源码介绍Android系统下载管理DownloadManager的强大功能及使用. 这是许久来准备写的一系列博客,这篇主要介绍DownloadManager的功能和示例,后面还有两篇会介绍下载管理的底层设计(DownloadProvider.DownloadManager.DownloadManagerUI).下载管理如何进行功能增强和bug修改. 更多下载相关开源项目可见 Android 下载. 示例APK可从这些地址下载:Google Play, 360手机助手, 百度手机助手,

源码-android 系统如何给功能打宏开关?

问题描述 android 系统如何给功能打宏开关? 比如:我做了一个通话自动录音的功能,改了源码,功能实现了,但现在问题来了,有的 客户需要这个功能,有的客户不需要这个功能,所以,想给它添加一个开关,需要这个功能的客户,将其开关打开,不需要此功能的客户,在编译系统的时候将其关闭,现在 需要了解开关是在哪个地方加,加到哪个文件里面,如何读取这个开关. 望大神指点.谢谢! 解决方案 定义全局变量Config控制, gradle打包时改变变量 解决方案二: 定义全局变量Config控制, gradle

android 短彩信-Android手机如何实现发送短彩信功能,不调用系统界面

问题描述 Android手机如何实现发送短彩信功能,不调用系统界面 Android手机如何实现发送短彩信功能,不调用系统界面,Android手机如何实现发送短彩信功能,不调用系统界面 解决方案 短信可以后台发送,彩信不行 解决方案二: 后台发送短信http://blog.csdn.net/beijingshi1/article/details/7614267

Android系统到底安不安全?细数Android7.0 Nougat的几大安全增强功能

关于Android7.0 Nougat(牛轧糖) 众所周知,2016年的GoogleI/O开发者大会已经在美国时间的5月18日成功召开了,而在此次大会上,Google公司也正式发布了新版的AndroidN操作系统.2016年8月22日,Google开始正式向用户推送Android7.0 Nougat正式版. 在性能方面,AndroidN不仅对编译器进行了优化,而且还在图形处理方面做了更新.AndroidN下的软件运行速度将提升3-6倍,而且由于引入了全新的JIT编译器,使得app的安装速度提升了