TCC平台开发笔记
2011-04-16 10:46
155 查看
TCC平台开发笔记
首次接触到TELECHIP的平台,不得不感叹一下,这个平台的工具还真是好用,不得不说TELECHIP的工程师们想得周到。本人这次用到的是TCC7901,具体调试过程如下:
一、基本开发流程
1、首先找到了一个官方的BSP包,本来是想去官方网站下载的,但可惜,只有TELECHIP的客服才能下载,所以通过了其它办法拿到了一个2.2版的BSP包。
2、创建了一个基本工程,按默认的配置编译了一下BSP包,验证通过OK。
3、利用Config_120.exe工具配置了一下BSP参数;这里主要设定RAM大小,屏大小,TP 用的I2C通道,LCD的时序参数。
4、重配置了一下telechips.bat,添加了一个设备驱动;双击这个BAT文件,选择BULID BSP包。
5、利用FWDN_V5_120.exe工具,将生成的NK.ROM,tcboot.rom下载到设备板,
这里要设成USB BOOT模式,BM[2]脚接高NAND BOOT,接低USB BOOT。另外USB要设成DEVICE。
6、FWDN_V5_120.exe工具可以对NAND 分区配置,格式化NAND FLASH,下载LOGO等功能,非常方便。
二、具体调试
1、显示驱动:由于每家用的屏都不一样,所以屏的参数必须要调整的,一般来说改动的地方不多,由于我用到是3.5寸的屏,所以我做了如下改动:
#define IMAGE1_WIDTH 320
#define IMAGE1_HEIGHT 240
#define LCD_WIDTH 320
#define LCD_HEIGHT 240
#define LCD_DEVIDE 12
#define LCD_VPW (1)
#define LCD_VBP (13)
#define LCD_VFP (9)
#define LCD_HPW (1)
#define LCD_HBP (70)
#define LCD_HFP (17)
另外背光控制IO做了调整。
由于我的屏是通过SPI方式初始化的,所以还在TCC_LCD.C里面加了模拟SPI通讯函数。
2、TOUCHPANEL调试:
TOUCHPANEL用的是TSC2003,BSP包里面有这个驱动,只要对一些参数稍做调整,
#define MAX_X 3810//3940
#define MIN_X 245
#define MAX_Y 3610//3870
#define MIN_Y 456 //
这些参数你在点屏的时候,可以通过驱动打印出来。
校验完屏之后,读取校屏的坐标参数写入注册表。
"CalibrationData"="644,476 112,68 120,864 1168,864 1168,80 "
3、HOST USB
BSP包里面已经实现了USB HOST,只要添加相关的组件即可。
我添加的USB组件有
--> Core OS --> Core OS Services --> USB Host Support --> USB Storage Class Driver
--> Device Drivers --> USB Function --> USB Function Clients --> Mass Storage
--> Device Drivers --> USB Host --> USB Host Controllers --> OHCI
4、SD 卡、I2C、SPI:
这样驱动BSP包已实现了,SD卡只要添加相关组件就可以用了。主要有两个:SD Host Controller,SD Memory。
这里主要要自己实现的可能就是插/拔卡通知了。可以采用事件。
另外就是大容量SD卡支持,将common.bib里面做如下修改:
sdbus.dll $(_FLATRELEASEDIR)/sdbus2.dll NK SH
拔卡出SD卡后,卸载文件系统时间修改。
[HKEY_LOCAL_MACHINE/System/StorageManager]
"Dll"="fsdmgr.dll"
"PNPUnloadDelay"=dword:12c //300MS
5、HIVE 注表的实现
(1)、在PLATFORM.reg里面添加如下注项。
;HIVE BOOT SECTION
[HKEY_LOCAL_MACHINEinitBootVars]
"SYSTEMHIVE"="Documents and Settings/system.hv" ;system.hv会保存到HDDDocuments and Settingssystem.hv
;"PROFILEDIR"="Documents and Settings" ;user.hv会保存到HDDDocuments and Settingsdefaultuser.hv
"Start DevMgr"=dword:1 ;
"DefaultUser"="default" ;咱们只有一个用户default,基本上就是决定user.hv的路径了
"Flags"=dword:3 ;这个应该是wince 5.0下决定在哪个阶段启动device.exe的表项
"RegistryFlags"=dword:1 ;这个就是设置注册表每次改动后自动flush到system.hv
; END HIVE BOOT SECTION
(2)、在nand 的注册表中加入到;HIVE BOOT SECTION 与; END HIVE BOOT SECTION之间。同时再添加句
[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/Nand]
"MountAsBootable"=dword:1 ;这个是wince 5.0下指定这个分区保存system.hv的关键
6、多语言的实现,
(1)菜单 Platform -> Settings,Locale中选择中文,英语,默认选择中文。
(2)在组件中添加:MUI的组件。中文字库选择SimSun & NSimSun250。
(3)sysgen 工程。
(4)运行createmui 0409 ,然后在release目录中找到MultiUI.bib文件,将文件里面的内容复制到COMMON.bib里面。
(5)makeimg 。
7、CH7026调试
通过CH7026将数字的RGB 编码成,CVBS跟VGA输出。这里不作详介绍。
8、字库调整到NANDFLASH里面:
将COMMON.REG 相关的注册项注释掉,同时将COMMON.BIB里面的包含simsun.ttc行注释掉。然后再在platform.reg里面加入如下:
[HKEY_LOCAL_MACHINE/SYSTEM/GDI]
"FontLinkMethods"=dword:1
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/FontPath]
"FontPath"="//NAND FLASH" ; 字库文件所在目录
; @CESYSGEN IF !GWES_DECOMPDRV
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/FontLink/SystemLink]
"Tahoma"="//NAND FLASH//simsun.ttc,NSimSun"
"Courier New"="//NADN FLASH//simsun.ttc,NSimSun"
"Arial"="//NADN FLASH//simsun.ttc,NSimSun"
"Times New Roman"="//NADN FLASH//simsun.ttc,NSimSun"
"Symbol"="//NAND FALSH//simsun.ttc,NSimSun"
9、HIVE注册表引起系统慢。
由于HIVE注册表的注册表文件是保存在NANDFLASH里面的,同时RAM里面会有一份副本,NK在运行的时候还是用到的是RAM里面的注册表,我们可能通过如下注册项来设定是否每次改都更新到NANDFLASH里面。
"RegistryFlags"=dword:1 ;这个就是设置注册表每次改动后自动flush到system.hv
但这样会有一个问题,就是在频繁写注册表的时候,就会影响性能了。比如进入TCPMP播放器时会很慢。
解决办法就是用手动刷新,将上面的注册改成“0”,
方法一、在系统关机的时候将RAM保存到NANDFLASH。
方法二、更改刷新注册表时间,比如说有改的时候3秒或5秒更新一次,这样有利于掉电不丢失注册表。这里的时间可以自已定。
获得注册表更新事件:
[HKEY_LOCAL_MACHINE/System/ObjectStore/RegFlush]
; To monitor the flushing from an external process add "ActivityName" registry value.
; The activity name is a global named event that filesystem will signal on Registry Activity.
; "ActivityName"=""
"ActivityName"="RegFlushEvent"
; Create an thread in filesys to perform flushing
; "SpawnThread"=dword:1
"SpawnThread"=dword:0
; Make the thread IDLE priority
"FlushPriority256"=dword:FF
; ActivityThreshold specifies the # of reg activity before we force a flush
; "ActivityThreshold"=dword:100
"ActivityThreshold"=dword:1
; Timeout period for a flush (flush occurs if there have been some changes during this period)
; "FlushPeriod"=dword:3E8
; "FlushPeriod"=dword:7530
在驱动里面打开“RegFlushEvent”一个同名事件,然后创建一个线程,等待该事件,在线程里面手动更新注册表。
10、USB-HUB功能:
由于USB不够用,所以用到硬件外扩,软件方面不需要做任何事情,只要USB HOST 驱动OK,接上硬件就行了。
这中间还有一个USB插拔检测的问题,因为我通过USB HUB将HOST分成了两个接口:一个USB口,另一个通过IC转成了SDIO接口。这样对于U盘的检测带来了麻烦,因为SDIO接口的卡插拔的时候没有WM_DEVICECHANGE消息,就不能通过这个消息来判断了。
DBT_DEVICEARRIVAL:插入
DBT_DEVICEREMOVECOMPLETE:拔出。
只能自己创建一个消息队列,然后RequestDeviceNotifications,然后再读出消息,就OK了。
11、虑拟串口:
虑拟串口,我采用的方法比较简单,就是在我的驱动里面开一个线程接收串口来的数据,因为我主要用到接收数据.其实我写了两种串口驱动,一种用于GPS的将COM虑拟成多个,一个给地图软件用,另外的给一些像时间同步,查看GPS模块信息用等.
还有一种是用于MCU与ARM通讯用,主要是解析串口数据然后分发给不同的应用程序.
while( !pSerial->m_bExit )
{
// 等待串口驱动通知
WaitCommEvent( pSerial->m_hCOM, &dwCommModemStatus, NULL );
// 稍候再去读,等数据包到完整
// 仅处理字符事件
if( !(dwCommModemStatus & EV_RXCHAR) )
continue;
dwBytesRead = pSerial->Read( byRecvBuf, sizeof(byRecvBuf) );
后面是对BUF的操作...将数据填到一个循环BUF里面.
}
12、TVP5147 调试:
这个主要是将CAMERA驱动调通就OK了,然后改一个下VP5147的初始化配置.
大概流程是这样,摄像头或者CVBS视频信号输入,通过TVP5147转换成565的信号,通过CIF接口输入到ARM ,然后通过CAMERA驱动读取视频信号,通过TCCCAMERAFILTER-->TCCVRENDERFILTER 显示在LCD上,好像TCC7901输入视频最大支持320*240(如果过大为造成画面闪动,听说好像没有解),然后通过M2MSCALER拉伸到你想要的尺寸,也不知是真是假,但我目前还是用到320*240然后拉到800*240。
这里有个问题,就是因为TCC7901 用TSC2003 作为TP A/D,这个IC有个特点,只有DOWN的中断,没有UP的中断,中断来了以后ARM通过I2C去读取TP采样读据。UP的判断为DOWN中断80MS后为UP。如果你一直按着TP就会不停的有中断产生,就会不停的通过I2C读取AD数据,中间只有10MS作为线程轮片。
如果在CAMERA预览的情况下,一直按着TP就会发现画面会闪动。但如果低于15帧就不会出现这个问题。
相关文章推荐
- VR平台开发笔记(五).net的域名解析
- java学习笔记1--开发环境平台总结
- cocos2d-x学习笔记01:VS开发环境windows平台搭建
- 快速搭建Android开发平台笔记 分类: Android 2015-07-08 14:53 11人阅读 评论(0) 收藏
- linux平台开发自学笔记(二)-打造IDE
- 基于AT91SAM7X平台的应用开发笔记——之一
- [转载]学习笔记《.NET框架程序设计(修订版)》--第一章 Microsoft .NET框架开发平台体系架构(2)
- Android平台读写i2c设备开发笔记一
- oms平台开发笔记(2)
- 学习笔记之ArcgisEngine 开发 10.1程序运行在10.0平台上的兼容问题解决
- 快速搭建Android开发平台笔记
- [Openwrt 项目开发笔记]:Openwrt平台搭建(一)
- 【笔记】Android平台下的JNI开发
- ROS学习笔记(三)补充篇pionner3 DX -win平台下开发
- Android平台读写i2c设备开发笔记三
- 可视化开发平台Tersus的入门级笔记
- android底层开发进阶(2)--makefile笔记与android的平台编译
- [Openwrt 项目开发笔记]:Openwrt平台搭建(一)补遗
- 【实战\Java SSM快速开发仿慕课网在线教育平台项目笔记】第1章 课程项目整体概述(整体介绍及Eclipse,Maven,新浪SAE软件平台介绍)
- VR平台开发笔记(一)TCP/IP协议客户端接发消息