📄 lib.c
字号:
*(QSM_TxRAM+13)=0x00; *(QSM_CmRAM+13)=0xB5; // 输出数据(数据)
*(QSM_TxRAM+14)=0x61; *(QSM_CmRAM+14)=0x35; // 输出数据(数据)
*QSM_SPCR1=0x9407; // QSPI允许
for (sts=0;sts<10;sts++);
while ((*QSM_SPSR&0x80)==00); // 等待传输完成
//*QSM_QPDR &= 0xEF;
}
int16 ad_temp;
int16 Read_AD7856(uint8 ch)
{
uint8 sts,i;
//
asm (" MOVE.B $FFFC1F,D1"); // QSPI标志清零
asm (" MOVE.B #0,$FFFC1F");
*QSM_SPCR1=0x1407; // QSPI禁止、SCK之前延时20、SCK之后延时7
*QSM_SPCR0=0xA011; // QSPI主机方式、每次传送8位、速率 1Mbps
*QSM_SPCR2=0x0100; // 队列结束指针为8、队列开始指针为0,禁止中断、环绕
*QSM_SPCR3=0x00; // 禁止反馈路径、中断、暂停
*QSM_QPDR |= 0x20;
*(QSM_TxRAM+0) =ch; *(QSM_CmRAM+0)=0xB9; // 输出数据
*(QSM_TxRAM+1) =0x10; *(QSM_CmRAM+1)=0x39; // 输出数据
*QSM_SPCR1=0x9407;
while ((*QSM_SPSR&0x80)==00); // 等待传输完成
//等待转换结束
for (sts=0;sts<50;sts++);
asm (" MOVE.B $FFFC1F,D1"); // QSPI标志清零
asm (" MOVE.B #0,$FFFC1F");
*QSM_SPCR1=0x1407; // QSPI禁止、SCK之前延时20、SCK之后延时7
*QSM_SPCR0=0xA011; // QSPI主机方式、每次传送8位、速率 1Mbps
*QSM_SPCR2=0x0100; // 队列结束指针为8、队列开始指针为0,禁止中断、环绕
*QSM_SPCR3=0x00; // 禁止反馈路径、中断、暂停
*QSM_QPDR |= 0x20;
*(QSM_TxRAM+0) =00; *(QSM_CmRAM+0)=0xB9; // 输出数据
*(QSM_TxRAM+1) =00; *(QSM_CmRAM+1)=0x39; // 输出数据
*QSM_SPCR1=0x9407;
while ((*QSM_SPSR&0x80)==00); // 等待传输完成
for (sts=0;sts<10;sts++);
ad_temp=(*(QSM_RxRAM+0))*256 + (*(QSM_RxRAM+1));
//
return (ad_temp); // 返回读入数据字
}
int16 Read_AD7856_Status()
{
uint8 sts,i;
//
asm (" MOVE.B $FFFC1F,D1"); // QSPI标志清零
asm (" MOVE.B #0,$FFFC1F");
*QSM_SPCR1=0x1407; // QSPI禁止、SCK之前延时20、SCK之后延时7
*QSM_SPCR0=0xA011; // QSPI主机方式、每次传送8位、速率 1Mbps
*QSM_SPCR2=0x0100; // 队列结束指针为8、队列开始指针为0,禁止中断、环绕
*QSM_SPCR3=0x00; // 禁止反馈路径、中断、暂停
*(QSM_TxRAM+0) =0x40; *(QSM_CmRAM+0)=0xB9; // 输出数据
*(QSM_TxRAM+1) =0x02; *(QSM_CmRAM+1)=0x39; // 输出数据
*QSM_SPCR1=0x9407;
while ((*QSM_SPSR&0x80)==00); // 等待传输完成
}
uint8 KR_Select_buf=0;
void xtr_clk_low() //XE0-CLK-HIGH
{
// KR_Select_buf &=~01;
// *KR_Select =KR_Select_buf;
*QSM_QPDR &= ~0x04;
}
void xtr_clk_high() //XE0-CLK-LOW
{
// KR_Select_buf |= 01;
// *KR_Select =KR_Select_buf;
*QSM_QPDR |= 0x04;
}
void xtr_cs_low() //XE1-CS-HIGH
{
// KR_Select_buf &=~02;
// *KR_Select =KR_Select_buf;
*QSM_QPDR &=~ 0x40;
}
void xtr_cs_high() //XE1-CS-LOW
{
// KR_Select_buf |= 02;
// *KR_Select =KR_Select_buf;
*QSM_QPDR |= 0x40;
}
void xtr_out_low() //XE2-OUT-HIGH
{
// KR_Select_buf &=~04;
// *KR_Select =KR_Select_buf;
*QSM_QPDR &=~ 0x02;
}
void xtr_out_high() //XE2-OUT-LOW
{
// KR_Select_buf |= 04;
// *KR_Select =KR_Select_buf;
*QSM_QPDR |= 0x02;
}
// asm (" nop "); //nop
void writer_xtr_one(uint8 dat)
{
uint8 i;
xtr_clk_low();
xtr_cs_low();
for(i=0;i<8;i++)
{
xtr_clk_low();
if(dat&0x80) xtr_out_high();
else xtr_out_low();
dat=(dat<<1);
xtr_clk_high();
}
}
void initialize_xtr() //2ms
{
xtr_cs_high();
// xtr_clk_high();
writer_xtr_one(0x00);
writer_xtr_one(0x80);
xtr_cs_high();
// xtr_clk_high();
writer_xtr_one(0x04);
writer_xtr_one(0x01);
writer_xtr_one(0x0f);
writer_xtr_one(0x04);
writer_xtr_one(0x00);
writer_xtr_one(0x14);
writer_xtr_one(0x14);
writer_xtr_one(0x00);
writer_xtr_one(0x00);
writer_xtr_one(0x00);
writer_xtr_one(0x00);
writer_xtr_one(0x00);
writer_xtr_one(0xC3);
xtr_cs_high();
}
//--------------------------------------------------------------------------------------------------
void RD_time(R_CLOCK *addr)
{
/* *CLKcontrol = 0x40;
addr->Micros = *CLKmicros;
addr->Second = *CLKsecond & 0x7F;
addr->Minute = *CLKminute & 0x7F;
addr->Hour = *CLKhour & 0x3F;
addr->Date = *CLKdate & 0x3F;
addr->Month = *CLKmonth & 0x1F;
addr->Year = *CLKyear;
*CLKcontrol = 0x00;*/
}
void WR_time(R_CLOCK *addr)
{
/**CLKcontrol = 0x80;
*CLKmicros = addr->Micros;
*CLKsecond = addr->Second;
*CLKminute = addr->Minute;
*CLKhour = addr->Hour;
*CLKdate = addr->Date;
*CLKmonth = addr->Month;
*CLKyear = addr->Year;
*CLKcontrol = 0x00;*/
}
//--------------------------------------------------------------------------------------------------
void MEM_clear(uint8 *ptr,uint16 N) // 存储器清零
{
register uint16 i;
for (i=0;i<N;i++)
{
*ptr++ = 0;
}
}
void MEM_setup(uint8 *ptr,uint16 N,uint16 W) // 存储器置数
{
register uint16 i;
for (i=0;i<N;i++)
{
*ptr++ = W;
}
}
void MEM_copy(uint8 *Sptr,uint8 *Dptr,uint16 N) // 存储器拷贝
{
register uint16 i;
for (i=0;i<N;i++)
{
*Dptr++ = *Sptr++;
}
}
void Bit_clr(uint8 *adr,uint8 num) // 位清除函数
{
*(adr+num/8) &= ~(1<<(num%8));
}
void Bit_set(uint8 *adr,uint8 num) // 位置位函数
{
*(adr+num/8) |= (1<<(num%8));
}
void Bit_cpl(uint8 *adr,uint8 num) // 位取反函数
{
*(adr+num/8) ^= (1<<(num%8));
}
void Bit_asn(uint8 *adr,uint8 num,uint8 sts) // 位置值函数
{
if (sts)
*(adr+num/8) |= (1<<(num%8));
else *(adr+num/8) &= ~(1<<(num%8));
}
uint8 Bit_tst(uint8 *adr,uint8 num) // 位测试函数
{
if (*(adr+num/8) & (1<<(num%8))) return(0xFF); else return(0x00);
}
uint32 BCD_32(uint32 Long) // 二进制数转换为十进制数
{
union L x;
x.W[0] = BCD_16(Long/10000);
x.W[1] = BCD_16(Long%10000);
return (x.L);
}
uint16 BCD_16(uint16 Word) // 二进制数转换为十进制数
{
union W x;
x.B[0] = BCD_08(Word/100);
x.B[1] = BCD_08(Word%100);
return (x.W);
}
uint8 BCD_08(uint8 Byte) // 二进制数转换为十进制数
{
return ((Byte/10)*16 + (Byte%10));
}
uint32 BIN_32(uint32 Long) // 十进制数转换为二进制数
{
uint32 x;
x = BIN_16(Long/65536)*10000;
x += BIN_16(Long%65536);
return (x);
}
uint16 BIN_16(uint16 Word) // 十进制数转换为二进制数
{
uint16 x;
x = BIN_08(Word/256)*100;
x += BIN_08(Word%256);
return (x);
}
uint8 BIN_08(uint8 uint8) // 十进制数转换为二进制数
{
return ((uint8/16)*10 + (uint8%16));
}
uint16 MAX_3(uint16 a,uint16 b,uint16 c)
{
uint16 x;
x=a;
if(x<b) x=b;
if(x<c) x=c;
return(x);
}
uint32 MAX32_3(uint32 a,uint32 b,uint32 c)
{
uint32 x;
x=a;
if(x<b) x=b;
if(x<c) x=c;
return(x);
}
uint32 MIN32_3(uint32 a,uint32 b,uint32 c)
{
uint32 x;
x=a;
if(x>b) x=b;
if(x>c) x=c;
return(x);
}
//量纲表
const uint8 LG_tab[17][6] =
{
{"伏 "},
{"安 "},
{"秒 "},
{"欧 "},
{"度 "},
{"Km/欧 "},
{"Hz "},
{"Hz/S "},
{"V/S "},
{"分 "},
{"瓦 "},
{"乏 "},
{" "},
{"毫秒 "}, //2002,12,2,sdg
{"千米 "}, //2003/1/10/sdg
{"千伏 "}, //16
{"MVA "}, //17
};
/****************************************************************
* 名称: SetPoint
* 说明: 待写
* 功能: 小数定位函数
* 调用: 在十六进制翻译为ascII码时对小数点定位
* 输入: *ptr:ASCII数据存放指针; x:整数位长度
* 返回值: 从第几位开始取ascII码
******************************************************************/
uint8 SetPoint (uint8 *ptr,uint8 x)
{
uint8 i;
for (i=0; i<x; i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -