原创 ATT7022 SPI底层驱动

2009-12-11 17:18 7333 11 16 分类: 工业电子



        Att7022通过SPI接口与控制器连接,ATT7022提供测量电压、电流,有功功率、无功功率、有功电能,无功电能,频率,相角,基波谐波等信息,是为三相电能表而设计.下面是ATT7022的读写操作和一些底层驱动。具体文档请参看数据手册(在上一篇文章)。控制器NXP的LPC2000系列ARM


 



void Att7022_Init(void)
{
 PINSEL0 &= ~((0x0f << 8) + (0x03 << 12) + (0x03 << 14) + (0x03 << 16) );
 
 IO0DIR = ( IO0DIR & ~SCLK ) | SCLK;     // 时钟
 IO0DIR = ( IO0DIR & ~MISO ) ;      // 输入
 IO0DIR = ( IO0DIR & ~MOSI ) | MOSI;    // 输出
 IO0DIR = ( IO0DIR & ~nCS )  | nCS;      // 片选
  
  IO0SET = nCS;
  
}


 


uint32 SpiWrite( uint8 wCmd, uint32 data )
{
 uint8 i;
 uint32 iRet;
  
 IO0SET = nCS;
 IO0CLR = SCLK;
 IO0CLR = nCS;       // 打开SPI
                         
 wCmd = wCmd | 0x80;                    // 最高位置位,表示为写操作
 for( i = 0; i < 8; i++ )               // 发送一个字节的数据
 {
  IO0SET = SCLK;SpiDelay(1);
  if( wCmd & 0x80 )                  // 高位在前进行发送
  {
   IO0SET = MOSI;
  }
  else
  {
   IO0CLR = MOSI;
  }
  IO0CLR = SCLK;SpiDelay(1);
  wCmd = wCmd << 1;
 }


 SpiDelay(1);
 for( i = 0; i < 24; i++ )             // 发送24位的数据
 {
  IO0SET = SCLK;SpiDelay(1);
  if( data & 0x800000 )            // 高位在前进行发送
  {
   IO0SET = MOSI;
  }
  else
  {
   IO0CLR = MOSI;
  }
  IO0CLR = SCLK;SpiDelay(1);
  data = data << 1;
 }


 IO0SET = nCS;                         // 关闭SPI口
 return iRet;
}


uint32 SpiRead( uint8 rCmd )
{
 uint8 i;
 uint32 iRet;


 IO0SET = nCS;
 IO0CLR = SCLK;
 IO0CLR = nCS;                         // 打开SPI
 for( i = 0; i < 8; i++ )               // 发送一个字节的数据
 {
  IO0SET = SCLK;SpiDelay(1);
  if( rCmd & 0x80 )                  // 高位在前进行发送
  {
   IO0SET = MOSI;
  }
  else
  {
   IO0CLR = MOSI;
  }
  IO0CLR = SCLK;SpiDelay(1);
  rCmd = rCmd << 1;
 }


 SpiDelay( 10 );
 iRet = 0;
 for( i = 0; i < 24; i++ )              // 接收24位的数据
 {
  iRet = iRet << 1;
  IO0SET = SCLK;SpiDelay(1);
  if( IO0PIN & MISO )
  {
   iRet = iRet + 0x01;
  }
  IO0CLR = SCLK;SpiDelay(1);
 }
 IO0SET = nCS;                         // 关闭SPI口



 return iRet;
}

PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

用户410564 2011-10-10 20:24

谢谢分享!

用户592135 2011-2-27 15:47

楼主你好!我下载下来之后怎么解压不了啊!急~~~ 楼主能发到我的邮箱吗? zjhed@126.com 不胜感激

用户136726 2009-12-11 11:42

谢谢分享

用户1522964 2009-6-5 21:16

不客气,兄弟你也弄电能表,多多交流

用户560415 2009-6-5 16:58

是好东西,谢谢分享!!!
相关推荐阅读
用户1522964 2012-08-04 17:27
LPC1768 CPU 时钟配置【转】
  调试LPC1768, NXP的库好像不如Luminary的好用(大家都这么说,也就跟着人云亦云了)。对照LPC1768的手册看了看Keil例程的PLL0配置过程,记录如下:      ...
用户1522964 2012-07-24 11:18
【转】Cortex-M3 FAQ 常见问题解答
Q1: Cortex-M3是什么? A: 它是ARM在重视MCU市场后,设计的一个用于32位单片机的处理器内核。Cortex-M3一经推出就得到整个业界的追捧,其先进的架构和很多突破性的特性更是...
用户1522964 2012-07-24 11:11
【原创】硬件设计注意事项 学习笔记
PCB打样注意 一定要检查 检查的范围 a.电源线一般要加粗 b.元件封装是否正确,(新增加器件、重要器件一定要核对) c.元件丝印是否放好 d.覆铜 e.元件,布线安...
用户1522964 2012-07-14 17:36
自己做了个博客网站 三牛电子工作室
自己做了个博客网站 三牛电子工作室,网站www.sanliu85.com,欢迎大家参观...
用户1522964 2011-12-28 09:46
我回来了
久不发博客了,呵呵,差点忘记怎么弄了...
用户1522964 2010-10-14 17:48
刚刚完工 lpc23XXUSB 上位机调试软件
刚刚完工一个USB的上位机测试软件,只适用于lpc23xx系列,随便修改下就可以用在其他的USB上了源代码工程已经上传了,有需要的自己下吧...
EE直播间
更多
我要评论
5
11
关闭 站长推荐上一条 /3 下一条