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

📄 f340_init.h

📁 f340的MP3程序,通过SD卡读入解码器
💻 H
字号:
/********************************************************************

c8051f340/1/4/5 的系统内部时钟的控制,IO口和交叉开关的初始化。
调用时根据宏定义中对各个寄存器每位的解释改变相应寄存器宏定义的值
在void f340_io_osc_init(void)函数中改变相应端口寄存器的值
 在主程序中调用void f340_io_osc_init(void)函数
注:void f340_io_osc_init(void)函数必须在主函数中最先执行,否则MCU会无法正常工作
版本:0.4(2010.08.22)【与0.3版比,加入了时钟选择寄存器CLKSEL和4倍频时钟控制寄存器CLKMUL】

********************************************************************/
#include 	"c8051f340.h"
#ifndef		_f340_init_h
#define 	_f340_init_h

/*********************************************************************
系统内部时钟频率选择
寄存器:OSCICN
**********************************************************************/
#define		iosc_12M		0x03
#define 	iosc_6M			0x02
#define 	iosc_3M			0x01
#define 	iosc_1p5M		0x00
/******************************************
注意:下面的定义中》able结尾的是和OSCICN相或
disable结尾的是相与,系统内部时钟控制
******************************************/
#define		ioscen_able		0x80		//使能内部震荡器(系统复位后默认使能)
#define 	ioscen_disable	0x7f

#define		iosc_suspend_able	0x20		//强制挂起内部震荡器
#define		iosc_suspend_disable	0xdf

#define 	iosc_val		iosc_12M|ioscen_able//根据上面的宏定义改变这里的值


/************************----CLKMUL(4倍时钟乘法器控制寄存器,不可位寻址)----***************************/
#define 	MULLEN		0X80	//4倍时钟乘法器使能
#define		MULINIT		0X40	//时钟乘法器初始化控制,这里在使能时钟乘法器(MULLEN)之前是0,使能之后置1将初始化时钟乘法器,然后等待MULRDY位置1
#define 	MULRDY		0X20	//时钟乘法器稳定标志,1.时钟乘法器启动并且稳定了
#define		MULSEL		0X00	//时钟乘法器输入选择
/********时钟乘法器输入选择*********/
//0x00: 内部振荡器		0x01:外部振荡器
//0x02:外部振荡器/2
/**********************************/
#define 	CLKMUL_VAL		MULSEL	//CLKMUL


/*************************----CLKSEL(系统时钟与USB时钟的选择,不可位寻址)-------****************/
#define 	USBCLK		0X00	//USB时钟的选择,当USB工作在高速模式时,时钟应该是48MHz,工作在低速模式时,时钟是6MHz
/*******USB时钟的选择值********/
//
//0x00: 4倍时钟乘法器   0x10:内部振荡器/2
//0x20:外部振荡器		0x30:外部振荡器/2
//0x40:外部振荡器/3
/*****************************/
#define		SYSCLKSEL		0X00	//系统时钟选择
/********系统时钟的选择值*****/
//0x00: 内部振荡器		0x01:外部振荡器
//0x02:4倍时钟乘法器/2		0x03:4倍时钟乘法器
//0x04:低频振荡器
/*****************************/
#define 	CLKSEL_VAL		USBCLK|SYSCLKSEL	//CLKSEL




/********************************************************************
交叉开关选项,与外设接口的控制
寄存器:XBR0,XBR1,XBR2
*********************************************************************/
/***-----XBR0----***/
#define		port_cp1ae	0x80//比较器1异步输出接口
#define		port_cp1e	0x40//比较器1输出接口
#define		port_cp0ae	0x20
#define		port_cp0e	0x10

#define 	port_sysclk	0x08//系统时钟输出使能
#define		port_smbus	0x04//smbus connection enable
#define		port_spi	0x02//spi	connection enable
#define		port_uart	0x01//uart	connection enable,tx0(P0.4) and rx0(P0.5)


#define		xbr0_val	0x00//根据上面的宏定义改变这里的值


/***-----XBR1----***/
#define 	port_weakpud 0x80//弱上拉禁止,清零则使能弱上拉
#define		port_xbre	0x40//交叉开关的总体使能。必须使能这一位IO口才能工作
#define		port_t1		0x20//connection timer 1
#define		port_t0		0x10//connection timer 0
#define		port_ecie	0x08//pca0外部计数输入使能
#define 	port_pca0me	0x00
/*---------------------------------
pca0me(pca模块IO使能位)的选择如下:
0x00:所有模块都不连接到IO引脚
0x01:连接CEX0
0x02:连接CEX0,CEX1
0x03:连接CEX0,CEX1,CEX2
0x04:连接CEX0,CEX1,CEX2,CEX3
0x05:连接CEX0,CEX1,CEX2,CEX3,CEX4
0x06,0x07为保留
----------------------------------*/	

#define 	xbr1_val	port_xbre	//根据上面的宏定义改变这里的值


/***-----XBR2-----***/
#define		port_uart1 0x01//xbr2只有第0位有用,其余位为保留位


#define		xbr2_val	0x00//根据上面的宏定义改变这里的值


void f340_io_osc_init(void)
{


	PCA0MD &= ~0x40;     //关闭看门狗定时器,看门狗默认是开着的。。一般都先关了。到用的时候再开
	OSCICN |= iosc_val;      //内部高频振荡器12M晶振做为系统时钟

	CLKMUL |= CLKMUL_VAL;	//4倍时钟选择寄存器
	CLKSEL |= CLKSEL_VAL;	//系统及USB时钟选择
/*----------------------------set i/o-----------------------------------------*/


	P0MDIN |= 0xff;		//0为模拟输入。。1为数字输入
	P1MDIN |= 0xff;
	P2MDIN |= 0xff;
	P3MDIN |= 0xff;
	P4MDIN |= 0xff;


	P0SKIP = 0xc0;		//0为不跳过。。1为跳过
	P1SKIP = 0x00;
	P2SKIP = 0x00;
	P3SKIP = 0x00;


	P0MDOUT |= 0x00;	//0为漏极开路方式输出。。1为推挽方式输出
	P1MDOUT |= 0xff;  	
	P2MDOUT |= 0xff;
	P3MDOUT |= 0xff; 
	P4MDOUT |= 0x00; 


	XBR0 |= xbr0_val;
	XBR1 |= xbr1_val;
	XBR2 |= xbr2_val;      
}

#endif

⌨️ 快捷键说明

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