📄 hardware.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 + -