#include "F2407REGS_c.h"
#include "math.h"
extern signed long U_data_in[320]; // 10个周波AD采样数据,为长整数
signed long U_data_analog[32]; // 1个周波AD采样模拟数据
/*************************************************************************
文件名: DSP2407_Initializing()
日期: 2007年2月8日
公司(作者):
描述和说明: DSP 2407芯片级初始化函数
*************************************************************************/
void DSP2407_Initializing()
{
asm(" setc INTM"); // 关总中断,INTM = 1
asm(" setc SXM"); // SXM置1,抑制符号扩展位
asm(" clrc OVM"); // OVM清0,累加器中结果正常溢出
asm(" clrc CNF"); // 可配置的片内双访问RAM块B0
// 被设置在数据空间
SCSR1=0x00FC; // 振荡器频率 CLKIN=10MHz,
// 设置工作频率 CLKOUT=4*CLKIN=40MHz
/* 0000,0000,1111,1100 =0x00FC
0~~~ ~~~~ ~~~~ ~~~~ [reserved]
~0~~ ~~~~ ~~~~ ~~~~ [CLKSRC] 选择CLKOUT引脚输出CPU时钟
~~00 ~~~~ ~~~~ ~~~~ [LPM] CPU进入IDLE1(LMP0)模式
~~~~ 000~ ~~~~ ~~~~ [PLL] CPU工作频率是输入的4倍频,4*10=40MHz
~~~~ ~~~0 ~~~~ ~~~~ [reserved]
~~~~ ~~~~ 1~~~ ~~~~ [ADC CLKEN] 1: ADC片内外设使能
~~~~ ~~~~ ~1~~ ~~~~ [SCI CLKEN] 1: SCI片内外设使能
~~~~ ~~~~ ~~1~ ~~~~ [SPI CLKEN] 1: SPI片内外设使能
~~~~ ~~~~ ~~~1 ~~~~ [CAN CLKEN] 1: CAN片内外设使能
~~~~ ~~~~ ~~~~ 1~~~ [EVB CLKEN] 1: EVB片内外设使能
~~~~ ~~~~ ~~~~ ~1~~ [EVA CLKEN] 1: EVA片内外设使能
~~~~ ~~~~ ~~~~ ~~0~ [resered] 0
~~~~ ~~~~ ~~~~ ~~~0 [ILLADR] 无效地址检测位,用户仅读。
*/
WDCR=0x0068; //关软件狗
/* 0000,0000,0110,1000 =0x0068
0000 0000 0~~~ ~~~~ [reserved]
~~~~ ~~~~ ~1~~ ~~~~ [WDDIS] Watchdog Disable:1,关软件狗
~~~~ ~~~~ ~~1~ ~~~~ [WDCHK2] Watchdog Check Bit 2. 1:写该控制寄存器时该位应为1
~~~~ ~~~~ ~~~0 ~~~~ [WDCHK1] Watchdog Check Bit 1. 0:写该控制寄存器时该位应为0
~~~~ ~~~~ ~~~~ 1~~~ [WDCHK0] Watchdog Check Bit 0. 1:写该控制寄存器时该位应为1
~~~~ ~~~~ ~~~~ ~000 [WDPS2-WDPS0]. Watchdog Prescale Select Bits.000:软件狗
分频为1
*/
IMR=0x003F; //开放所有CPU核级中断
/* 0000 0000 0011 1111 =0x003F
0000 0000 00~~ ~~~~ [reserved] 0000 0000 00
~~~~ ~~~~ ~~1~ ~~~~ [INT6] 1: INT6中断开放
~~~~ ~~~~ ~~~1 ~~~~ [INT5] 1: INT5中断开放
~~~~ ~~~~ ~~~~ 1~~~ [INT4] 1: INT4中断开放
~~~~ ~~~~ ~~~~ ~1~~ [INT3] 1: INT3中断开放
~~~~ ~~~~ ~~~~ ~~1~ [INT2] 1: INT2中断开放
~~~~ ~~~~ ~~~~ ~~~1 [INT1] 1: INT1中断开放
*/
IFR=0x003F; // 向所有中断标志位写1,以清除所有中断请求
/* 0000 0000 0011 1111 =0x003F
0000 0000 00~~ ~~~~ [reserved] 0000 0000 00
~~~~ ~~~~ ~~1~ ~~~~ [INT6] 1: 清除INT6中断请求
~~~~ ~~~~ ~~~1 ~~~~ [INT5] 1: 清除INT5中断请求
~~~~ ~~~~ ~~~~ 1~~~ [INT4] 1: 清除INT4中断请求
~~~~ ~~~~ ~~~~ ~1~~ [INT3] 1: 清除INT3中断请求
~~~~ ~~~~ ~~~~ ~~1~ [INT2] 1: 清除INT2中断请求
~~~~ ~~~~ ~~~~ ~~~1 [INT1] 1: 清除INT1中断请求
*/
WSGR=0x0080; // IO空间加2个等待状态
// 实验中加1个或7个等待状态都采样成功
/* 0000 0000 1000 0000 =0x0800
0000 0~~~ ~~~~ ~~~~ [bit15-11:reserved] 0000 0
~~~~ ~00~ ~~~~ ~~~~ [bit10-9: BVIS] 00:
~~~~ ~~~0 10~~ ~~~~ [bit8-6: ISWS] 010: IO空间2个等待状态
~~~~ ~~~~ ~~00 0~~~ [bit5-3: DSWS] 000: 数据空间0个等待状态
~~~~ ~~~~ ~~~~ ~000 [bit2-0: PSWS] 000: 程序空间0个等待状态
*/
}
/*************************************************************************
文件名: PHANTOM()
日期: 2006年12月27日
公司(作者):
描述和说明: 假中断函数。所有不需要的中断和错误中断都指向该函数。
*************************************************************************/
void interrupt PHANTOM(void)
{
static int phantom_count;
phantom_count ++;
return;
}
/*************************************************************************
文件名: IOPort_Initializing()
日期: 2007年01月09日
公司(作者):
描述和说明: 数字I/O端口初始化函数
IOPB4,IOPB5,IOPB6,IOPB7 设置为输出方式
*************************************************************************/
void IOPort_Initializing()
{
MCRA=0x0FFF; //IOPB4,IOPB5,IOPB6,IOPB7设置为I/O口功能
/* 0000,1111,1111,1111=0x0FFF
1:基本功能 0:I/O口功能
0~~~ ~~~~ ~~~~ ~~~~ [MCRA.15]1:TCLKINA; 0:IOPB7
~0~~ ~~~~ ~~~~ ~~~~ [MCRA.14]1:TDIRA; 0:IOPB6
~~0~ ~~~~ ~~~~ ~~~~ [MCRA.13]1:T2CMP; 0:IOPB5
~~~0 ~~~~ ~~~~ ~~~~ [MCRA.12]1:T1CMP; 0:IOPB4
~~~~ 1~~~ ~~~~ ~~~~ [MCRA.11]1:CMP6; 0:IOPB3
~~~~ ~1~~ ~~~~ ~~~~ [MCRA.10]1:CMP5; 0:IOPB2
~~~~ ~~1~ ~~~~ ~~~~ [MCRA.9] 1:CMP4; 0:IOPB1
~~~~ ~~~1 ~~~~ ~~~~ [MCRA.8] 1:CMP3; 0:IOPB0
~~~~ ~~~~ 1~~~ ~~~~ [MCRA.7] 1:CMP2; 0:IOPA7
~~~~ ~~~~ ~1~~ ~~~~ [MCRA.6] 1:CMP1; 0:IOPA6
~~~~ ~~~~ ~~1~ ~~~~ [MCRA.5] 1:CAP3; 0:IOPA5
~~~~ ~~~~ ~~~1 ~~~~ [MCRA.4] 1:CAP2; 0:IOPA4
~~~~ ~~~~ ~~~~ 1~~~ [MCRA.3] 1:CAP1; 0:IOPA3
~~~~ ~~~~ ~~~~ ~1~~ [MCRA.2] 1:XINT1; 0:IOPA2
~~~~ ~~~~ ~~~~ ~~1~ [MCRA.1] 1:SCIRXD; 0:IOPA1
~~~~ ~~~~ ~~~~ ~~~1 [MCRA.0] 1:SCITXD; 0:IOPA0
*/
PBDATDIR=PBDATDIR|0x0F000; //IOPB4,IOPB5,IOPB6,IOPB7设置为输出功能
/* 1111,0000,0000,0000 =0x0F000
1~~~ ~~~~ ~~~~ ~~~~ [B7DIR] 0:input; 1:output
~1~~ ~~~~ ~~~~ ~~~~ [B6DIR] 0:input; 1:output
~~1~ ~~~~ ~~~~ ~~~~ [B5DIR] 0:input; 1:output
~~~1 ~~~~ ~~~~ ~~~~ [B4DIR] 0:input; 1:output
~~~~ 0~~~ ~~~~ ~~~~ [B3DIR] 0:input; 1:output
~~~~ ~0~~ ~~~~ ~~~~ [B2DIR] 0:input; 1:output
~~~~ ~~0~ ~~~~ ~~~~ [B1DIR] 0:input; 1:output
~~~~ ~~~0 ~~~~ ~~~~ [B0DIR] 0:input; 1:output
~~~~ ~~~~ 0~~~ ~~~~ [IOPB7] 0:low; 1:high
~~~~ ~~~~ ~0~~ ~~~~ [IOPB6] 0:low; 1:high
~~~~ ~~~~ ~~0~ ~~~~ [IOPB5] 0:low; 1:high
~~~~ ~~~~ ~~~0 ~~~~ [IOPB4] 0:low; 1:high
~~~~ ~~~~ ~~~~ 0~~~ [IOPB3] 0:low; 1:high
~~~~ ~~~~ ~~~~ ~0~~ [IOPB2] 0:low; 1:high
~~~~ ~~~~ ~~~~ ~~0~ [IOPB1] 0:low; 1:high
~~~~ ~~~~ ~~~~ ~~~0 [IOPB0] 0:low; 1:high
*/
}
/*************************************************************************
文件名: Timer1_Initializing()
日期: 2007年02月8日
公司(作者):
描述和说明: 定时器1初始化函数,0.625ms中断
*************************************************************************/
void Timer1_Initializing()
{
EVAIMRA=EVAIMRA|0x0080; // 仅允许定时器1的周期中断
/* 0000,0000,1000,0000 =0x0080
0000 0~~~ ~~~~ ~~~~ [reserved]
~~~~ ~0~~ ~~~~ ~~~~ [T1OFINT ENABLE]
~~~~ ~~0~ ~~~~ ~~~~ [T1UFINT ENABLE]
~~~~ ~~~0 ~~~~ ~~~~ [T1CINT ENABLE]
~~~~ ~~~~ 1~~~ ~~~~ [T1PINT ENABLE]1:允许定时器1的周期中断
~~~~ ~~~~ ~000 ~~~~ [reserved]
~~~~ ~~~~ ~~~~ 0~~~ [CMP3INT ENABLE]
~~~~ ~~~~ ~~~~ ~0~~ [CMP2INT ENABLE]
~~~~ ~~~~ ~~~~ ~~0~ [CMP1INT ENABLE]
~~~~ ~~~~ ~~~~ ~~~0 [PDPINTA ENABLE]
*/
EVAIFRA=EVAIFRA&0x0080; // 清除定时器1周期中断标志
/* 0000,0000,1000,0000 =0x0080
0000 0~~~ ~~~~ ~~~~ [reserved]
~~~~ ~0~~ ~~~~ ~~~~ [T1OFINT FLAG]
~~~~ ~~0~ ~~~~ ~~~~ [T1UFINT FLAG]
~~~~ ~~~0 ~~~~ ~~~~ [T1CINT FLAG]
~~~~ ~~~~ 1~~~ ~~~~ [T1PINT FLAG]1:清除定时器1周期中断标志
~~~~ ~~~~ ~000 ~~~~ [reserved]
~~~~ ~~~~ ~~~~ 0~~~ [CMP3INT FLAG]
~~~~ ~~~~ ~~~~ ~0~~ [CMP2INT FLAG]
~~~~ ~~~~ ~~~~ ~~0~ [CMP1INT FLAG]
~~~~ ~~~~ ~~~~ ~~~0 [PDPINTA FLAG]
*/
T1CON=0x100C; // Timer1为连续增计数模式,预分频值为1,使用内部时钟
/* 0001,0000,0000,1100 =0x100C
00~~ ~~~~ ~~~~ ~~~~ [Free,Soft] 00:一旦仿真挂起后,定时器1立即停止
~~0~ ~~~~ ~~~~ ~~~~ [reserved]
~~~1 0~~~ ~~~~ ~~~~ [TMODE1,TMODE0] 10: 连续增计数模式
~~~~ ~000 ~~~~ ~~~~ [TPS2-TPS0] 000:预定标系数, x/1
~~~~ ~~~~ 0~~~ ~~~~ [T2SWT1] 0:定时器2使用自身的周期寄存器
~~~~ ~~~~ ~0~~ ~~~~ [TENABLE] 0: 定时器1不工作
~~~~ ~~~~ ~~00 ~~~~ [ TCLKS1, TCLKS0] 00: 使用内部CPU时钟
~~~~ ~~~~ ~~~~ 11~~ [TCLD1, TCLD0] 11: 保留
~~~~ ~~~~ ~~~~ ~~0~ [TECMPR] 0: 禁止定时器比较操作
~~~~ ~~~~ ~~~~ ~~~0 [SELT1PR]0: 该位在定时器1中保留
*/
T1PER=25000; // Timer1的周期寄存器值设为0.625ms
// 也可用16进制数赋值,"T1PER=0x61A8;"
T1CNT=0x00; // Timer1的计数器清零
}
/*************************************************************