您的位置:首页 > 其它

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帧就不会出现这个问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: