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

📄 hardware.c

📁 驱动ppi
💻 C
字号:
#include <cdefBf531.h>
#include <ccblkfn.h>
#include <sys/exception.h>
#include <string.h>
#include "Hardware.h"

//DMA0参数设定

//显示缓冲区设定
#pragma section("FrameBuffer1", RUNTIME_INIT)
char FrameBufferAddr1[FRAME_SIZE];

#pragma section("FrameBuffer2", RUNTIME_INIT)
char FrameBufferAddr2[FRAME_SIZE];

#pragma align 4
#pragma section("sdram0_data")
char DisplayBuffer[SCREEN_SIZE*2]={
    //[PADOFSTART]
  	//#include "PictureEN.h"
};

#pragma section("L1_data")
volatile short bFlushOver=0;

#define	DMA_DESC_NUM	8
#define DMA_NDPL		0
#define DMA_SAL			1
#define DMA_SAH			2
#define DMA_CFG			3
#define DMA_XCNT		4
#define DMA_XMOD		5
#define DMA_YCNT		6
#define DMA_YMOD		7
#pragma section("L1_data")
static short DMACtrl[DMA_DESC_NUM]=
{
	[DMA_NDPL]0,
	[DMA_SAL]=0x0050,
	[DMA_SAH]=0x0080,
	[DMA_CFG]0x6391,
	[DMA_XCNT]		XCNT,
	[DMA_XMOD]		XMOD,
	[DMA_YCNT]		YCNT,
	[DMA_YMOD]		YMOD,
};


#pragma section("L1_data")
struct CstDisplay Display=
{
    .ROP2=NULL,
    .PenLine=1,
    .PenNull=0,
    .BrushStyle=HS_MASK,
    .BlkColor=BLACK_COLOR,
    .Transparent=100,
    .TxtHAlign=TA_LEFT,
    .TxtVAlign=0,
    .pFont=NULL,
    .pBrush=NULL,
    .pMemory=(RGB *)DisplayBuffer,
    .pScreen=(RGB *)FRAME_BUFFER1,    
};


///////////////////////////////////////////////////////////////////////////////////////////
///																						///	
///                                    DMA0-PPI-TIMER定义                               ///
///																						///	
///////////////////////////////////////////////////////////////////////////////////////////
//HS
//   	 ----                                                       ----
//	    |  1 |	                     81			                   |  1 |
//-------	 -------------------------------------------------------    ---------------------
//VS
//	   --------                                                    --------
//	  |	  3    |	               	240			                  |   3    |
//-----		   ----------------------------------------------------	        -----------------
void InitDPT(void)
{
unsigned int temp;

    SetScreenAddr((unsigned int)FRAME_BUFFER2);
    temp=(unsigned int)DMACtrl;
    DMACtrl[DMA_NDPL]=(unsigned short)temp;
 
        
	//初始化DMA0
	//*pDMA_TC_PER=0x00F0;
	*pDMA0_NEXT_DESC_PTR=DMACtrl;
	*pDMA0_X_COUNT=XCNT;
	*pDMA0_X_MODIFY=XMOD;
	*pDMA0_Y_COUNT=YCNT;
	*pDMA0_Y_MODIFY=YMOD;
 	csync();
 
	//初始化定时器
	//Timer1 and Timer2 config
	//TOGGLE_HI=0--The effective state of PULSE_HI is the programmed state
	//use PPI_CLK to clock counter|Enable pad in PWM_OUT mode|Count to end of period|
	//Negative action pulse|PWMOUT mode
	temp=EMU_RUN|CLK_SEL|TIN_SEL|PERIOD_CNT|PWM_OUT|PULSE_HI;
	//temp=CLK_SEL|TIN_SEL|PERIOD_CNT|PWM_OUT;

	//HSYNC
	*pTIMER1_PERIOD=80;//*pTIMER1_PERIOD=406;
	*pTIMER1_WIDTH=1;//*pTIMER1_WIDTH=30;
	//VSYNC
	*pTIMER2_PERIOD=240*80;//*pTIMER2_PERIOD=262*406;
	*pTIMER2_WIDTH=3;//*pTIMER2_WIDTH=406*1;
	
	*pTIMER1_CONFIG=temp;
	*pTIMER2_CONFIG=temp;
	ssync(); 
	
	//初始化PPI
	//delay after asserting HS before starting to read out data
 	*pPPI_DELAY=0;//*pPPI_DELAY=65;
	//the data transfered in one line
	*pPPI_COUNT=79;//*pPPI_COUNT=319;
	
	//PPI config
	//PPI_FS1 and PPI_FS2 are treated as falling edge asserted
	//PPI samples data on falling edge and drives data on rising edge of PPI_CLK
	//16 bit|transmit mode(output)|2 frame syncs
	*pDMA0_CONFIG=0x6391; //*pDMA0_CONFIG=0x6395;
	*pPPI_CONTROL=0x401f; //*pPPI_CONTROL=0xb81f;
	*pTIMER_ENABLE = TIMEN1 | TIMEN2;	
	csync();	
	
}

#pragma section("L1_code")
EX_INTERRUPT_HANDLER(PPI_TxIsr)
{	
	*pDMA0_IRQ_STATUS = 0x1;
	
	if (bFlushOver)
    {  	
		/*
		*pTIMER_DISABLE = TIMEN1 | TIMEN2;	
		*pPPI_CONTROL&=0xFFFE;  
		*pDMA0_CONFIG&=0xFFFE;
		*pDMA0_CURR_X_COUNT=XCNT;
		*pDMA0_CURR_Y_COUNT=YCNT;
		*pDMA0_CONFIG|=0x1;
		*pPPI_CONTROL|=0x1;  
		*pTIMER_ENABLE = TIMEN1 | TIMEN2;
		*/	
	/*	DMACtrl[DMA_SAH]^=0x0040;

		if (DMACtrl[DMA_SAH]==0x00c2)
			SetScreenAddr((unsigned int)FRAME_BUFFER2);
		else
			SetScreenAddr((unsigned int)FRAME_BUFFER1);*/
		bFlushOver=0;
    }
    
    ssync();
}



void UpdateLCD(void)
{
unsigned long j;    

	bFlushOver=2;
	while (bFlushOver)
	{
		;
	}
}
	
///////////////////////////////////////////////////////////////////////////////////////////
///									 													///	
///                                      中断定义                                       ///
///																						///	
///////////////////////////////////////////////////////////////////////////////////////////
void InitInterrupt(void)
{
	//安装中断处理程序
	register_handler(ik_ivg8, PPI_TxIsr);
	
	//使能对应中断
	*pSIC_IMASK= SIC_MASK(14)|SIC_MASK(8);
}

⌨️ 快捷键说明

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