|
计量芯片7022与TMS320F205的SPI通讯程序
#include <C:\TDS-EMU2XX-1\gzy\tyclh.h> #include <C:\TDS-EMU2XX-1\gzy\ADio.h>
extern unsigned i_574vol;
/*---------------------7022_a----------------------------*/
#define cs_a_h i_574vol |= 0x0020; CsIo574= i_574vol; Wait; #define cs_a_l i_574vol &= 0x00df; CsIo574= i_574vol; Wait; #define sclk_a_h i_574vol |= 0x0008; CsIo574= i_574vol; Wait; #define sclk_a_l i_574vol &= 0x00f7; CsIo574= i_574vol; Wait; #define data_a_h i_574vol |= 0x0010; CsIo574= i_574vol; Wait; #define data_a_l i_574vol &= 0x00ef; CsIo574= i_574vol; Wait;
/*---------------------7022_b----------------------------*/
#define cs_b_h i_574vol |= 0x0004; CsIo574= i_574vol; Wait; #define cs_b_l i_574vol &= 0x00fb; CsIo574= i_574vol; Wait; #define sclk_b_h i_574vol |= 0x0001; CsIo574= i_574vol; Wait; #define sclk_b_l i_574vol &= 0x00fe; CsIo574= i_574vol; Wait; #define data_b_h i_574vol |= 0x0002; CsIo574= i_574vol; Wait; #define data_b_l i_574vol &= 0x00fd; CsIo574= i_574vol; Wait; /*------------------------------------------------------*/ /*void read7022_a(int com); void write7022_a(int com,long data); void read7022_b(int com); void write7022_b(int com,long data); */
/*-------------------------7022_a--------------------------*/
long read7022_a(int com) { long data=0; long jj=0; int i=0; int k=0x80; reg_aspcr&= 0xfff0; cs_a_h; sclk_a_l; cs_a_l; for (i=0;i<=7;i++) /*送地址*/ { if (com&k) { sclk_a_h; data_a_h; sclk_a_l; } else { sclk_a_h; data_a_l; sclk_a_l; } k=k/2; } Wait;Wait;Wait; for (i=23;i>=0;i--) /*读数据*/ { sclk_a_h; jj=reg_iosr&0x0001; jj=jj<<i; data=jj+data; sclk_a_l; } cs_a_h; return(data); } /*-----------------------------------------------------------*/ void write7022_a(int com,long data) { long jj=0x800000; int i=0; int k=0x80; // reg_aspcr&= 0xfff0; cs_a_h; sclk_a_l; cs_a_l; for (i=0;i<=7;i++) /*送地址*/ { if (com&k) { sclk_a_h; data_a_h; sclk_a_l; } else { sclk_a_h; data_a_l; sclk_a_l; } k=k/2; }
for (i=0;i<=23;i++) /*写数据*/ { if (data&jj) { sclk_a_h; data_a_h; sclk_a_l; } else { sclk_a_h; data_a_l; sclk_a_l; } jj=jj/2; } cs_a_h; }
/*====================7022_b===========================*/ long read7022_b(int com) { long data=0; long jj=0; int i=0; int k=0x80; reg_aspcr&= 0xfff0; cs_b_h; sclk_b_l; cs_b_l; for (i=0;i<=7;i++) /*送地址*/ { if (com&k) { sclk_b_h; data_b_h; sclk_b_l; } else { sclk_b_h; data_b_l; sclk_b_l; } k=k/2; } Wait;Wait;Wait; for (i=23;i>=0;i--) /*读数据*/ { sclk_b_h; jj=reg_iosr&0x0004; jj=jj>>2; jj=jj<<i; data=jj+data; sclk_b_l; } cs_b_h; return(data); } /*-----------------------------------------------------------*/ void write7022_b(int com,long data) { long jj=0x800000; int i=0; int k=0x80; // reg_aspcr&= 0xfff0; cs_b_h; sclk_b_l; cs_b_l; for (i=0;i<=7;i++) /*送地址*/ { if (com&k) { sclk_b_h; data_b_h; sclk_b_l; } else { sclk_b_h; data_b_l; sclk_b_l; } k=k/2; } /* Wait;Wait;Wait; */ for (i=0;i<=23;i++) /*写数据*/ { if (data&jj) { sclk_b_h; data_b_h; sclk_b_l; } else { sclk_b_h; data_b_l; sclk_b_l; } jj=jj/2; } cs_b_h; }
/*-------------------------------------*/ delaytime(int cishu) { int ii,i; for (ii=0;ii<cishu;ii++) { for(i=0;i<0xf;i++) { asm(" rpt #75"); asm(" nop") ; } } } /*------------------------------------------------------*/ void reset7022_a() { i_574vol &= 0x00bf; CsIo574= i_574vol; delaytime(10); i_574vol |= 0x0040; CsIo574= i_574vol; } /*------------------------------------------------------*/ void reset7022_b() { i_574vol &= 0x007f; CsIo574= i_574vol; delaytime(10); i_574vol |= 0x0080; CsIo574= i_574vol; }
|