//=====================================================================
//TITLE:
// 应用程序中读写TCC7901的寄存器
//AUTHOR:
// norains
//DATE:
// Monday 12-July-2010
//Environment:
// Windows CE 5.0
//=====================================================================
熟悉于WinCE驱动编写的兄弟姐妹,估计对于嵌入式CPU的寄存器读写不会陌生,甚至可以说就像是左手摸右手那般熟悉。
不过熟悉归熟悉,实际工作中,如果死板地按照微软的驱动编写流程,估计会被烦死;即使没有被烦死,也会效率大打折扣。比方说,你需要写一个GPIO驱动,该驱动会根据某些特定情况开断指示灯。当你酣畅淋漓地将驱动写完,兴致勃勃部署到设备上,启动,哑火。这时候,我估计很多朋友都会选择通过在代码中遍布打印消息,以此推断结症所在。如果这时候能将相应的操作放置于应用程序,能通过IDE的断点来调试,是不是一切就会简单很多呢?
如果你使用的是Telechips的TCC7901,在应用程序中操作其寄存器,将会是一件非常简单的事--简单到连通用做法都不必采用。
我们以一个最为简单的例子,设置GPIOD[8]功能。
先查看一下TCC7901的Datasheet:
通过图片中用红色圈起来的部分,我们知道,如果要将SDI0这个PIN作为GPIO功能,那我们需要对PORTCFG4这个寄存器的24~27位写入1,并且该寄存器的地址为0xF005A010。
我们先把文档放一边,先来查看一下TCC7901的BSP代码。找到TCC79x_Physical.h这个文件,输入PORTCFG4,我们可以看到在该头文件中对于该寄存器是如此定义的:
仔细点观察,我们会发现,如果将这些定义的前缀Hw去掉,那么剩下的名字就和Datasheet上的完全一一对应。没错,确实如此。Telechips为了方便,已经将所有寄存器的地址定义在一个头文件中,Datasheet中提到的寄存器名,只要加上Hw前缀,就能在头文件中找到其相应的位置。
不仅如此,Telechips还在该文件定义了寄存器的相应操作:
以文章开头的例子,如果我们想对PORTCFG4进行设置,那么代码会非常简单:
那么,这代码能不能正常运行呢?很遗憾,结论是:不行。因为这个是硬件的地址,如果你应用程序强制往该地址写数据,你得到的将是一个错误。
似乎遇到了一个难题,但解决方法却是非常简单。我们不包含TCC79x_Physical.h文件,而改为TCC79x_Virtual.h。这两个文件宏定义的名称完全相同,没有任何差别,唯一的差异是,TCC79x_Virtual.h中定义的地址是虚拟内存地址--而这个地址完全可以直接在应用程序中使用。
所以,对于文中提出的问题,以代码的形式,则是简单如此:
其实,借助于TCC79x_Virtual.h文件,我们能做的事情还很多。比如,该文件还对每一位进行了定义:
如果我们的程序的流程依赖于PORTCFG4的第2位的话,那么我们的代码流程也可以简单地书写如下:
总而言之,对于TCC7901寄存器的读写,完全可以在应用程序中进行,这对于产品调试的便利性,不言而喻。
分享到:
相关推荐
TCC7901是Telechip走向高清市场的一个中间过度产品。对多媒体支持是telechip的特点。
韩国telechips公司TCC7901的BSP,做相关平台可以学习一下哦~
Telechips Windows® CE BSP Telechips BSP (Board Support Package) for TCC79x
tcc8900数据手册,包含芯片引脚定义,寄存器结构
5.将simsun.tcc文件传到/usr/share/fonts/truetype/simsun/目录中 6.cd simsun 7.执行 mkfontscale, 生成了fonts.scale文件 8.执行 mkfontdir, 生成了fonts.dir文件 9.chkfontpath --add /usr/share/fonts/...
tcc8900 tcc8900 tcc8900 tcc8900 tcc8900 tcc8900 tcc8900 tcc8900
tcc-0.9.26-支持中文变量函数版
TCC实现分布式事物,实现多数据源,多应用事物统一管理。代码过多,需经验丰富
TCC 0.9.26 中英文编译器 可以使用中文做标识符(或叫变量?) 标识符不能以_ 和 英文字母开头 中文符号(就好像标点.制表符等) 中文标识符可以跟 _ 英文字母 修改了出错误函数提示,有可能不准(水平有限哈)
自己修改的,这个可以支持中文编程,但是不能使用_开头的中文标识符.包里有中文关键字文本以供查看. 编译器编出来的程序有可能会被"杀掉".
tcc编译器是一个编译速度非常快的一个开源编译器。这是我修改后的,它可以用你的母语作标识符,我可以用中文写代码,这样很久以后打开我自己的代码。依然可以和容易就理解。别人识中文的人一样可以很容易理解。我没...
TCC8925x_35_M805S_D3_08X4_V11A_130219-9526 原理图 里面含有TCC8925x 的芯片资料含有芯片有关的原理图
完整的TCC应用商店,前端,后端,移动设备,特殊功能,详细信息以及详细信息: 前端( ) 后端( ) Algumas屏幕截图 :clipboard: 功能科 心脏科顾问 咨询顾问lançadospelo RU 营养问题的答案 RU的通用信息通知...
由定时器对time进行渐增,在TCC中断程序中加入"INC TIME". 3. 宽脉冲最大允许时间和最小允许时间的计算方式: 脉冲允许时间=TCC 中断时间(us)*设定数据 4. 在接收到完整的数据后建立rx_data_ok标志. 5. 该子...
支付宝TCC模型支付宝TCC模型支付宝TCC模型支付宝TCC模型支付宝TCC模型
DVB_RCS TCC 编解码源码,非常难得
这是一个分布式应用程序(微服务),后端使用.NET Core 3.1-有7个API通过MessageBus 通信。 这是一个在巴西完成系统开发技术课程(TCC)的项目。 该项目包括一个电子商务网站,其前端在开发,后端在 , 和。 最初,...
车载多媒体导航用,汽车级SOC。 Android支持:4.4~6.0 特性:10秒快速启动,快速倒车视频显示,集成噪声与回音消除算法
TCC8900 DATASHEET TCC8900 DATASHEET
TCC-Transaction分布式事务DEMO,基于Mysql数据库的事务,包括分布式提交和回滚,例子完成,可以正常跑,基于Maven构建的项目