应用程序中读写TCC7901的寄存器

//=====================================================================
//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寄存器的读写,完全可以在应用程序中进行,这对于产品调试的便利性,不言而喻。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值