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

📄 youyakokngzhi.c

📁 基于ARM7 LPC2124 油压控制系统原程序
💻 C
📖 第 1 页 / 共 3 页
字号:
/****************************************Copyright (c)**************************************************
**            
**                                      
**                                
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			cxjxkongzhi.c

** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			
** Created date:		2009-03-04
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:		
** Modified date:		2009-03-04
** Version:             1.0
** Descriptions:		PHILIPS ARM7 微控制器 LPC2114
**
********************************************************************************************************/
#include "config.h"
#include <math.h>
//=======================================================================================================
#define	 	QUEUEMAX		    501						//定义通信队列数据最大个数为501 
#define		UART0_BPS		    115200					/*定义UART0通讯波特率*/

//=========================================CPLD管脚定义===================================================
#define		CPLD_CS			0x01000000				/*P1.24引脚连接片选信号/CS,低电平有效*/
#define		CPLD_CLK		0x00000080				/*P0.7 引脚连接CPLD时钟信号*/
#define		CPLD_DB0		0x00400000				/*P1.22引脚连接CPLD并口数据总线D0位*/
#define		CPLD_DB1		0x00002000				/*P0.13引脚连接CPLD并口数据总线D1位*/
#define		CPLD_DB2		0x00001000				/*P0.12引脚连接CPLD并口数据总线D2位*/
#define		CPLD_DB3	    0x00000800				/*P0.11引脚连接CPLD并口数据总线D3位*/
#define		CPLD_DB4	    0x00800000				/*P1.23引脚连接CPLD并口数据总线D4位*/
#define		CPLD_DB5		0x00000400				/*P0.10引脚连接CPLD并口数据总线D5位*/
#define		CPLD_DB6	    0x00000200				/*P0.9引脚连接CPLD并口数据总线D6位*/
#define		CPLD_DB7	    0x00000100				/*P0.8引脚连接CPLD并口数据总线D7位*/
#define		RDY	            0x00800000				/*P0.23引脚连接电机驱动反馈*/
#define		SN	            0x00400000				/*P0.22引脚连接电机驱动方向控制*/
#define		soft_rst	    0x02000000				/*P1.25  */

#define     PDDB0           IO1PIN&CPLD_DB0
#define     PDDB1           IO0PIN&CPLD_DB1
#define     PDDB2           IO0PIN&CPLD_DB2
#define     PDDB3           IO0PIN&CPLD_DB3
#define     PDDB4           IO1PIN&CPLD_DB4
#define     PDDB5           IO0PIN&CPLD_DB5
#define     PDDB6           IO0PIN&CPLD_DB6
#define     PDDB7           IO0PIN&CPLD_DB7
#define     soft_hight      IO1SET=soft_rst                 
#define     soft_low        IO1CLR=soft_rst
#define     cs_hight        IO1SET=CPLD_CS
#define     cs_low          IO1CLR=CPLD_CS
#define     clk_hight       IO0SET=CPLD_CLK
#define     clk_low         IO0CLR=CPLD_CLK   

#define		MLCMS			0x1ffff			/*18位分辨率满码*/
#define		YYWS			6				/*取18位*/
#define		ADVIN_FULL		23.4375			/*预先计算出理论的A/D满量程输入ADVIN_FULL=3/(64×2)= 23.4375mV*/
#define     lzvout_max       15             /*传感器最大满量程15mv*/
#define     syl_bzlc      10000           /*传感器满量程10000N*/
#define     ybl_bzlc      1000           /*传感器满量程10000N*/

#define		QCFH			0x1ffff			/*去18位符号位*/
//=======================================================================================================
volatile uint8  uartrcv_cnt;
volatile uint8  uartrcv_new;
volatile uint32 cpld_data;
volatile uint8  cpld_int;
volatile uint8  data_cnt;
volatile uint8  pwm;
uint8           online;
uint8           yunxing;
uint8           fxkz;
uint8           jiajinchuli;
uint8           songchichuli; 
uint32          yabianli;
uint32          shiyanli;
uint32		    lzad_max;  
uint32          tmp;     
fp32     jiajinli;
fp32     songchili;
fp32     yunxingli;
fp32     lijiaozhun;
uint32	 pwm_k;	
fp64	 ybl_sjz;
fp64	 syl_sjz;
fp64     ybl_bc;
fp64     syl_bc;
fp64     newybl;
uint8    chuzhi_bz;
fp64	 ybl_clr;
fp64	 syl_clr;
fp64     rOut; // PID Response (Output)
typedef	struct							//队列类型定义 
{
	uint32	L1[QUEUEMAX];				//数据包  
	uint16	front;						//队列头指针 
	uint16	rear;						//队列尾指针 
} SEQUEUE;
volatile SEQUEUE sq;
volatile uint8  uartrcv[14];
volatile uint8  cpld_dat[6];
typedef	struct	PID						
{
	fp32	SetPoint;				
	fp32	Proportion;						
	fp32	Integral;
	fp32	Derivative;				
	fp32	LastError;						
	fp32	PrevError;
	fp32	SumError;					
} PID;

/********************************************************************************************************
*Function Name: delaymS(uint8 ms)
*Discription:   1ms延时子程序
*Data:          2008/06/18      
*Author:        SuLiangwei
********************************************************************************************************/
void delaymS(uint32 ms)
{
	uint32 i,j;
	for(j=0;j<ms;j++)
	{
		for(i=0;i<7300;i++)	 /*延时1mS*/
		{;}
	}
}

/********************************************************************************************************
*Function Name: delayuS(uint8 us)
*Discription:   1.5us延时子程序
*Data:          2009/03/04      
*Author:        SuLiangwei
********************************************************************************************************/
void delayuS(uint32 us)
{
	while(us) {us--;}
}

/*******************************************************************************************************
* 名称:Time0Enable()
* 功能:使能定时器0,定时时间为10ms。
* 入口参数:无
* 出口参数:无
********************************************************************************************************/
void  Time0Enable(void)
{
//	/*Fcclk=Fosc*4=11.0592MHz*4=44.2368MHz */
//	/*Fpclk=Fcclk/4=44.2368MHz/4=11.0592MHz*/
	
	/*Fcclk=Fosc*5=11.0592MHz*4=55.2596MHz */
	/*Fpclk=Fcclk/5=55.2596MHz/4=11.0592MHz*/
	
	T0PR=0;				/*设置定时器0分频为1分频,得11059200*/
	T0MCR=0x03;			/*匹配通道匹配中断并复位T0TC*/

//	T0MR0=11059;		/*  1000次/S比较值(10mS定时值)1ms*/
//	T0MR0=110592;		/*  100次/S 比较值(10mS定时值)10ms*/
	T0MR0=110592*2;		/*  50次/S  比较值(10mS定时值)20ms*/
//	T0MR0=110592*4;		/*  25次/S  比较值(10mS定时值)40ms*/
//	T0MR0=11059200;		/*  1次/S   比较值(10mS定时值)1000ms*/
//	T0MR0=345600;		/*  32次/S  比较值(10mS定时值)31.25ms*/

	T0TCR=0x03;			/*启动并复位T0TC*/
	VICIntEnable = 0x00000010;		/*使能TIME0中断*/
	T0TCR=0x01;
}

/********************************************************************************************************
*Function Name: nop(void)
*Discription:   空函数,延时1us
*Data:          2009/03/04      
*Author:        SuLiangwei
********************************************************************************************************/
void nop(void)
{}
/*******************************************************************************************************
** 名称:UART0_Ini()
** 功能:初始化串口0
** 说明:使用外部11.0592MHz晶振,根据CONFIG.H文件配置,Fpclk=11.0592MHz
**		 通讯波特率115200,8位数据位,1位停止位,无奇偶校验
** 入口参数:无
** 出口参数:无
** 全局变量:无
** 调用函数:无
********************************************************************************************************/
void UART0_Ini(void)
{f
	uint16	Fdiv;
	U0LCR=0x80;					/*DLAB=1,可设置波特率*/
	Fdiv=(Fpclk/16)/UART0_BPS;	/*设置波特率*/
	U0DLM=Fdiv/256;
	U0DLL=Fdiv%256;
	U0LCR=0x03;					/*设置字符长度、停止位、奇偶校验*/
 	U0FCR=0x07;				    /*使能,初始化FIFO,并设置触发点为1字节*/
//	U0IER=0x01;				    /*允许RBR中断,即接收中断*/
//	U0LCR=0x2b;					/*设置字符长度、停止位、偶校验*/
}

/*******************************************************************************************************
** 名称:IRQ_UART0()
** 功能:串口UART0接收中断
** 入口参数:无
** 出口参数:无
** 全局变量:无
** 调用函数:无
********************************************************************************************************/
void __irq IRQ_UART0(void)
{	

	uint8	IIR,t,verify;
	while(((IIR = U0IIR) & 0x01) == 0)	/*至少有一个中断被挂起*/
		{
		 switch(IIR & 0x0e)		/*根据中断标识处理:接收线状态、接收数据可用、字符超时、THRE中断*/
		 	{
/*THRE中断*/
		 	 case	0x02:
		 	 break;
/*THRE中断处理结束*/
		 	 
/*接收数据可用(RDA)中断*/		 	 
		 	 case	0x04:
  	 	 	        uartrcv[uartrcv_cnt]=U0RBR;		/*读取FIFO的数据,并清除中断标志*/
	 	 	        uartrcv_cnt++;
		 	 	        
		 	 	        if( uartrcv[uartrcv_cnt-1]==0xfe)        /*收到帧尾*/
		 	 	 	    {
		 	 	 			verify=0;
		 	 	 			for(t=0;t<(uartrcv_cnt-2);t++)
		 	 	 			{
		 	 	 				verify+= uartrcv[t];
		 	 	 			}
		 	 	 			if(verify== uartrcv[uartrcv_cnt-2])  /*校验和正确*/
		 	 	 			{
		 	 	 				uartrcv_new=0xff;
		 	 	 			}
		 	 	 			else                              /*校验和错误*/
		 	 	 			{
		 	 	 		    	uartrcv_new=0x88;
		 	 	 			}
		 	 	 		}
                       // uartrcv[10]=U0RBR;
                       // delayuS(5);   
                       // U0THR=uartrcv[10];
       	               // while((U0LSR&0x20)==0);	   	 /*等待数据发送完成*/                  
//                      uartrcv_new=0xff;
		 	 break;		
/*接收数据可用(RDA)中断处理结束*/

/*接收线状态(RLS)中断*/
		 	 case	0x06:
		 	 		 	 
		 	 break;
/*接收线状态(RLS)中断处理结束*/

/*字符超时(CTI)中断*/
		 	 case	0x0c:

		 	 break;
/*字符超时(CTI)中断处理结束*/
		 	 
		 	 default:
		 	 break;
		 	}

		}
    VICVectAddr=0x00;				/*中断处理结束*/
}
/*******************************************************************************************************
* 名称:read_Byte(void)
* 功能:读取CPLD数据
* 入口参数:无
* 出口参数:
*******************************************************************************************************/
uint8  read_Byte(void)
{
    uint8 tem_data=0x00;
   	if((PDDB0)!=0) {tem_data=(tem_data|0x01);}
   	if((PDDB1)!=0) {tem_data=(tem_data|0x02);}
   	if((PDDB2)!=0) {tem_data=(tem_data|0x04);}
   	if((PDDB3)!=0) {tem_data=(tem_data|0x08);}
    if((PDDB4)!=0) {tem_data=(tem_data|0x10);}
   	if((PDDB5)!=0) {tem_data=(tem_data|0x20);}
   	if((PDDB6)!=0) {tem_data=(tem_data|0x40);}
   	if((PDDB7)!=0) {tem_data=(tem_data|0x80);}
    return(tem_data);
}

/*******************************************************************************************************
* 名称:IRQ_Time0()
* 功能:定时器0中断服务程序
* 入口参数:无
* 出口参数:无
********************************************************************************************************/
//void  __irq IRQ_Time0(void)
//{   
//   datastr+= datastr; 
//	T0IR=0x01;				/*清除定时器0中断标志*/
//	VICVectAddr=0x00;		/*通知VIC中断处理结束*/
//}
/********************************************************************************************************/
void  __irq IRQ_Eint0(void)
{ 
    uint8  kk;
    uint32 ddtt;
    uint32 ddtt2;
    data_cnt++;
//--------------------------------------------------------------------------------
    soft_low;
    delayuS(2);
    soft_hight;
//--------------------------------------------------------------------------------
    cs_low;            //CS             				  
	for(kk=0;kk<6;kk++)                           //Position(32bits)+State(8bits)

⌨️ 快捷键说明

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