📄 main.c
字号:
/*
+------------------------------------------------------------------------------+
软件名称 :PreheaterDSP1
版 本 号 :V0.01
项 目 :Preheater
作 者 :桂 林
开始日期 :2002-11-01
最后更改日期:03-3-18 14:57
+------------------------------------------------------------------------------+
软件功能描述:
Preheater预热器中的DSP1(F2407),主要负责在系统上电时,初始
化系统参数表,并启动DSP0(5402)正常工作;在正常工作时,响应LCD/
PC/CAN_BUS/Profibus来的请求,并回发数据。
+------------------------------------------------------------------------------+
文件清单:
序号 文件名 功能描述 备注
1 main.h DSP1头文件
2 main.c DSP1主程序
3 sci.c PC通信程序
4 spi.c SPI通信程序
5 timer10ms.c timer 10ms中断程序
6 can.c can通信文件
7 adc.c adc转换程序
8 speedin.c 速度输入程序
9 global_var.h 全局变量头文件
10 ex.h 全局变量头文件
11 dataio.h DSP0输入输出表
+------------------------------------------------------------------------------+
编程环境及工具:
PC : 赛扬566
CC2000 : 4.1
+------------------------------------------------------------------------------+
更改记录:
1.
+------------------------------------------------------------------------------+
*/
/*============================================================================*/
#include "main.h"
#include "global_var.h"
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
void main(void)
{
U16 i=0,j=0,k=0,*p16;
f2407_init();
x5643_init(1);
for(i=0;i<10;i++){LED1;delay_ms(30);LED0;delay_ms(30);RstWatchdog;};
if(hpidownload())// dsp error
{
for(i=0;i<30;i++){LED1;delay_ms(50);LED0;delay_ms(50);RstWatchdog;};
};
EnableINT;
// 进入主循环
for(;;)
{
RstWatchdog;
// PC ---------------------------------------------
if(GVAR.GA.PC_ASK && GVAR.GC.PC_ENABLE)
{
DisableINT_SCI;
EnableINT_SCI;
};
// CAN --------------------------------------------
if(GVAR.GA.CAN_ASK && GVAR.GC.CAN_ENABLE)
{
DisableINT_CAN;
EnableINT_CAN;
};
// LCD --------------------------------------------
if(GVAR.GA.LCD_ASK && GVAR.GC.LCD_ENABLE)
{
DisableINT_XINT1;
GVAR.GA.LCD_ASK = 0;
switch(GVAR.GAB.LCD[1])
{
case READ_IN_CMD:
{
p16 = (U16 *)&GVAR.dsp0in;
for(i=0;i<GVAR.GAB.LCD[3];i++)
{
GVAR.GAB.LCD[4+i] = (*p16>>8); //高8位
GVAR.GAB.LCD[5+i] = *p16; //低8位
p16++;
};
GVAR.GAB.LCD[0] = 2*GVAR.GAB.LCD[3] + 3;
p16 = (U16 *)GVAR.GAB.LCD[1];
st16_lcd_tx(GVAR.GAB.LCD[0],p16);
break;
}
case READ_OUT_CMD:
{
p16 = (U16 *)&GVAR.dsp0out;
for(i=0;i<GVAR.GAB.LCD[3];i++)
{
GVAR.GAB.LCD[4+i] = (*p16>>8); //高8位
GVAR.GAB.LCD[5+i] = *p16; //低8位
p16++;
};
GVAR.GAB.LCD[0] = 2*GVAR.GAB.LCD[3] + 3;
p16 = (U16 *)GVAR.GAB.LCD[1];
st16_lcd_tx(GVAR.GAB.LCD[0],p16);
break;
}
case WRITE_IN_CMD:
{
p16 = (U16 *)&GVAR.dsp0in;
for(i=0;i<GVAR.GAB.LCD[3];i++)
{
*p16 = GVAR.GAB.LCD[4+i]<<8; //高8位
*p16 |= GVAR.GAB.LCD[5+i]; //低8位
p16++;
};
break;
}
case XREAD_CMD:
{
break;
}
case XWRITE_CMD:
{
break;
}
default:break;
};// end switch
EnableINT_XINT1;
};
// PROFIBUS ---------------------------------------
if(GVAR.GA.PROFIBUS_ASK && GVAR.GC.PROFIBUS_ENABLE)
{
DisableINT_XINT2;
EnableINT_XINT2;
};
};//end for
//结束主循环
}
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
/*============================================================================*/
/*
+------------------------------------------------------------------------------+
函 数 名 : f2407_init()
功能描述 : f2407的初始化
函数原形 : void f2407_init()
参数说明 :
支持资源 :
作 者 : 桂林
最后更改日期: 2002-11-01
+------------------------------------------------------------------------------+
*/
void f2407_init()//f2407的初始化
{
//关F2407自带的watchdog
WDCR = 0x006f;
//IO空间访问等待
WSGR = 0x0600|(1<<6);
DisableINT;
//配置晶振
SCSR1 = 0x00fd;//40Mhz
//SCSR2 = 0x000b;//MC,Flash
SCSR2 = 0x0007;//MP,XRAM
delay_ms(10);//10ms
//配置IO口线
MCRA = 0x0007;//IOPB7..0 + IOPA7..3 + XINT1 + SCIRXD + SCITXD
MCRB = 0xfffc;//XINT2 + CANRX + CANTX + SPI + IOPC1..0
MCRC = 0x2081;//IOPF6 + TCLKINB + IOPF4..0 + CAP4 + IOPE6..1 + CLKOUT
PEDATDIR = 0x7e00;//IOPE6..1=输出0,测试用
SET_BIT(PADATDIR , 11);//IOPA3->output(ST16C2552_MR)
SET_BIT(PBDATDIR , 10);//IOPB2->output(x5643_CS)
SET_BIT(PBDATDIR , 11);//IOPB3->output(5402_RESET)
//配置中断
IMR = 0x000b;//enable int1,int2,int4
IFR = 0xffff;
timer10ms_init();
spi_init(0);
x5643_init(0);//watchdog_num=0/1(关开)
sci_init(384);//speed=(12,24,48,96,192,384,1152;8-N-1)
st16_init();//都配置为375k,8-N-1
hpi_init();
speedin_init();
adc_init();
can_init(Preheater,125);
//can 2.0a标准,can_speed=(500,250,125)
//EnableINT;
}
/*
+------------------------------------------------------------------------------+
函 数 名 : delay_ms
功能描述 : 延时函数
函数原形 : void delay_ms(U16 x)
参数说明 : x:延时值ms
支持资源 :
作 者 : 桂林
最后更改日期: 2002-11-01
+------------------------------------------------------------------------------+
*/
void delay_ms(U16 x)
{
U16 tempi,tempj;
for(tempi=0;tempi<x;tempi++)
for(tempj=0;tempj<4000;tempj++);
}
/*
+------------------------------------------------------------------------------+
函 数 名 : delay_15us
功能描述 : 延时函数
函数原形 : void delay_15us(U16 x)
参数说明 : x:延时值ms
支持资源 :
作 者 : 桂林
最后更改日期: 2002-11-01
+------------------------------------------------------------------------------+
*/
void delay_15us(U16 x)
{
U16 tempi,tempj;
for(tempi=0;tempi<x;tempi++)
for(tempj=0;tempj<59;tempj++);
}
//=============================================================================
/*
+------------------------------------------------------------------------------+
函 数 名 : test
功能描述 : 测试函数
函数原形 : U16 test()
参数说明 :
支持资源 :
作 者 : 桂林
最后更改日期: 2003-03-17
+------------------------------------------------------------------------------+
*/
U16 test()//出错号
{
U16 tempi=0,tempj=0,temperror=0,*p16;
for(;;)
{
RstWatchdog;
EnableINT;
LED1;delay_ms(450);
LED0;delay_ms(450);
if(hpitest()) SET_BIT(temperror,0);//dsp error
for(tempi=0;tempi<100;tempi++)
{
x5643_write8(tempi,tempi);
tempj=0;
tempj=x5643_read8(tempi);
if(tempj!=tempi) SET_BIT(temperror,1);//x5643 error
};
GVAR.cantxbuf.ID=PINTCANID;
GVAR.cantxbuf.LEN=8;
GVAR.cantxbuf.BUF[0]=(0<<8 | 1);
GVAR.cantxbuf.BUF[1]=(2<<8 | 3);
GVAR.cantxbuf.BUF[2]=(4<<8 | 5);
GVAR.cantxbuf.BUF[3]=(6<<8 | 7);
can_tx(&GVAR.cantxbuf);
*p16=0x55;
st16_lcd_tx(1,p16);
st16_pro_tx(1,p16);
};
return(temperror);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -