lcdhome论坛_8202_dvd_receiver软件架构

上传人:第*** 文档编号:38741401 上传时间:2018-05-07 格式:PDF 页数:20 大小:310.12KB
返回 下载 相关 举报
lcdhome论坛_8202_dvd_receiver软件架构_第1页
第1页 / 共20页
lcdhome论坛_8202_dvd_receiver软件架构_第2页
第2页 / 共20页
lcdhome论坛_8202_dvd_receiver软件架构_第3页
第3页 / 共20页
lcdhome论坛_8202_dvd_receiver软件架构_第4页
第4页 / 共20页
lcdhome论坛_8202_dvd_receiver软件架构_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《lcdhome论坛_8202_dvd_receiver软件架构》由会员分享,可在线阅读,更多相关《lcdhome论坛_8202_dvd_receiver软件架构(20页珍藏版)》请在金锄头文库上搜索。

1、 1DVD Receiver 系统系统-(SPHE8202) 此文档用于说明 8202 DVD Receiver 系统的软件架构。要了解软件,最好的办法是看程 序,不过问题是对于初次接触此部分软件的人,即使很有经验,也不可能完全领会原创者的 编程思想。在这种情况下,良好的指引文档非常重要,然而这些工作往往被忽略了。基于这 种目的, 我开始编写系统的软件架构说明。 一方面是让参与开发得人员可以更好的把握程序 的流向; 另一方面是想对开发人员作必要的约束, 使开发出来的系统具有一致性和可维护性。 音响技术论坛 BBS.LCDHOME.NET21系统的部件: SPHE 8202 MPEG4 Div-

2、X USB host S/PDIF encoder/decode FM/AM Tuner with RDS KST-MV014(114) ALPS DVD Loader A/D convertor CS5333 CS5340 75dBSPDIF In/OutPower AMP APOGEE Ddx8001 35w Sta308a TI Tas5026 Front Panel and IR Flash SDRAM USB and Card Reader E2PROM 24C02 音响技术论坛 BBS.LCDHOME.NET3软件上,主要的文件有: 根目录下: sysmain_receiver.c

3、 radio_mv114_kst.c ddx8000.c ,ddx8001.c,ddx8228.c,tas5026_pwm.c audif.c ir_vfd 目录下: ircmd.receiver.c ir_parser.c receiver 目录下: radio_rds.c lc72131.c 整个系统共有 4 种工作模式,这几种工作模式是通过调用 ircmd_rcvr_next_mode(void)函数 实现切换。发生切换的时候,全局变量 system_state 会发生变化,指明当前处于那种状态。 Sysmain_receiver.c receiver_check_syste m_sta

4、te() Ircmd_receiver.c ircmd_rcvr_next_mo de(void) Ir_parser.c DVD mode AV in Mode Tuner mode SPDIF In mode 音响技术论坛 BBS.LCDHOME.NET4AV In Mode 在此模式下,初始化 IO,重新装入 DSP code,然后是不断 polling 用户指令 SPDIF in Mode 此模式下,需要装入专用的 DSP code,然后不断作 polling() Tuner Mode 此模式下,需要初始化 IO,装入 DSP code,然后进入 tuner_main() init_i

5、o(); init_DSP(); tuner_main(); tuner_main() init_tuner(); while() polling(); init_input_io(); init_DSP(); while (system_state = SYSTEM_DOING_AV1) . polling(); . init_DSP(); while (system_state = SYSTEM_DOING_SPDIF) spdif_in_init(); polling(); 音响技术论坛 BBS.LCDHOME.NET5Tuner 部分的软件系统架构大致如下: 在 radio_mv114

6、_kst.c 里面有下面的函数供 UI 调用: tuner_main() 收音部分的主函数,在初始化之后会不断调用 polling();同时不断检测 RDS 信号。 tuner_key(BYTE key) 收音状态下,如果有键按下,会进入此函数,并调用相关的函数进行按键的响应。 init_tuner_io() 用来初始化收音的 4 个 IO 口,把他们设置为 GPIO。这些 IO 口分别是: TUNER_CE TUNER_DATA_IN TUNER_DATA_OUT TUNER_CLK 在以后的方案中,我们会把 DATA_IN 和 DATA_OUT 共用一个 IO 口实现控制。 UI Syst

7、em main loop Radio_mv114_kst.c Lc72131.c Radio_rds.c Saa6588.c Baa1924.c 音响技术论坛 BBS.LCDHOME.NET6通用的系统调用架构:通用的系统调用架构: 主流程里不断检测用户命令和更新系统状态, 如果有新的命令进入, 则会调用相应的功能函 数,同时调用 UI 函数进行状态显示。 在编程的时候,要注意,在 UI 部分和功能模组部分不应该有互相调用的现象; 功能函数应该有层次性,可以分成 AP 和底层,其中 AP 部分是实现某一个功能,而底层则 是直接对寄存器或某块内存的操作。 系统 UI 函数,变量 功能模块接口 函

8、数,变量 主流程 API: set_ddx8000_vol(BYTE volume) mute_ddx8000(BYTE flag) AP: Set_left_channel() Set_right_channel() 底层: I2C_Write(Reg1,data) 音响技术论坛 BBS.LCDHOME.NET7一个成熟的软件模块,应该明确给出该模块的接口函数,可调用的全局变量或结构体。 在 lc72131.c 里,有以下函数供 UI 调用: void init_tuner_io(void) 初始化 tuner 用到的 I/O 口; void tuner_mute( BYTE ) 0: de

9、mute, 1; mute soft mute tuner, use lc72131 output pin control la1844; void band(void) 当 tuner.bandswitch = 1,设置为 AM; 否则,设置为 FM; void mono_stereo(void) 用于切换 FM 的 MONO/STEREO 每调用一次,则切换一次; void station(BYTE i) 把 tuner.fmfreqi里面的频率取出来,并设置为当前频率;注意 i 不能超出范围; BYTE is_station() 1-station 0-no station 根据返回值判

10、断是否有电台; void init_72131() 初始化寄存器缓存 in1_data12:通过 CCB BUS 发给 72131 的数据 1 的第 1 和第 2 个 BYTE; in1_data3:通过 CCB BUS 发给 72131 的数据 1 的第三个 BYTE; in2_data1:通过 CCB BUS 发给 72131 的数据 2 的第一个 BYTE; in2_data2:通过 CCB BUS 发给 72131 的数据 2 的第一个 BYTE; in2_data3:通过 CCB BUS 发给 72131 的数据 2 的第一个 BYTE; 以上这些变量为底层专用,不应该被外部的函数读

11、写; 音响技术论坛 BBS.LCDHOME.NET8结构体: typedef struct BYTE memory_status; /保留保留 BYTE bandswitch; /0,fm;1,am BYTE Istuning2; /保留保留 BYTE fm_ch; /当前的当前的 FM channel BYTE am_ch; /当前的当前的 AM channel UINT16 fmfreqMAX_MEM_BAND; /存放存放 FM 电台频率的电台频率的 buffer UINT16 amfreqMAX_MEM_BAND; /存放存放 AM 电台频率的电台频率的 buffer UINT16 a

12、mbak; /当前的当前的 AM 电台频率电台频率 UINT16 fmbak; /当前的当前的 FM 电台频率电台频率 UINT16 checksum; /整个结构体的校验和整个结构体的校验和 t_tuner; 关于此结构体,说明如下: 1 请不要随意修改此结构体, 因为在保存的时候, 系统会把整个结构体保存到 24C02 里面, 由于 24C02 内部空间有限,不能随意扩张,以免覆盖到其他信息; 2 最后 2 个 BYTE 为整个结构体的校验和,用于确保数据的正确性和完整性,如果校验出 错,系统会调用一个初始化函数把预设的电台频率存到 24C02 里;另外一个作用就是, 在机器刚生产出来时,

13、通过判断 checksum 来决定是否进行 24C02 的初始化; 3 在 UI 部分,只允许读,不要去改写里面的值,以免造成显示错乱; 音响技术论坛 BBS.LCDHOME.NET9宏定义的说明: MAX_MEM_BAND 最大可存的电台数目,考虑到 24C02 的分配,目前设为 20,也就是 FM AM 各有 20 个台; 不同的 Tuner 模组里面采用的晶振也有可能不一样,因为 72131 支持 2 种晶振,4.5MHz 和 7.2MHz。我们可以用宏定义来区分。 目前市面上大多数 Tuner 都是采用 lc72131 进行控制。Lc72131 采用 CCB 总线通信方式,通 过设置里

14、面的寄存器,实现频率的调整和 IO 口的设置和状态读取,如下图: BO1 DI DO BO2 BO3 CLK BO4 CE IO1 IO2 /BO1 /BO2 /BO3 /BO4 /IO1 /IO2 Output port function 输出端子功能 AM/FM IF REQVCO-STOP/FM STEREO1 FM ON STEREO OTHER OTHERSerial data 串行数据 0 AM OFF MONO FM STEREO不同厂家生产的 Tuner 模组, 输出端子的功能可能有所不同(上面的表格只是其中一个例子)。 这就要求我们在软件上进行调整, 使得 Tuner 能够正

15、常工作。 这种情况就好比同一种 SERVO IC 搭配不同的 Loader 一样。我们应该规划一套可行的方案,使得我们的软件能够便利的通 过修改,就可以兼容不同的 Tuner 模块。 我个人认为,可以通过包含不同的*.h 文件来实现。为了达到这个目的,软件实现的层次分 割需要很有技巧。一方面要便于修改(让客户可以容易替换),同时要兼顾架构的合理性。 例外一个办法就是把不同的 Tuner 模组调好之后,生成*.o 文件,客户通过调用不同的*.o 来 支持不同的 Tuner 模组。 我们可以在头文件里做以下的宏: #define SET_AM SET_BO1_LOW #define SET_FM SET_

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号