📄 srom_fun.c
字号:
// 读写X25650函数
#include <c8051f020.h>
#include <defjk206.h>
sbit SPINSS = P1^5 ;
uchar xdata PAGE_BUFF [ 32 ] ; // X25650 工作单元
uchar spirsts ( void ) ;
uchar rdbytespi ( uint address ) ;
void rdpgespi ( uint address ) ;
void wrbytespi ( uint address , uchar dat ) ;
void write_add_para ( void ) ;
void write_ctrl_data ( void ) ;
void write_oup ( void ) ;
void write_odp ( void ) ;
void write_iup ( void ) ;
void write_idp ( void ) ;
void write_qa_tel ( void ) ;
void write_self_tel ( void ) ;
void write_power_limit ( void ) ; // 上、下行输出功率上限
void write_number ( void ) ;
void write_alarm_ena ( void ) ;
void write_op_switch ( void ) ;
void write_atten ( void ) ;
//void write_channel ( void ) ;
//void write_schannel ( void ) ;
extern uint xdata us_chan_no[8] , ds_chan_no[8] ; // 上、下行移频信道号
extern uint xdata chan_no[16] ; // 工作信道号,上、下行使用一个值
extern uchar xdata STATION_NO1 ; // 直放站编号 4 BYTES
extern uchar xdata STATION_NO2 ;
extern uchar xdata STATION_NO3 ;
extern uchar xdata STATION_NO4 ;
extern uchar xdata EQUIPMENT_NO ; // 设备编号 1 BYTE
extern uint xdata ALARM_DELAY_TIME ;
extern uint xdata ALARM_SPACE_TIME ;
extern uchar data freq140x70 ;
extern uchar xdata EQUIPMENT_TYPE ; // 设备类型 1 BYTE
extern uchar xdata COM_MODE ; // 直放站通讯方式
extern uchar xdata max_u_gain , max_d_gain ; // 上、下最大增益
extern uint xdata oup_table [ 37 ] ;
extern uint xdata odp_table [ 37 ] ;
extern uint xdata iup_table [ 36 ] ;
extern uint xdata idp_table [ 36 ] ;
extern uchar xdata query_tel [ 15 ] ;
extern uchar xdata alarm_tel [ 15 ] ;
extern uchar xdata self_tel [ 15 ] ;
extern uchar xdata up_power_limit , down_power_limit , d_in_pow_limit ;
extern uchar xdata up_amp_sw [2], down_amp_sw [2] ; // 上、下行功放开关
extern uchar xdata u_atten[16], d_atten[16] ; // 上、下衰减值
extern BIT_STRUCT xdata alarm_ena [7] ;
/////////////////////////////////////////////////////////////////////
//函 数 名:spiwcmd ()
//功能描述: 读SPI_WREN(0x06)写允许函数
//函数说明:
//调用函数:
//全局变量:
//返 回 值:
//版 本:
/////////////////////////////////////////////////////////////////////
void spiwcmd ( uchar x_adress )
{
//uchar xi ;
SPIEN = 1 ; //允许SPI总线
SPINSS = 0 ; // nss = 0
//for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
SPIF = 0; //关闭spi中断(去除spi中断标志),spif为spi中断标志,只能软件清除中断标志
SPI0DAT = x_adress ;
while(SPIF == 0) _nop_ ( ) ; //等待一个字节传送完
//for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
SPINSS = 1 ;
SPIEN = 0 ;
}
/////////////////////////////////////////////////////////////////////
//函 数 名:spiwsts ()
//功能描述: 写0X00到SPIODAT寄存器函数
//函数说明:
//调用函数:
//全局变量:
//版 本:
/////////////////////////////////////////////////////////////////////
void spiwsts ( void )
{
uchar xi ;
SPIEN = 1 ;
SPINSS = 0 ;
for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
SPIF = 0 ;
SPI0DAT = SPI_WRSR ;
while(SPIF == 0) _nop_ ( ) ;
SPIF = 0 ;
SPI0DAT = 0x00 ;
while(SPIF == 0) _nop_ ( ) ;
SPIF = 0 ;
for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
SPINSS = 1 ;
SPIEN = 0 ;
}
/////////////////////////////////////////////////////////////////////
//函 数 名:spirsts ()
//功能描述: 读允许后.读出一字节数据传给Xi
//函数说明:
//调用函数:
//全局变量:
//设 计 者:
//修 改 者:
//版 本:
/////////////////////////////////////////////////////////////////////
uchar spirsts ( void )
{
uchar xi ;
SPIEN = 1 ;
SPINSS = 0 ;
for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
SPIF = 0;
SPI0DAT = SPI_RDSR ;
while(SPIF == 0) _nop_ ( ) ;
SPIF = 0 ;
SPI0DAT = 0x00 ;
while(SPIF == 0) _nop_ ( ) ;
for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
xi = SPI0DAT ;
SPINSS = 1 ;
SPIEN = 0 ;
SPIF = 0 ;
return xi ;
}
/////////////////////////////////////////////////////////////////////
//函 数 名:wrbytespi ()
//功能描述: 将一字节数据写入到address(十六位地址)中的函数
//函数说明:
//调用函数:
//全局变量:
//设 计 者:
//修 改 者:
//版 本:
/////////////////////////////////////////////////////////////////////
void wrbytespi ( uint address , uchar dat )
{
uchar xi ;
spiwcmd ( SPI_WREN ) ;
SPIEN = 1 ; // 允许SPI总线
SPINSS = 0 ; // nss = 0
for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
SPIF = 0;
SPI0DAT = SPI_WRITE ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
SPIF = 0;
SPI0DAT = (address / 0x100) ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
SPIF = 0;
SPI0DAT = (address % 0x100) ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
SPIF = 0;
SPI0DAT = dat ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
SPINSS = 1 ;
SPIEN = 0 ;
SPIF = 0 ;
}
/////////////////////////////////////////////////////////////////////
//函 数 名:rdbytespi ()
//功能描述: 将16位地址(address)中的高、低字节中的1byte数据读出到SPIODAT.
//函数说明:
//调用函数:
//全局变量:
//设 计 者:
//修 改 者:
//版 本:
/////////////////////////////////////////////////////////////////////
uchar rdbytespi ( uint address )
{
uchar xi ;
SPIEN = 1 ; // 允许SPI总线
SPINSS = 0 ; // nss = 0
for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
SPIF = 0;
SPI0DAT = SPI_READ ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
SPIF = 0;
SPI0DAT = (address / 0x100) ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
SPIF = 0;
SPI0DAT = (address % 0x100) ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
SPIF = 0;
SPI0DAT = 0x00 ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
SPINSS = 1 ;
SPIEN = 0 ;
SPIF = 0 ;
return SPI0DAT ;
}
/////////////////////////////////////////////////////////////////////
//函 数 名:wrpgespi ()
//功能描述: 一次将32组数据写入address开始的十六位地址中
//函数说明:
//调用函数:
//全局变量:
//设 计 者:
//修 改 者:
//版 本:
/////////////////////////////////////////////////////////////////////
void wrpgespi ( uint address )
{
uchar xi ;
spiwcmd ( SPI_WREN ) ;
SPIEN = 1 ; // 允许SPI总线
SPINSS = 0 ; // nss = 0
for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
SPIF = 0 ;
SPI0DAT = SPI_WRITE ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
SPIF = 0;
SPI0DAT = (address / 0x100) ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
SPIF = 0 ;
SPI0DAT = (address % 0x100) ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
for ( xi = 0x00 ; xi < 32 ; xi ++ )
{
SPIF = 0;
SPI0DAT = PAGE_BUFF [ xi ] ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
}
for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
SPIF = 0 ;
SPINSS = 1 ;
SPIEN = 0 ;
for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
}
/////////////////////////////////////////////////////////////////////
//函 数 名:rdpgespi ()
//功能描述:从X25650中读出32字节
//函数说明:
//调用函数:
//全局变量:
//设 计 者:
//修 改 者:
//版 本:
/////////////////////////////////////////////////////////////////////
void rdpgespi ( uint address )
{
uchar xi ;
SPIEN = 1 ; //SPI总线允许
SPINSS = 0 ; // nss = 0
for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
SPIF = 0 ;
SPI0DAT = SPI_READ ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
SPIF = 0 ;
SPI0DAT = (address / 0x100) ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
SPIF = 0 ;
SPI0DAT = (address % 0x100) ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
for ( xi = 0x00 ; xi < 32 ; xi ++ )
{
SPIF = 0 ;
SPI0DAT = 0x00 ;
while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
PAGE_BUFF [ xi ] = SPI0DAT ;
//while(SPIF == 0) _nop_ ( ) ; // 等待一个字节传送完
}
for ( xi = 0x00 ; xi < 200 ; xi ++ ) _nop_ ( ) ;
SPINSS = 1 ;
SPIEN = 0 ;
SPIF = 0 ;
}
/////////////////////////////////////////////////////////////////////
//函 数 名:write_add_para ()
//功能描述:
//函数说明:
//调用函数:
//全局变量:
//设 计 者:
//修 改 者:
//版 本:
/////////////////////////////////////////////////////////////////////
void write_add_para ( void )
{
uchar ii ;
for ( ii = 0 ; ii < 32 ; ii ++ ) PAGE_BUFF [ ii ] = 0xff ;
PAGE_BUFF [ 0x00 ] = ALARM_SPACE_TIME % 0x100 ;
PAGE_BUFF [ 0x01 ] = ALARM_SPACE_TIME / 0x100 ;
PAGE_BUFF [ 0x02 ] = ALARM_DELAY_TIME % 0x100 ;
PAGE_BUFF [ 0x03 ] = ALARM_DELAY_TIME / 0x100 ;
PAGE_BUFF [ 0x04 ] = freq140x70 ;
PAGE_BUFF [ 0x05 ] = EQUIPMENT_TYPE ;
wrpgespi ( add_of_add_para ) ;
ii = spirsts ( ) ; // 延时约5-10MS
while ( ii & 0x01 ) ii = spirsts () ;
}
/////////////////////////////////////////////////////////////////////
//函 数 名:write_ctrl_data ()
//功能描述:写入上行与下行最大增益
//函数说明:
//调用函数:
//全局变量:
//设 计 者:
//修 改 者:
//版 本:
/////////////////////////////////////////////////////////////////////
void write_ctrl_data ( void )
{
uchar ii ;
PAGE_BUFF [ 0x00 ] = max_u_gain ; // 最大增益
PAGE_BUFF [ 0x01 ] = max_d_gain ; // 最大增益
wrpgespi ( add_of_ctrl_dat_table ) ;
ii = spirsts ( ) ; // 延时约5-10MS
while ( ii & 0x01 ) ii = spirsts () ;
}
/////////////////////////////////////////////////////////////////////
//函 数 名:write_oup ()
//功能描述:上行输出功率配置表写入25650
//函数说明:
//调用函数:
//全局变量:
//设 计 者:
//修 改 者:
//版 本:
/////////////////////////////////////////////////////////////////////
void write_oup ( void )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -