mini2440附赠光盘\非操作系统示例代码\下有一个测试项目2440test,只要对该项目略作修改就能,让板子播放视频了(超简易方案,还有其他不少缺陷,高手们不要来喷我啊。。。)
主要修改了两处代码,把暂时不用的功能删掉了,修改过的程序如下:
#define GLOBAL_CLK 1
//#include <stdlib.h>
//#include <string.h>
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "mmu.h"
extern void TFT_LCD_Init(void);
extern void TFT_LCD_Test(void);
volatile U32 downloadAddress;
volatile U32 downloadFileSize;
static U32 cpu_freq;
static U32 UPLL;
static void cal_cpu_bus_clk(void)
{
U32 val;
U8 m, p, s;
val = rMPLLCON;
m = (val>>12)&0xff;
p = (val>>4)&0x3f;
s = val&3;
//(m+8)*FIN*2 不要超出32位数!
FCLK = ((m+8)*(FIN/100)*2)/((p+2)*(1<<s))*100;
val = rCLKDIVN;
m = (val>>1)&3;
p = val&1;
val = rCAMDIVN;
s = val>>8;
switch (m) {
case 0:
HCLK = FCLK;
break;
case 1:
HCLK = FCLK>>1;
break;
case 2:
if(s&2)
HCLK = FCLK>>3;
else
HCLK = FCLK>>2;
break;
case 3:
if(s&1)
HCLK = FCLK/6;
else
HCLK = FCLK/3;
break;
}
if(p)
PCLK = HCLK>>1;
else
PCLK = HCLK;
if(s&0x10)
cpu_freq = HCLK;
else
cpu_freq = FCLK;
val = rUPLLCON;
m = (val>>12)&0xff;
p = (val>>4)&0x3f;
s = val&3;
UPLL = ((m+8)*FIN)/((p+2)*(1<<s));
UCLK = (rCLKDIVN&8)?(UPLL>>1):UPLL;
}
void Main(void)
{
U32 mpll_val = 0 ;
Port_Init();
mpll_val = (92<<12)|(1<<4)|(1);
ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);
ChangeClockDivider(14, 12);
cal_cpu_bus_clk();
Beep(2000, 100);
MMU_Init(); //
Led_Display(0x66);
TFT_LCD_Init();
TFT_LCD_Test();
}
/**************************************************************
The initial and control for 640×480 16Bpp TFT LCD----VGA
**************************************************************/
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
extern const unsigned char sunflower_320x240[];
extern const unsigned char sunflowers3[][153600];//18帧
extern const unsigned char sunflowers4[][153600];//18帧
extern const unsigned char sunflowers5[][153600];//18帧
extern const unsigned char sunflowers[][153600];//36帧
#define LCD_XSIZE LCD_WIDT