打印

熟悉CY7C68013 请进

[复制链接]
2114|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dyeleven|  楼主 | 2011-8-19 10:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
熟悉CY7C68013的GPIF大侠们
能不能帮我解释下下面的语句,主要是里面的赋值语句,不能理解



void GPIF_SingleWordWrite( WORD gdata )
{
  while( !( GPIFTRIG & 0x80 ) )
  {
    ;
  }
  XGPIFSGLDATH = gdata;              
  XGPIFSGLDATLX = gdata >> 8;
}

相关帖子

沙发
dqyubsh| | 2011-8-19 10:14 | 只看该作者
用户参考手册里有详细说明啊,那两行是启动一个GPIF波形传输,把一个16位的字gdata输出到GPIF接口。

使用特权

评论回复
板凳
dyeleven|  楼主 | 2011-8-19 10:33 | 只看该作者
本帖最后由 dyeleven 于 2011-8-19 11:17 编辑

2# dqyubsh

但是这个赋值语句理解不了
一个16位的变量 赋值 给一个8位的变量
赋值的是高8位还是低8位?

为什么不是这样的
XGPIFSGLDATH = <word_value> >> 8;              
XGPIFSGLDATLX = <word_value>;        // trigger GPIF

使用特权

评论回复
地板
tongzhezhe| | 2011-8-19 11:20 | 只看该作者
这个函数有个gdata参数进来,XGPIFSGLDATH是GPIF数据高八位寄存器
,把gdata这个参数赋值给高八位数据寄存器,XGPIFSGLDATLX是低八位的数据寄存器,gdata >> 8这个是gdata右移八位,然后赋值给低八位数据寄存器。
  就语法上就是这样的,到底想要实现什么功能,具体的还要看整个程序

使用特权

评论回复
5
dqyubsh| | 2011-8-19 12:21 | 只看该作者
XGPIFSGLDAT是16位的寄存器,其中+H是高8位,+L是低8位,L后边的X是启动波形,不带X就不启动,这么说懂了吗?

使用特权

评论回复
6
dqyubsh| | 2011-8-21 18:25 | 只看该作者
本帖最后由 dqyubsh 于 2011-8-21 18:32 编辑

我仔细看了一下楼主的回帖,明白了楼主的疑惑。

在下载数据过程中,整数的高低字节有交换,这个很容易理解。对一个整数,如16位或者32位整数,在系统中存放方式有两种,分别是低字节在前高字节在后,或者是高字节在前低字节在后。前者叫little-endian系统,后者叫big-endian。如果两个不同存储方式的系统交换整形数据,就要进行高低字节的互换。

微机(INTEL内核,little)下载给68013(51内核,keil-C编译器定义为big),因为二者字节次序不一样,刚好要交换。

假如GPIF交换给了DSP或者ARM,可能的情况是,还需要再次交换字节次序。当然,DSP/ARM的存储方式是可以设定的,未必一定要换。

使用特权

评论回复
7
dyeleven|  楼主 | 2011-8-22 08:33 | 只看该作者
谢谢各位大虾了,确实学习了

使用特权

评论回复
8
dyeleven|  楼主 | 2011-8-22 08:34 | 只看该作者
7# dqyubsh

讲解得很明白,十分感谢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

10

帖子

1

粉丝