|
//我們的SPI速度最高可以達(dá)到1.5M左右
//需要注意的是每次CS拉低啟動(dòng)傳輸,需要給2-3us的延時(shí)時(shí)間。
//CS拉高結(jié)束數(shù)據(jù)傳輸之前也需要給出2-3us的延時(shí)時(shí)間
void Delay(unsigned int time) //一個(gè)控制信號(hào)高電平低電平時(shí)間的延時(shí)
{
int i;
for(i=0; i<time; i++);
}
unsigned long SPI_Read(unsigned char address)
{
int i;
unsigned long temp_data;
temp_data = 0;
SPI_CLK_LOW; //確保CLK初始狀態(tài)是0
Delayus(1);
SPI_CS_HIGH;
Delayus(2);
SPI_CS_LOW;
Delayus(5);
SPI_CLK_HIGH; //啟動(dòng)數(shù)據(jù)傳輸
Delayus(1);
SPI_DIN_LOW; //0表示主機(jī)向從機(jī)讀數(shù)據(jù)
Delayus(1);
SPI_CLK_LOW; //從機(jī)需要在下降沿取數(shù)據(jù)
Delayus(1);
for(i=6; i>=0; i--)
{
SPI_CLK_HIGH; //啟動(dòng)數(shù)據(jù)傳輸
Delayus(10);
if( (address& (0x01<<i))>>i)//(address & 0x01)
{
SPI_DIN_HIGH;
}
else
SPI_DIN_LOW;
Delayus(1);
SPI_CLK_LOW; //從機(jī)需要在下降沿取數(shù)據(jù)
Delayus(10);
}
SPI_CLK_HIGH;
Delayus(10);
SPI_CLK_LOW;
if(READ_SPI_DOUT)
temp_data = temp_data | 1;
Delayus(2); //從機(jī)接收到命令后,開始送出數(shù)據(jù),上升沿送數(shù)據(jù)
for(i=0; i<23; i++)
{
SPI_CLK_HIGH;
Delayus(10);
SPI_CLK_LOW;
Delayus(10);
temp_data = temp_data<<1;
if(READ_SPI_DOUT)
temp_data++;
Delayus(1);
}
SPI_CS_HIGH;
return temp_data;
}
void SPI_Write(unsigned char address, unsigned long write_data)
{
int i;
unsigned long temp_data;
temp_data = 1;
SPI_CLK_LOW; //確保CLK初始狀態(tài)是0
Delayus(100);
SPI_CS_HIGH;
Delayus(50);
SPI_CS_LOW;
Delayus(100);
SPI_CLK_HIGH; //啟動(dòng)數(shù)據(jù)傳輸
Delayus(10);
SPI_DIN_HIGH; //1表示主機(jī)向從機(jī)寫數(shù)據(jù)
Delayus(10);
SPI_CLK_LOW; //從機(jī)需要在下降沿取數(shù)據(jù)
Delayus(10);
for(i=6; i>=0; i--)
{
SPI_CLK_HIGH; //啟動(dòng)數(shù)據(jù)傳輸
Delayus(10);
if((address & (0x01<<i))>>i)
{
SPI_DIN_HIGH;
}
else
SPI_DIN_LOW;
Delayus(10);
SPI_CLK_LOW; //從機(jī)需要在下降沿取數(shù)據(jù)
Delayus(10);
}
//從機(jī)接收到命令后,開始送出數(shù)據(jù),上升沿送數(shù)據(jù)
Delayus(40);
for(i=23; i>=0; i--)
{
SPI_CLK_HIGH; //啟動(dòng)數(shù)據(jù)傳輸
Delayus(10);
if((write_data & (temp_data<<i))>>i)
{
SPI_DIN_HIGH;
}
else
SPI_DIN_LOW;
Delayus(10);
SPI_CLK_LOW; //從機(jī)需要在下降沿取數(shù)據(jù)
Delayus(10);
}
SPI_CS_HIGH;
}
void ATT7053_Init(void)
{
SPI_Write(0x32, 0xBC); //Open written-protect 只能操作 40H 到 45H 的校表參數(shù)寄存器
SPI_Write(0x43, 0xFA); //I1 ADC Enable
// SPI_Write(0x43, 0xDF); //close bor
SPI_Write(0x42, 0x01FF); //I1Angle Enable, I2Angle Enable
SPI_Write(0x32, 0xA6); //Open written-protect 只能操作 50H 到 71H 的校表參數(shù)寄存器
SPI_Write(0x59, 0x0001); //模擬通道增益I1*2
Delayms(10);
SPI_Read(0x06);
}
|
-
-
ATT7053.zip
2018-7-25 11:31 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
1.57 KB, 下載次數(shù): 146, 下載積分: 黑幣 -5
實(shí)際項(xiàng)目代碼
|