當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]裸機(jī)程序中可能用到的文件以及函數(shù)//system.c/*************************************************************************

裸機(jī)程序中可能用到的文件以及函數(shù)

//system.c



/*************************************************************************************************************
?*?文件名:	system.c
?*?功能:		S3C6410相關(guān)系統(tǒng)函數(shù)
?*?作者:		cp1300@139.com
?*?創(chuàng)建時間:	2012年3月4日11:25
?*?最后修改時間:2012年3月4日
?*?詳細(xì):		2012年3月5日17:00?添加VIC相關(guān)函數(shù)
*************************************************************************************************************/
#include?"system.h"


/*************************************************************************************************************************
*函數(shù)????????:	void?SetEINT_TriggerMode(u8?EINT0_N,u8?Trigger)
*功能????????:	設(shè)置外部中斷組0觸發(fā)模式
*參數(shù)????????:	EINT0_N:中斷源的編號(見:中斷組0編號定義);Trigger:觸發(fā)模式(EXT_LowLevel:低電平觸發(fā);EXT_HighLevel:高電平觸發(fā);
					EXT_NegEdge:下降沿觸發(fā);EXT_PosEdge:上升沿觸發(fā);EXT_Edge:邊沿觸發(fā))
*返回????????:	無
*依賴????????:	底層宏定義
*作者????????:	cp1300@139.com
*時間????????:	20120304
*最后修改時間:	20120304
*說明????????:	編號?GPN0--->GPN15??GPL8--->GPL14??GPM0--->GPM4,中斷設(shè)置必須兩個兩個一起
*************************************************************************************************************************/
void?SetEINT0_TriggerMode(vu8?EINT0_N,vu8?Trigger)
{	
	if(EINT0_N?&?0x80)?//EINT0CON1
	{
		EINT0_N?-=?0x80;//減去標(biāo)記
		rEINT0CON1?&=?~(7?<<?EINT0_N);//清楚原來的設(shè)置
		rEINT0CON1?|=?Trigger?<<?EINT0_N;
	}
	else	//EINT0CON0
	{
		rEINT0CON0?&=?~(7?<<?EINT0_N);//清楚原來的設(shè)置
		rEINT0CON0?|=?Trigger?<<?EINT0_N;
	}
}



/*************************************************************************************************************************
*函數(shù)????????:	void?Set_GateClk(u8?HCLK_DIV,FunctionalState?Enable)
*功能????????:??CLK時鐘門控設(shè)置(HCLK,PCLK,SCLK)
*參數(shù)????????:??CLK_DIV:外設(shè)(見:CLK門控時鐘定義);Enable?=?ENABLE,1使能;=DISABLE,0失能
*返回????????:??無
*依賴????????:	底層宏定義
*作者????????:??cp1300@139.com
*時間????????:	20120305
*最后修改時間:?	20121005
*說明????????:??PCLK_GATE添加標(biāo)識0x40,SCLK_GATE添加標(biāo)示0x80;
*************************************************************************************************************************/

void?Set_GateClk(vu8?CLK_DIV,FunctionalState?Enable)
{
	vu32?*P?=?&rHCLK_GATE;
	
	if(CLK_DIV?&?0x80)		//SCLK
	{
		P?=?&rSCLK_GATE;
		CLK_DIV?-=?0x80;	//去掉標(biāo)示
	}
	else?if(CLK_DIV?&?0x40)	//PCLK
	{
		P?=?&rPCLK_GATE;
		CLK_DIV?-=?0x40;	//去掉標(biāo)示
	}
	if(Enable?==?ENABLE)	//使能
		*P?|=?1?<<?CLK_DIV;
	else		//失能
		*P?&=?~(1?<<?CLK_DIV);
}



/*************************************************************************************************************************
*函數(shù)????????:	void?Set_INTtoIRQ(u8?INT_N)
*功能????????:??設(shè)置一個中斷為IRQ
*參數(shù)????????:??INT_N:中斷編號(見:中斷源編號定義);
*返回????????:??無
*依賴????????:	底層宏定義
*作者????????:??cp1300@139.com
*時間????????:	20120305
*最后修改時間:?	20120305
*說明????????:??設(shè)置一個中斷為普通中斷模式
*************************************************************************************************************************/
void?Set_INTtoIRQ(vu8?INT_N)
{
	if(INT_N?>?31)	//VIC1
	{
		INT_N?-=?32;
		VIC1->INTSELECT?&=?~(1?<<?INT_N);
	}
	else			//VIC0
		VIC0->INTSELECT?&=?~(1?<<?INT_N);
}


/*************************************************************************************************************************
*函數(shù)????????:	void?Set_INTtoFIQ(u8?INT_N)
*功能????????:??設(shè)置一個中斷為FIQ
*參數(shù)????????:??INT_N:中斷編號(見:中斷源編號定義);
*返回????????:??無
*依賴????????:	底層宏定義
*作者????????:??cp1300@139.com
*時間????????:	20120305
*最后修改時間:?	20120305
*說明????????:??設(shè)置一個中斷為快速中斷模式
*************************************************************************************************************************/
void?Set_INTtoFIQ(vu8?INT_N)
{
	if(INT_N?>?31)	//VIC1
	{
		INT_N?-=?32;
		VIC1->INTSELECT?|=?(1?<<?INT_N);
	}
	else			//VIC0
		VIC0->INTSELECT?|=?(1?<<?INT_N);
}


/*************************************************************************************************************************
*函數(shù)????????:	void?Set_IntEnable(u8?INT_N,FunctionalState?EnInt)
*功能????????:??開啟或關(guān)閉一個VIC中斷
*參數(shù)????????:??INT_N:中斷編號(見:中斷源編號定義),
*?			EnInt?=?ENABLE,1使能;=DISABLE,0失能;
*返回????????:??無
*依賴????????:	底層宏定義
*作者????????:??cp1300@139.com
*時間????????:	20120305
*最后修改時間:?	20120305
*說明????????:??使能或失能VIC0,VIC1的一個中斷
*************************************************************************************************************************/
void?Set_IntEnable(vu8?INT_N,FunctionalState?EnInt)
{
	VICx_TypeDef?*P?=?VIC0;
	
	if(INT_N?>?31)	//VIC1
	{
		INT_N?-=?32;
		P?=?VIC1;
	}?
	if(EnInt?==?ENABLE)?//使能中斷
		P->INTENABLE?=?1?<<?INT_N;	//寫1使能中斷,寫0無影響
	else		//取消中斷
		P->INTENCLEAR?=?1?<<?INT_N;	//寫1清除中斷使能,寫0無影響
}


/*************************************************************************************************************************
*函數(shù)????????:	u8?Get_IntEnable(vu8?INT_N)
*功能????????:??獲取一個中斷屏蔽狀態(tài)
*參數(shù)????????:??中斷編號
*返回????????:??1:該中斷失能,0:該中斷失能
*依賴????????:	底層宏定義
*作者????????:??cp1300@139.com
*時間????????:	20120524
*最后修改時間:?	20120524
*說明????????:??獲取一個中斷屏蔽狀態(tài)
*************************************************************************************************************************/
u8?Get_IntEnable(vu8?INT_N)
{
	VICx_TypeDef?*P?=?VIC0;
	
	if(INT_N?>?31)	//VIC1
	{
		INT_N?-=?32;
		P?=?VIC1;
	}?
	if(P->INTENABLE?&?(1?<<?INT_N))?//該中斷使能
		return?1;
	else?
		return?0;
}


/*************************************************************************************************************************
*函數(shù)????????:	void?Set_SoftInt(u8?INT_N,u8?ENABLE)
*功能????????:??開啟或關(guān)閉一個軟件中斷
*參數(shù)????????:??INT_N:中斷編號(見:中斷源編號定義),ENABLE?=?Enable,1使能;=Disable,0失能;
*返回????????:??無
*依賴????????:	底層宏定義
*作者????????:??cp1300@139.com
*時間????????:	20120305
*最后修改時間:?	20120305
*說明????????:??使能或失能VIC0,VIC1的一個軟件中斷
*************************************************************************************************************************/
void?Set_SoftInt(vu8?INT_N,vu8?ENABLE)
{
	VICx_TypeDef?*P?=?VIC0;
	
	if(INT_N?>?31)	//VIC1
	{
		INT_N?-=?32;
		P?=?VIC1;
	}?
	if(ENABLE)?//使能中斷
		P->SOFTINT?=?1?<<?INT_N;	//寫1使能軟件中斷,寫0無影響
	else		//取消中斷
		P->SOFTINTCLEAR?=?1?<<?INT_N;	//寫1清除軟件中斷使能,寫0無影響
}



/*************************************************************************************************************************
*函數(shù)????????:	void?Set_IsrAddr(u8?INT_N,vu32?IsrAdd)
*功能????????:??設(shè)置中斷矢量入口
*參數(shù)????????:??INT_N:中斷編號(見:中斷源編號定義),IsrAdd:中斷服務(wù)程序指針;
*返回????????:??無
*依賴????????:	底層宏定義
*作者????????:??cp1300@139.com
*時間????????:	20120305
*最后修改時間:?	20120311
*說明????????:??設(shè)置矢量地址寄存器
*************************************************************************************************************************/
void?Set_IsrAddr(vu8?INT_N,vu32?IsrAdd)
{
	VICx_TypeDef?*P?=?VIC0;
	
	if(INT_N?>?31)	//VIC1
	{
		INT_N?-=?32;
		P?=?VIC1;
	}
	P->VECTADDR[INT_N]?=?IsrAdd;//將中斷服務(wù)程序入口地址寫入矢量地址寄存器
}


/*************************************************************************************************************************
*函數(shù)????????:	void?Set_VectorPriority(u8?INT_N,u8?Priority)
*功能????????:??設(shè)置矢量優(yōu)先級
*參數(shù)????????:??INT_N:中斷編號(見:中斷源編號定義),Priority:優(yōu)先級0-15;
*返回????????:??無
*依賴????????:	底層宏定義
*作者????????:??cp1300@139.com
*時間????????:	20120305
*最后修改時間:?	20120305
*說明????????:??優(yōu)先級為0-15,值越大優(yōu)先級越高,15最高,0最低;
*************************************************************************************************************************/
void?Set_VectorPriority(vu8?INT_N,vu8?Priority)
{
	VICx_TypeDef?*P?=?VIC0;
	
	if(INT_N?>?31)	//VIC1
	{
		INT_N?-=?32;
		P?=?VIC1;
	}
	P->VECTRPRIORITY[INT_N]?=?Priority;//將中斷優(yōu)先級寫入寄存器
}





/*************************************************************************************************************************
*函數(shù)????????:	u32?Get_PLLCLK(int?pllreg)
*功能????????:??獲取PLL時鐘頻率
*參數(shù)????????:??pllreg?:?PLL選擇
					APLL?	0	//ARM內(nèi)核時鐘PLL
					MPLL?	1	//主時鐘PLL
					EPLL?	2	//外設(shè)時鐘PLL
*返回????????:??頻率,HZ
*依賴????????:	底層宏定義
*作者????????:??cp1300@139.com
*時間????????:	20120526
*最后修改時間:?	20120526
*說明????????:??無
*************************************************************************************************************************/
u32?Get_PLLCLK(u8?pllreg)
{
	u32?r?=?0,?m,?p,?s;

	if?(pllreg?==?APLL)
		r?=?rAPLL_CON;
	else?if?(pllreg?==?MPLL)
		r?=?rMPLL_CON;
	else?if?(pllreg?==?EPLL)
		r?=?rEPLL_CON0;

	m?=?(r>>16)?&?0x3ff;
	p?=?(r>>8)?&?0x3f;
	s?=?r?&?0x7;

	return?(m?*?(SYSTEM_MAIN_CLK_IN?/?(p?*?(1?<<?s))));
}


/*************************************************************************************************************************
*函數(shù)????????:	u32?Get_FCLK(void)
*功能????????:??獲取FCLK時鐘頻率
*參數(shù)????????:??無
*返回????????:??頻率,HZ
*依賴????????:	底層宏定義
*作者????????:??cp1300@139.com
*時間????????:	20120526
*最后修改時間:?	20120526
*說明????????:??無
*************************************************************************************************************************/
u32?Get_FCLK(void)
{
	return?(Get_PLLCLK(APLL));
}



/*************************************************************************************************************************
*函數(shù)????????:	u32?Get_PCLK(void)
*功能????????:??獲取PCLK時鐘頻率
*參數(shù)????????:??無
*返回????????:??頻率,HZ
*依賴????????:	底層宏定義
*作者????????:??cp1300@139.com
*時間????????:	20120526
*最后修改時間:?	20120526
*說明????????:??無
*************************************************************************************************************************/
u32?Get_PCLK(void)
{
	u32?fclk;
	u32?hclkx2_div?=?((rCLK_DIV0?>>?9)?&?0x7)?+?1;
	u32?pre_div?=?((rCLK_DIV0?>>?12)?&?0xf)?+?1;

	if(rOTHERS?&?0x80)
		fclk?=?Get_FCLK();		//?SYNC?Mode
	else
		fclk?=?Get_PLLCLK(MPLL);	//?ASYNC?Mode

	return?fclk/(hclkx2_div?*?pre_div);
}












//////////////////////////////////////////////////////////////////
//???????′???,???printf????,
//PRINTF_EN?==?1,?????printf??????
#if?(PRINTF_EN_?==?1)
#include?"uart.h"?

int?fputc(int?ch,FILE?*f)
{?????
	UART0_SendByte((u8)ch);?????
	return?ch;
}
#endif

//PRINTF_EN?==?2,?????printf?????
#if?(PRINTF_EN_==?2)
#include?"tft_lcd.h"

int?fputc(int?ch,?FILE?*f)
{????
	static?u16?X;
	static?u16?X1;
	static?u16?Y;
	static?u8?flag;
?	
?	if(flag?==?0)
?	{
	?	if(Y?>?LCD_YSIZE-1-16)
		{
			
			Y?=?0;
			X?=?X1?=?LCD_XSIZE/2;
			flag?=?1;
			LCD_Fill(X1,LCD_XSIZE-1,0,LCD_YSIZE-1,0xffff);	//????????
		}
?	}
?	else
?	{
	?	if(Y?>?LCD_YSIZE-1-16)
		{
			Y?=?0;
			X?=?X1?=?0;
			flag?=?0;
			LCD_Fill(0,LCD_XSIZE/2-1,0,LCD_YSIZE-1,0xffff);	//????????
		}
?	}
	
	
	if((u8)ch?==?'n')
	{
	?	X?=?X1;
		Y?+=?12;
	}
	else?if((u8)ch?>?0x80)?//????
	{
		return?ch;
	}
	else
	{
		LCD_Char(X,Y,(u8?*)&ch,0x0000,0xffff,0x80);
		
		if(flag?==?0)
		{
			if(X?>?LCD_XSIZE/2-1-8)
			{
			?	X?=?X1;
				Y?+=?12;
			}
			else
				X?+=?8;
		}
		else
		{
			if(X?>?LCD_XSIZE-1-8)
			{
			?	X?=?X1;
				Y?+=?12;
			}
			else
				X?+=?8;
		}
	}?????

	return?ch;
}
#endif


//PRINTF_EN?==?3,???????printf??????????
#if?(PRINTF_EN_?==?3)
#include?"tft_lcd.h"
#include?"uart.h"
#includeu8?PrintfSet?=?0;	//0:????printf??????;1:????printf?????

int?fputc(int?ch,?FILE?*f)
{????
	static?u16?X;
	static?u16?X1;
	static?u16?Y;
	static?u8?flag;
?	
	if(PrintfSet)
	{
		if(flag?==?0)
	?	{
		?	if(Y?>?LCD_YSIZE-1-16)
			{
				
				Y?=?0;
				X?=?X1?=?LCD_XSIZE/2;
				flag?=?1;
				LCD_Fill(X1,LCD_XSIZE-1,0,LCD_YSIZE-1,0xffff);	//????????
			}
	?	}
	?	else
	?	{
		?	if(Y?>?LCD_YSIZE-1-16)
			{
				Y?=?0;
				X?=?X1?=?0;
				flag?=?0;
				LCD_Fill(0,LCD_XSIZE/2-1,0,LCD_YSIZE-1,0xffff);	//????????
			}
	?	}
		
		
		if((u8)ch?==?'n')
		{
		?	X?=?X1;
			Y?+=?12;
		}
		else?if((u8)ch?>?0x80)?//????
		{
			return?ch;
		}
		else
		{
			LCD_Char(X,Y,(u8?*)&ch,0x0000,0xffff,0x80);
			
			if(flag?==?0)
			{
				if(X?>?LCD_XSIZE/2-1-8)
				{
				?	X?=?X1;
					Y?+=?12;
				}
				else
					X?+=?8;
			}
			else
			{
				if(X?>?LCD_XSIZE-1-8)
				{
				?	X?=?X1;
					Y?+=?12;
				}
				else
					X?+=?8;
			}
		}
	}
	else
		UART0_SendByte((u8)ch);

	return?ch;
}
#endif


//system.h


/*************************************************************************************************************
?*?文件名:	system.h
?*?功能:		S3C6410相關(guān)系統(tǒng)函數(shù)
?*?作者:		cp1300@139.com
?*?創(chuàng)建時間:	2012年3月4日11:25
?*?最后修改時間:2012年3月4日
?*?詳細(xì):		相關(guān)系統(tǒng)操作宏定義
*************************************************************************************************************/

#ifndef	_SYSTEM_H_
#define	_SYSTEM_H_?

#include?"sys_types.h"
#include?"stdio.h"
#include?"s3c6410_map.h"

#define?Debug?printf	//調(diào)試支持

#define?nop?__nop()		//空指令延時一個系統(tǒng)時鐘周期



//相關(guān)外部函數(shù)申明
void?SetEINT0_TriggerMode(vu8?EINT0_N,vu8?Trigger);//設(shè)置外部中斷組0觸發(fā)模式
void?Set_GateClk(vu8?CLK_DIV,FunctionalState?Enable);	//CLK時鐘門控設(shè)置(HCLK,PCLK,SCLK)
void?Set_INTtoIRQ(vu8?INT_N);	//設(shè)置一個中斷為IRQ
void?Set_INTtoFIQ(vu8?INT_N);	//設(shè)置一個中斷為FIQ
void?Set_IntEnable(vu8?INT_N,FunctionalState?EnInt);	//開啟或關(guān)閉一個VIC中斷
void?Set_SoftInt(vu8?INT_N,vu8?ENABLE);	//開啟或關(guān)閉一個軟件中斷
void?Set_IsrAddr(vu8?INT_N,vu32?IsrAdd);	//設(shè)置中斷矢量入口
void?Set_VectorPriority(vu8?INT_N,vu8?Priority);	//設(shè)置矢量優(yōu)先級
u8?Get_IntEnable(vu8?INT_N);	//獲取一個中斷屏蔽狀態(tài)
u32?Get_PCLK(void);			//獲取PCLK時鐘頻率
u32?Get_FCLK(void);			//獲取FCLK時鐘頻率
u32?Get_PLLCLK(u8?pllreg);	//獲取PLL時鐘頻率

//相關(guān)外部全局變量聲明
extern?u8?PrintfSet;	//0:定義printf到串口;1:定義printf到液晶

//IO模式宏定義
#define	IO_IN_PUT		0	//輸入模式
#define?IO_OUT_PUT		1	//輸出模式
#define?IO_SF_MODE		2	//特殊模式,復(fù)用功能
#define?IO_EXT_INT		7	//外部中斷輸入模式
#define?IO_NO_UP		0	//禁止上拉,下拉
#define?IO_DROP_DOWM	1	//下拉
#define?IO_PULL_UP		2	//上拉

//外部中斷觸發(fā)模式定義
#define?EXT_LowLevel	0	//低電平觸發(fā)
#define?EXT_HighLevel	1	//高電平觸發(fā)
#define?EXT_NegEdge		2	//下降沿觸發(fā)
#define?EXT_PosEdge		4	//上升沿觸發(fā)
#define?EXT_Edge		6	//邊沿觸發(fā)

//使能printf輸出
//0:關(guān)閉printf輸出;1:使能printf到串口;2:使能printf到液晶;3:同時使能printf到串口和液晶
#define?PRINTF_EN_		3



//中斷組0編號定義
//	?外部中斷組0的IO	偏移+標(biāo)示	中斷組0中的編號
#define?EINT0_GPN0		0			//0
#define?EINT0_GPN1		0			//1
#define?EINT0_GPN2		4			//2
#define?EINT0_GPN3		4			//3
#define?EINT0_GPN4		8			//4
#define?EINT0_GPN5		8			//5
#define?EINT0_GPN6		12			//6	
#define?EINT0_GPN7		12			//7
#define?EINT0_GPN8		16			//8
#define?EINT0_GPN9		16			//9
#define?EINT0_GPN10		20			//10
#define?EINT0_GPN11		20			//11
#define?EINT0_GPN12		24			//12
#define?EINT0_GPN13		24			//13
#define?EINT0_GPN14		28			//14
#define?EINT0_GPN15		28			//15
#define?EINT0_GPL8		(0x80?+?0)	//16
#define?EINT0_GPL9		(0x80?+?0)	//17
#define?EINT0_GPL10		(0x80?+?4)	//18
#define?EINT0_GPL11		(0x80?+?4)	//19
#define?EINT0_GPL12		(0x80?+?8)	//20
#define?EINT0_GPL13		(0x80?+?8)	//21
#define?EINT0_GPL14		(0x80?+?12)	//22
#define?EINT0_GPM0		(0x80?+?12)	//23
#define?EINT0_GPM1		(0x80?+?16)	//24
#define?EINT0_GPM2		(0x80?+?16)	//25
#define?EINT0_GPM3		(0x80?+?20)	//26
#define?EINT0_GPM4		(0x80?+?20)	//27




//外部中斷分組定義
//		組名			//組號			//范圍
#define?EINT_Group0????	0				//GPN0--->GPN15????????GPL8--->GPL14?????????GPM0--->GPM4
#define?EINT_Group01????1				//GPA0--->GPA7?????????GPB0--->GPB6
#define?EINT_Group02????1				//GPC0--->GPC7
#define?EINT_Group03????2				//GPD0--->GPD5
#define?EINT_Group04????2				//GPF0--->GPF14
#define?EINT_Group05???	3				//GPG0--->GPG7
#define?EINT_Group06????3				//GPH0--->GPH9
#define?EINT_Group07????4				//GPO0--->GPO15
#define?EINT_Group08????4				//GPP0--->GPP14
#define?EINT_Group09????5				//GPQ0--->GPQ9


//HCLK門控時鐘定義
/*HCLK_GATE控制所有Ips的HCLK,如果區(qū)域?yàn)椤?’,則HCLK被提供,否則,HCLK被屏蔽。當(dāng)S3C6410
轉(zhuǎn)換成掉電模式時,系統(tǒng)控制器檢查一些模塊(IROM,MEM0,MEM1和MFC模塊)的狀態(tài)。因此,位25,22,
21,0必須為‘1’,以符合掉電的要求。
		HCLK_GATE?		位?		描述?																初始狀態(tài)*/
#define?HCLK_UHOST		29		//為UHOST?選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_SECUR		28		//為安全子系統(tǒng)選通HCLK(0:屏蔽,1:通過)。?							1
#define?HCLK_SDMA1		27		//為SDMA1?選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_SDMA0		26		//為SDMA0?選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_IROM		25		//為IROM?選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_DDR1		24		//為DDR1?選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_DDR0		23		//為DDR0?選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_MEM1		22		//為DMC1?選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_MEM0		21		//為DMC0,SROM,OneNAND,NFCON?和CFCON?選通HCLK(0:屏蔽,1:通過)。	1
#define?HCLK_USB		20		//為USB?OTG?選通HCLK(0:屏蔽,1:通過)。?							1
#define?HCLK_HSMMC2		19		//為HSMMC2?選通HCLK(0:屏蔽,1:通過)。?							1
#define?HCLK_HSMMC1		18		//為HSMMC1?選通HCLK(0:屏蔽,1:通過)。?							1
#define?HCLK_HSMMC0		17		//為HSMMC0?選通HCLK(0:屏蔽,1:通過)。?							1
#define?HCLK_MDP		16		//為MDP?選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_DHOST		15		//為直接HOST?接口選通HCLK(0:屏蔽,1:通過)。?						1
#define?HCLK_IHOST		14		//為間接HOST?接口選通HCLK(0:屏蔽,1:通過)。?						1
#define?HCLK_DMA1		13		//為DMA1?選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_DMA0		12		//為DMA0?選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_JPEG		11		//為JPEG?選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_CAMIF		10		//為相機(jī)接口選通HCLK(0:屏蔽,1:通過)。?							1
#define?HCLK_SCALER		9		//為定標(biāo)器選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_2D			8		//為2D?選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_TV			7		//為TV?譯碼器選通HCLK(0:屏蔽,1:通過)。?							1
#define?HCLK_POST0		5		//為POST0?選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_ROT		4		//為旋轉(zhuǎn)器選通HCLK(0:屏蔽,1:通過)。?								1
#define?HCLK_LCD		3		//為LCD?控制器選通HCLK(0:屏蔽,1:通過)。?							1
#define?HCLK_TZIC		2		//為中斷控制器選通HCLK(0:屏蔽,1:通過)。?							1
#define?HCLK_INTC		1		//為向量中斷控制器選通HCLK(0:屏蔽,1:通過)。?						1
#define?HCLK_MFC		0		//為MFC?選通HCLK(0:屏蔽,1:通過)。?								1


//PCLK門控時鐘定義
//		PCLK_GATE?		位?				描述?											初始狀態(tài)
#define?PCLK_SKEY		(0x40?|?24)		//?為安全鍵選通PCLK(0:屏蔽,1:通過)。?		1
#define?PCLK_CHIPID		(0x40?|?23)		//?為片上ID?選通PCLK(0:屏蔽,1:通過)。?		1
#define?PCLK_SPI1		(0x40?|?22)		//?為SPI1?選通PCLK(0:屏蔽,1:通過)。?			1
#define?PCLK_SPI0		(0x40?|?21)		//?為SPI0?選通PCLK(0:屏蔽,1:通過)。?			1
#define?PCLK_HSIRX		(0x40?|?20)		//?為HSI?接收器選通PCLK(0:屏蔽,1:通過)。?	1
#define?PCLK_HSITX		(0x40?|?19)		//?為HIS?發(fā)送器選通PCLK(0:屏蔽,1:通過)。?	1
#define?PCLK_GPIO		(0x40?|?18)		//?為GPIO?選通PCLK(0:屏蔽,1:通過)。?			1
#define?PCLK_IIC		(0x40?|?17)		//?為IIC?選通PCLK(0:屏蔽,1:通過)。?			1
#define?PCLK_IIS1		(0x40?|?16)		//?為IIS1?選通PCLK(0:屏蔽,1:通過)。?			1
#define?PCLK_IIS0		(0x40?|?15)		//?為IIS0?選通PCLK(0:屏蔽,1:通過)。			1
#define?PCLK_AC97		(0x40?|?14)		//?為AC97?選通PCLK(0:屏蔽,1:通過)。?			1
#define?PCLK_TZPC		(0x40?|?13)		//?為TZPC?選通PCLK(0:屏蔽,1:通過)。?			1
#define?PCLK_TSADC		(0x40?|?12)		//?為觸摸屏ADC?選通PCLK(0:屏蔽,1:通過。?		1
#define?PCLK_KEYPAD		(0x40?|?11)		//?為Key?PAD?選通PCLK(0:屏蔽,1:通過)。		1
#define?PCLK_IRDA		(0x40?|?10)		//?為IRDA?選通PCLK(0:屏蔽,1:通過)。?			1
#define?PCLK_PCM1		(0x40?|?9)		//?為PCM1?選通PCLK(0:屏蔽,1:通過)。?			1
#define?PCLK_PCM0		(0x40?|?8)		//?為PCM0?選通PCLK(0:屏蔽,1:通過)。?			1
#define?PCLK_PWM		(0x40?|?7)		//?為PWM?選通PCLK(0:屏蔽,1:通過)。?			1
#define?PCLK_RTC		(0x40?|?6)		//?為RTC?選通PCLK(0:屏蔽,1:通過)。?			1
#define?PCLK_WDT		(0x40?|?5)		//?為看門狗定時器選通PCLK(0:屏蔽,1:通過)。?	1
#define?PCLK_UART3		(0x40?|?4)		//?為UART3?選通PCLK(0:屏蔽,1:通過)。?		1
#define?PCLK_UART2		(0x40?|?3)		//?為UART2?選通PCLK(0:屏蔽,1:通過)。?		1
#define?PCLK_UART1		(0x40?|?2)		//?為UART1?選通PCLK(0:屏蔽,1:通過)。?		1
#define?PCLK_UART0		(0x40?|?1)		//?為UART0?選通PCLK(0:屏蔽,1:通過)。?		1
#define?PCLK_MFC		(0x40?|?0)		//?為MFC?選通PCLK(0:屏蔽,1:通過)。?			1


//PCLK門控時鐘定義
//PCLK_GATE?位?描述?初始狀態(tài)
#define?SCLK_UHOST		(0x80?|?30)?	//?為USB-HOST?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_MMC2_48	(0x80?|?29)		//?為MMC2?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_MMC1_48	(0x80?|?28)		//?為MMC1?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_MMC0_48	(0x80?|?27)		//?為MMC0?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_MMC2		(0x80?|?26)		//?為MMC2?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_MMC1		(0x80?|?25)		//?為MMC1?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_MMC0		(0x80?|?24)		//?為MMC0?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_SPI1_48	(0x80?|?23)		//?為SPI?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_SPI0_48	(0x80?|?22)		//?為SPI?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_SPI1		(0x80?|?21)		//?為SPI?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_SPI0		(0x80?|?20)		//?為SPI?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_DAC27		(0x80?|?19)		//?為DAC?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_TV27		(0x80?|?18)		//?為TV?譯碼器選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_SCALER27	(0x80?|?17)		//?為scaler27?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_SCALER		(0x80?|?16)		//?為定標(biāo)器選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_LCD27		(0x80?|?15)		//?為LCD?控制器選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_LCD		(0x80?|?14)		//?為LCD?控制器選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_POST0_27	(0x80?|?12)		//?為POST0?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_POST0		(0x80?|?10)		//?為POST0?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_AUDIO1		(0x80?|?9)		//?為PCM1,IIS1?和AC97?1?選通特殊時鐘?(0:屏蔽,1:通過)。1
#define?SCLK_AUDIO0		(0x80?|?8)		//?為PCM0,IIS0?和AC97?0?選通特殊時鐘?(0:屏蔽,1:通過)。1
#define?SCLK_SECUR		(0x80?|?7)		//?為安全模塊選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_IRDA		(0x80?|?6)		//?為IRDA?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_UART		(0x80?|?5)		//?為UART0~3?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_OneNAND	(0x80?|?4)		//?為OneNAND?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_MFC		(0x80?|?3)		//?為MFC?選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_CAM		(0x80?|?2)		//?為相機(jī)接口選通特殊時鐘?(0:屏蔽,1:通過)。?1
#define?SCLK_JPEG		(0x80?|?1)		//?為JPEG?選通特殊時鐘?(0:屏蔽,1:通過)。?1

//中斷源編號定義
/*		S3C6410X?支持64?位中斷源,不支持ARM1176HZF-S?鏡像中斷運(yùn)行.

		?		中斷源?				中斷號	描述?									組*/
#define?		INT_ADC?			63		//ADC?EOC?中斷?							VIC1
#define?		INT_PENDNUP?		62		//ADC?筆向下/向上中斷?中斷?				VIC1
#define?		INT_SEC?			61		//安全中斷?								VIC1
#define?		INT_RTC_ALARM?		60		//RTC?警告中斷?							VIC1
#define?		INT_IrDA?			59		//IrDA?中斷?							VIC1
#define?		INT_OTG?			58		//USB?OTG?中斷?							VIC1
#define?		INT_HSMMC1?			57		//HSMMC1?中斷?							VIC1
#define?		INT_HSMMC0?			56		//HSMMC0?中斷?							VIC1
#define?		INT_HOSTIF?			55		//主機(jī)接口中斷?							VIC1
#define?		INT_MSM?			54		//MSM?調(diào)制解調(diào)器?I/F?中斷?				VIC1
#define?		INT_EINT4?			53		//外部中斷組1~組9?						VIC1
#define?		INT_HSIrx?			52		//HS?Rx?中斷?							VIC1
#define?		INT_HSItx?			51		//HS?Tx?中斷?							VIC1
#define?		INT_I2C0?			50		//I2C?0?中斷?							VIC1
#define?		INT_SPI_INT_HSMMC2?	49		//SPI?中斷或HSMMC2?中斷?				VIC1
#define?		INT_SPI0?			48		//SPI0?中斷?							VIC1
#define?		INT_UHOST?			47		//USB?主機(jī)中斷?							VIC1
#define?		INT_CFC?			46		//CFCON?中斷?							VIC1
#define	?		INT_NFC?			45		//NFCON?中斷?							VIC1
#define?		INT_ONENAND1?		44		//板塊1?的ONENANE?中斷?					VIC1
#define?		INT_ONENAND0?		43		//板塊0?的ONENAND?中斷?					VIC1
#define?		INT_DMA1?			42		//DMA1?中斷?							VIC1
#define?		INT_DMA0?			41		//DMA0?中斷?							VIC1
#define?		INT_UART3?			40		//UART3?中斷?							VIC1
#define?		INT_UART2?			39		//UART2?中斷?							VIC1
#define?		INT_UART1?			38		//UART1?中斷?							VIC1
#define?		INT_UART0?			37		//UART0?中斷?							VIC1
#define?		INT_AC97?			36		//AC?中斷?								VIC1
#define?		INT_PCM1?			35		//PCM1?中斷?							VIC1
#define?		INT_PCM0?			34		//PCM0?中斷?							VIC1
#define?		INT_EINT3?			33		//外部中斷20~27?						VIC1
#define?		INT_EINT2?			32		//外部中斷12~19?						VIC1
#define?		INT_LCD_2?			31		//LCD?中斷.系統(tǒng)I/F?完成?				VIC0
#define?		INT_LCD_1?			30		//LCD?中斷.VSYNC?中斷?					VIC0
#define?		INT_LCD_0?			29		//LCD?中斷.FIFO?不足?					VIC0
#define?		INT_TIMER4?			28		//定時器4?中斷.?						VIC0
#define?		INT_TIMER3?			27		//定時器3?中斷.?						VIC0
#define?		INT_WDT?			26		//看門狗定時器中斷.?					VIC0
#define?		INT_TIMER2?			25		//定時器2?中斷.?						VIC0
#define?		INT_TIMER1?			24		//定時器1?中斷.?						VIC0
#define?		INT_TIMER0?			23		//定時器0?中斷.?						VIC0
#define?		INT_KEYPAD?			22		//鍵盤中斷.?							VIC0
#define?		INT_ARM_DMAS?		21		//ARM?DMAS?中斷.?						VIC0
#define?		INT_ARM_DMA?		20		//ARM?DMA?中斷.?						VIC0
#define?		INT_ARM_DMAERR?		19		//ARM?DMA?錯誤中斷.?					VIC0
#define?		INT_SDMA1?			18		//安全?DMA1?中斷.?						VIC0
#define?		INT_SDMA0?			17		//安全?DMA0?中斷.?						VIC0
#define?		INT_MFC?			16		//MFC?中斷.?							VIC0
#define?		INT_JPEG?			15		//JPEG?中斷.?							VIC0
#define?		INT_BATF?			14		//電池故障中斷.?						VIC0
#define?		INT_SCALER?			13		//TV?轉(zhuǎn)換器中斷.?						VIC0
#define?		INT_TVENC?			12		//TV?編碼器中斷.?						VIC0
#define?		INT_2D?				11		//2D?中斷.?								VIC0
#define?		INT_ROTATOR?		10		//旋轉(zhuǎn)器中斷.?							VIC0
#define?		INT_POSTO?			9		//后處理器中斷.?						VIC0
#define?		INT_3D?				8		//3D?圖像控制器中斷.?					VIC0
//#define?		Reserved?			7		//保留?									VIC0
#define?		INT_I2S				6		//I2S0/I2S1/INT_I2SV40/I2SV40中斷		VIC0				
#define?		INT_I2C1?			5		//I2C1?中斷			?					VIC0
#define?		INT_CAMIF_P?		4		//照相機(jī)接口中斷?						VIC0
#define?		INT_CAMIF_C?		3		//照相機(jī)接口中斷?						VIC0
#define?		INT_RTC_TIC?		2		//RTC?TIC?中斷?							VIC0
#define?		INT_EINT1?			1		//外部中斷4~11?							VIC0
#define?		INT_EINT0?			0		//外部中斷0~3?							VIC0	







/*************************************************************************************************/
/*			對應(yīng)位聲明,方便位操作		*/
#define?BIT0	(0x0001?<<?0)
#define?BIT1	(0x0001?<<?1)
#define?BIT2	(0x0001?<<?2)
#define?BIT3	(0x0001?<<?3)
#define?BIT4	(0x0001?<<?4)
#define?BIT5	(0x0001?<<?5)
#define?BIT6	(0x0001?<<?6)
#define?BIT7	(0x0001?<<?7)
#define?BIT8	(0x0001?<<?8)
#define?BIT9	(0x0001?<<?9)
#define?BIT10	(0x0001?<<?10)
#define?BIT11	(0x0001?<<?11)
#define?BIT12	(0x0001?<<?12)
#define?BIT13	(0x0001?<<?13)
#define?BIT14	(0x0001?<<?14)
#define?BIT15	(0x0001?<<?15)
#define?BIT16	(0x00000001?<<?16)
#define?BIT17	(0x00000001?<<?17)
#define?BIT18	(0x00000001?<<?18)
#define?BIT19	(0x00000001?<<?19)
#define?BIT20	(0x00000001?<<?20)
#define?BIT21	(0x00000001?<<?21)
#define?BIT22	(0x00000001?<<?22)
#define?BIT23	(0x00000001?<<?23)
#define?BIT24	(0x00000001?<<?24)
#define?BIT25	(0x00000001?<<?25)
#define?BIT26	(0x00000001?<<?26)
#define?BIT27	(0x00000001?<<?27)
#define?BIT28	(0x00000001?<<?28)
#define?BIT29	(0x00000001?<<?29)
#define?BIT30	(0x00000001?<<?30)
#define?BIT31	(0x00000001?<<?31)

//PLL選擇
#define	APLL?	0	//ARM內(nèi)核時鐘PLL
#define?MPLL?	1	//主時鐘PLL
#define?EPLL?	2	//外設(shè)時鐘PLL

//主時鐘輸入
#define?SYSTEM_MAIN_CLK_IN	12000000		//12MHZ

/*************************************************************************************************************************
*函數(shù)????????:	__inline?void?VICInterruptEnd(void)
*功能????????:??在中斷快要結(jié)束時清除中斷
*參數(shù)????????:??無
*返回????????:??無
*依賴????????:	底層宏定義
*作者????????:??陳鵬
*時間????????:	20120305
*最后修改時間:?	20120305
*說明????????:??寫入任何數(shù)據(jù)清除中斷,只有在中斷服務(wù)程序中才可讀,結(jié)束時才寫
				兩個要一起清除,否則可能導(dǎo)致無法再次進(jìn)入中斷,無意間發(fā)現(xiàn)的
*************************************************************************************************************************/
__inline?void?VICInterruptEnd(void)
{
	VIC0->ADDRESS?=?0xffffffff;	//寫入任何值都可以清除當(dāng)前中斷
	VIC1->ADDRESS?=?0xffffffff;	//寫入任何值都可以清除當(dāng)前中斷
}


//通道選擇
#define?ch0		0
#define?ch1		1
#define?ch2		2



//printf輸出定義
#if?(PRINTF_EN_?==?1)	//使能到串口
#define?uart_printf(format,...)	(printf(format,?##__VA_ARGS__))	//串口打印
#define?DEBUG(format,...)?		(printf(""format,?__LINE__,?##__VA_ARGS__))	//DEBUG輸出
#endif


//printf輸出定義
#if?(PRINTF_EN_?==?2)	//使能到液晶
#define?lcd_printf(format,...)	(printf(format,?##__VA_ARGS__))	//LCD打印
#define?DEBUG(format,...)?		(printf(""format,?__LINE__,?##__VA_ARGS__))	//DEBUG輸出
#endif


//printf輸出定義
#if?(PRINTF_EN_?==?3)	//同時使能到液晶和串口
#define?uart_printf(format,...)	PrintfSet=0;printf(format,?##__VA_ARGS__)	//串口打印
#define?lcd_printf(format,...)	PrintfSet=1;printf(format,?##__VA_ARGS__)	//LCD打印
#define?DEBUG(format,...)		PrintfSet=0;printf(""format,?__LINE__,?##__VA_ARGS__)	//DEBUG輸出
#endif

#endif




本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉