⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fm25cl64.c

📁 LPC2103两轴步进电机控制程序,带加减速,一路脉冲+方向输出、继电器延时、报警,三菱FX系列通信兼容RS232(9600,1,0.1)
💻 C
字号:
/****************************************************

*---------------------------------------------------*
*  功能描述: FM25CL64操作								*
*---------------------------------------------------*/
#include "mpa101.h"

//------------------------------------------
// Function   : FM25X_Init
// Description: 初始化
//------------------------------------------
void FM25X_Init(U32 sp)
{
	U32 n;
	n = Fpclk*2/sp;
	if(n<8) n = 8;
	S0SPCCR = n;		// 时钟>=8 16*2/8 = 4M
//	S0SPCR = 0x38;		// 主模式、CPOL=1、CPHA=1 SPIMODE=3
	S0SPCR = 0x20;		// 主模式、CPOL=0、CPHA=0 SPIMODE=0
	FIO0SET = SS1;
}	

//------------------------------------------
// Function   : FM_Wen
// Description: 允许写操作
//------------------------------------------
void FM_Wren(void)
{
	FIO0CLR = SS1;
	S0SPDR = WREN;
	while(0==(S0SPSR&0x80));
	FIO0SET = SS1;
}	

//------------------------------------------
// Function   : FM_Wrdi
// Description: 写操作禁止
//------------------------------------------
void FM_Wrdi(void)
{
	FIO0CLR = SS1;
	S0SPDR = WRDI;
	while(0==(S0SPSR&0x80));
	FIO0SET = SS1;
}	

//------------------------------------------
// Function   : FM_Rdsr
// Description: 读状态值
//------------------------------------------
U8 FM_Rdsr(void)
{
	U8 re;
	FIO0CLR = SS1;
	S0SPDR = (U8)(RDSR);
	while(0==(S0SPSR&0x80));
	S0SPDR = 0xff;								// 送8个SCK
	while(0==(S0SPSR&0x80));
	re = S0SPDR;
	FIO0SET = SS1;
	return(re);
}	

//------------------------------------------
// Function   : FM_Wrsr
// Description: 写状态值
//------------------------------------------
void FM_Wrsr(U8 status)
{
	FM_Wren();
	FIO0CLR = SS1;
	S0SPDR = (U8)(WRSR);
	while(0==(S0SPSR&0x80));
	S0SPDR = status;
	while(0==(S0SPSR&0x80));
	FIO0SET = SS1;
}	
//************FM25CL04**********************
//------------------------------------------
// Function   : FM_WByte
// Description: 写byte数据至FM25CL04
//------------------------------------------
void FM_WByte(U16 add, U8 dat)
{
	FM_Wren();
	FIO0CLR = SS1;
	S0SPDR = WRITE|(U8)((add/256)<<3);		// 写指令
		while(0==(S0SPSR&0x80));
	S0SPDR = (U8)(add%256);					// 低位地址
		while(0==(S0SPSR&0x80));
	S0SPDR = dat;							// 送数据
		while(0==(S0SPSR&0x80));
	FIO0SET = SS1;
}	

//------------------------------------------
// Function   : FM_WriteSeq
// Description: 写数据串至FM25CL04
//------------------------------------------
void FM_WriteSeq(U16 add, U8 *ptr, U16 num)
{
	U16 i;
	FM_Wren();
	FIO0CLR = SS1;
	S0SPDR = WRITE|(U8)((add/256)<<3);		// 写指令
		while(0==(S0SPSR&0x80));
	S0SPDR = (U8)(add%256);					// 低位地址
		while(0==(S0SPSR&0x80));
	for(i=0; i<num; i++){
		S0SPDR = *(ptr+i);					// 送数据
		while(0==(S0SPSR&0x80));
	}
	FIO0SET = SS1;
}	

//------------------------------------------
// Function   : FM_RByte
// Description: 从FM25CL04读byte数据
//------------------------------------------
U8 FM_RByte(U16 add)
{
	U8  re;
	
	FIO0CLR = SS1;
	S0SPDR = READ|(U8)((add/256)<<3);		// 读指令
		while(0==(S0SPSR&0x80));
	S0SPDR = (U8)(add%256);					// 低位地址
		while(0==(S0SPSR&0x80));
	S0SPDR = 0xff;							// 送8个SCK
		while(0==(S0SPSR&0x80));
	re = S0SPDR;							// 读取数据
	FIO0SET = SS1;
	return(re);
}	

//------------------------------------------
// Function   : FM_ReadSeq
// Description: 从FM25CL04读数据串
//------------------------------------------
void FM_ReadSeq(U16 add, U8 *ptr, U16 num)
{
	U16 i;
	FIO0CLR = SS1;
	S0SPDR = READ|(U8)((add/256)<<3);		// 读指令
		while(0==(S0SPSR&0x80));
	S0SPDR = (U8)(add%256);					// 低位地址
		while(0==(S0SPSR&0x80));
	for(i=0; i<num; i++){
		S0SPDR = 0xff;						// 送8个SCK
		while(0==(S0SPSR&0x80));
		*(ptr+i) = S0SPDR;					// 读取数据
	}
	FIO0SET = SS1;
}	
//**************FM25CL04********************

//**************FM25CL64********************
//------------------------------------------
// Function   : FM_WByte
// Description: 写byte数据至FM25CL64
//------------------------------------------
/*void FM_WByte(U16 add, U8 dat)
{
	FM_Wren();
	FIO0CLR = SS1;
	S0SPDR = WRITE;							// 写指令
		while(0==(S0SPSR&0x80));
	S0SPDR = (U8)(add/256);					// 写高位地址
		while(0==(S0SPSR&0x80));
	S0SPDR = (U8)(add%256);					// 低位地址
		while(0==(S0SPSR&0x80));
	S0SPDR = dat;							// 送数据
		while(0==(S0SPSR&0x80));
	FIO0SET = SS1;
}	

//------------------------------------------
// Function   : FM_WriteSeq
// Description: 写数据串至FM25CL64
//------------------------------------------
void FM_WriteSeq(U16 add, U8 *ptr, U16 num)
{
	U16 i;
	FM_Wren();
	FIO0CLR = SS1;
	S0SPDR = WRITE;							// 写指令
		while(0==(S0SPSR&0x80));
	S0SPDR = (U8)(add/256);					// 写高位地址
		while(0==(S0SPSR&0x80));
	S0SPDR = (U8)(add%256);					// 低位地址
		while(0==(S0SPSR&0x80));
	for(i=0; i<num; i++){
		S0SPDR = *(ptr+i);					// 送数据
		while(0==(S0SPSR&0x80));
	}
	FIO0SET = SS1;
}	

//------------------------------------------
// Function   : FM_RByte
// Description: 从FM25CL64读byte数据
//------------------------------------------
U8 FM_RByte(U16 add)
{
	U8  re;
	
	FIO0CLR = SS1;
	S0SPDR = READ;							// 读指令
		while(0==(S0SPSR&0x80));
	S0SPDR = (U8)(add/256);					// 读高位地址
		while(0==(S0SPSR&0x80));
	S0SPDR = (U8)(add%256);					// 低位地址
		while(0==(S0SPSR&0x80));
	S0SPDR = 0xff;							// 送8个SCK
		while(0==(S0SPSR&0x80));
	re = S0SPDR;							// 读取数据
	FIO0SET = SS1;
	return(re);
}	

//------------------------------------------
// Function   : FM_ReadSeq
// Description: 从FM25CL64读数据串
//------------------------------------------
void FM_ReadSeq(U16 add, U8 *ptr, U16 num)
{
	U16 i;
	FIO0CLR = SS1;
	S0SPDR = READ;							// 读指令
		while(0==(S0SPSR&0x80));
	S0SPDR = (U8)(add/256);					// 读高位地址
		while(0==(S0SPSR&0x80));
	S0SPDR = (U8)(add%256);					// 低位地址
		while(0==(S0SPSR&0x80));
	for(i=0; i<num; i++){
		S0SPDR = 0xff;						// 送8个SCK
		while(0==(S0SPSR&0x80));
		*(ptr+i) = S0SPDR;					// 读取数据
	}
	FIO0SET = SS1;
}*/
//**************FM25CL64********************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -