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

📄 initializing.c

📁 dsp.rar
💻 C
字号:
/*************************************************************************
文件名:		DSP2407_Initializing()
日期:      	2006年12月26日
公司(作者):  
描述和说明:	DSP 2407芯片级初始化函数
*************************************************************************/

#include "F2407REGS_c.h"

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中断请求
*/	
}

/*************************************************************************
文件名:		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年01月15日
公司(作者):  
描述和说明:	定时器1初始化函数,200ms
*************************************************************************/
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=0x170C;				// Timer1为连续增计数模式,预分频值为128,使用内部时钟
/*  0001,0111,0000,1100 =0x170C
	00~~ ~~~~ ~~~~ ~~~~ [Free,Soft] 00:一旦仿真挂起后,定时器1立即停止
	~~0~ ~~~~ ~~~~ ~~~~ [reserved] 
	~~~1 0~~~ ~~~~ ~~~~ [TMODE1,TMODE0] 10: 连续增计数模式
	~~~~ ~111 ~~~~ ~~~~ [TPS2-TPS0] 111:预定标系数, x/128
	~~~~ ~~~~ 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=0x0F424;				// Timer1的周期寄存器值设为200ms	
								// 也可用10进制数赋值,"T1PER=62500;"
	T1CNT=0x00;					// Timer1的计数器清零
}

⌨️ 快捷键说明

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