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

📄 init.c

📁 彩色液晶LCD驱动
💻 C
字号:
#include "ccblkfn.h"
#include "sysreg.h"

#include <sys\exception.h>
#include <cdefBF533.h>

#include "Sys.h"
#include "CPLD.h"
#include "regdef.h"
#include "flashcpld.h"
#include "Init.h"

extern void Init_EBIU(void);
extern void Init_PLL(void);
extern void Init_SDRAM(void);
extern void Init_PPI(void);
extern void Init_PPIDMA(void);
extern void Init_Timer(void);
extern void Init_Flash(void);
EX_INTERRUPT_HANDLER(DMA0_PPI_ISR);

extern CtrlRegFlashAPortA myCtrlRegFlashAPortA;
extern PLLCTRL mypllctrl;
extern PLLDIV myplldiv;
extern PPICtrl myppictrl;
extern DMA0Config ppidmacfg;
extern TIMERxCONFIG mytimer1cfg;
extern TIMERxCONFIG mytimer2cfg;
extern unsigned char DisplayBuffer[262][960];

/*************************************************************************/
void Init_PLL(void)
{
    int iIMASK_Value;
	sysreg_write(reg_SYSCFG, 0x32);		//Initialize System Configuration Register
	*pPLL_DIV = 0x0008;
	*pPLL_LOCKCNT	= 0x0200;			// time for PLL to stabilize
	*pPLL_CTL		= 0x2c00;			// set VCO/CLKIN = 22
	*pSIC_IWR		= 0x00000001;		// enable only PLL wakeup interrupt
	iIMASK_Value	= cli();					// disable interrupts
	idle();								// wait for PLL wakeup interrupt
	sti(iIMASK_Value);	
}

void Init_EBIU(void)
{
	*pEBIU_AMBCTL0	= 0x7bb07bb0;
	*pEBIU_AMBCTL1	= 0x7bb07bb0;
	*pEBIU_AMGCTL	= 0x000f;
}

void Init_SDRAM(void)
{
	*pEBIU_SDRRC = 0x00000817;	
	*pEBIU_SDBCTL = 0x00000013;
	*pEBIU_SDGCTL = 0x0091998d;	
}

void Init_CPLD(void)
{
	int i;
	*pCtrlReg1 = 0x02;
	for(i = 0;i <10000;i++);
	*pCtrlReg2 = 0x03;	//for ver3
	//*pCtrlReg2 = 0x00;		//for ver2
	for(i = 0;i <10000;i++);
}

/***********************************************************************/
void Init_PPI(void)
{	
	*pPPI_DELAY = 0xcb;//106 cycle delay before writing out data
	*pPPI_COUNT = 959;//960 samples per line
	
	myppictrl.PPICtrlBits.dlen 		= 0;//data length is 8bits
	myppictrl.PPICtrlBits.fldsel 	  	= 0;//external trigger
	myppictrl.PPICtrlBits.packen 	= 1;//disable packing mode
	myppictrl.PPICtrlBits.polc		= 0;//do not invert PPI_CLK
	myppictrl.PPICtrlBits.pols		= 1;//invert PPI FS
	myppictrl.PPICtrlBits.portcfg	= 1;//use 2 or 3 frame syncs
	myppictrl.PPICtrlBits.portdir	= 1;//transmit mode(output)
	myppictrl.PPICtrlBits.porten		= 0;//disable now	
	myppictrl.PPICtrlBits.skipen		= 0;//skipping disabled	
	myppictrl.PPICtrlBits.skipeo		= 0;//skip odd-numbered elements,do not care
	myppictrl.PPICtrlBits.xfrtype	= 3;//output mode 		

	*pPPI_CONTROL = myppictrl.PPICtrlValue;//Generic 3-sync mode
}

void Init_PPIDMA(void)
{
	*pDMA0_START_ADDR = DisplayBuffer;
	*pDMA0_X_COUNT = 960/2;
	*pDMA0_X_MODIFY = 2;
	*pDMA0_Y_COUNT = 262;
	*pDMA0_Y_MODIFY = 2;
	
	ppidmacfg.DMA0ConfigBits.dien		= 0;
	ppidmacfg.DMA0ConfigBits.disel		= 0;
	ppidmacfg.DMA0ConfigBits.dma2d	= 1;//two dimensional dma
	ppidmacfg.DMA0ConfigBits.dmaen	= 0;//disable now
	ppidmacfg.DMA0ConfigBits.flow		= 0x1;//autobuffer mode
	ppidmacfg.DMA0ConfigBits.ndsize	= 0;
	ppidmacfg.DMA0ConfigBits.restart	= 1;//discard dma fifo
	ppidmacfg.DMA0ConfigBits.wdsize	= 0x01;//transfers 16bits
	ppidmacfg.DMA0ConfigBits.wnr		= 0;//memory read operation

	*pDMA0_CONFIG = ppidmacfg.DMA0ConfigValue;//Autobuffer mode, 2D, 16-bit transfers, Tx
}

void Init_Timer(void)
{	
	*pTIMER1_PERIOD		= 1224;
	*pTIMER1_WIDTH		= 5;

	mytimer1cfg.TIMERxCONFIGBits.tmode	= 0x1;
	
	mytimer1cfg.TIMERxCONFIGBits.clksel	= 1;
	mytimer1cfg.TIMERxCONFIGBits.tinsel	= 1;
	
	mytimer1cfg.TIMERxCONFIGBits.emurun	= 0;
	mytimer1cfg.TIMERxCONFIGBits.errtype	= 0x0;
	mytimer1cfg.TIMERxCONFIGBits.irqena	= 0;
	
	mytimer1cfg.TIMERxCONFIGBits.periodcnt= 1;
	
	mytimer1cfg.TIMERxCONFIGBits.togglehi	= 0;
	mytimer1cfg.TIMERxCONFIGBits.outdis	= 0;
	mytimer1cfg.TIMERxCONFIGBits.pulsehi	= 0;

	*pTIMER1_CONFIG = mytimer1cfg.TIMERxCONFIGValue;
	
	*pTIMER2_PERIOD		= 320688;
	*pTIMER2_WIDTH		= 3672;

	mytimer2cfg.TIMERxCONFIGBits.tmode	= 0x1;
	
	mytimer2cfg.TIMERxCONFIGBits.clksel	= 1;
	mytimer2cfg.TIMERxCONFIGBits.tinsel	= 1;
	
	mytimer2cfg.TIMERxCONFIGBits.emurun	= 0;
	mytimer2cfg.TIMERxCONFIGBits.errtype	= 0x0;
	mytimer2cfg.TIMERxCONFIGBits.irqena	= 0;

	mytimer2cfg.TIMERxCONFIGBits.periodcnt= 1;
	
	mytimer2cfg.TIMERxCONFIGBits.togglehi	= 0;
	mytimer2cfg.TIMERxCONFIGBits.outdis	= 0;
	mytimer2cfg.TIMERxCONFIGBits.pulsehi	= 0;
	
	*pTIMER2_CONFIG = mytimer2cfg.TIMERxCONFIGValue;	

}









⌨️ 快捷键说明

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