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

📄 main.c

📁 一个FS2410的DEMO
💻 C
字号:

/***************************************************/
#include "def.h"
#include "option.h"
#include "2410addr.h"     //2410寄存器地址定义头文件
#include "2410lib.h"
#include "2410slib.h"   
#include "bmp.h"  

//================================

#define	CLOCK_SPI	(1<<18)
#define	CLOCK_IIS	(1<<17)
#define	CLOCK_IIC	(1<<16)
#define	CLOCK_ADC	(1<<15)
#define	CLOCK_RTC	(1<<14)
#define	CLOCK_GPIO	(1<<13)
#define	CLOCK_UART2	(1<<12)
#define	CLOCK_UART1	(1<<11)
#define	CLOCK_UART0	(1<<10)
#define	CLOCK_SDI	(1<<9)
#define	CLOCK_TIMER	(1<<8)
#define	CLOCK_USBD	(1<<7)
#define	CLOCK_USBH	(1<<6)
#define	CLOCK_LCD	(1<<5)
#define	CLOCK_NAND	(1<<4)
//=================================
#define BSWP         (0)                  // Byte swap control
#define HWSWP        (1)                  // Half word swap control

#define M5D(n)       ((n) & 0x1fffff)     // get lower 21bits

// FCLK = 200MHz, HCLK = 100MHz
// VCLK = HCLK / [(CLKVAL+1) * 2]  (CLKVAL >= 0)
#define CLKVAL_TFT_320240       (7)

// TFT 320 x 240
#define LCD_XSIZE_TFT_320240    (320)
#define LCD_YSIZE_TFT_320240    (240)

// TFT 320 x 240
#define SCR_XSIZE_TFT_320240    (320)
#define SCR_YSIZE_TFT_320240    (240)

// TFT320 x 240
#define HOZVAL_TFT_320240       (LCD_XSIZE_TFT_320240 - 1)
#define LINEVAL_TFT_320240      (LCD_YSIZE_TFT_320240 - 1)

/*
 (1) Apply the following parameters to LTV350QV-F05 only!
 (2) LTV350QV-F05 works at SYNC mode, it use three control lines only: VCLK,
     HSYNC, VSYNC signals, the VDEN and LEND is not used. 
 (3) Setup timing parameter:
*/
#define VBPD_320240     (4)     //垂直同步信号的后肩
#define VFPD_320240     (4)     //垂直同步信号的前肩
#define VSPW_320240     (4)     //垂直同步信号的脉宽

#define HBPD_320240     (13)    //水平同步信号的后肩
#define HFPD_320240     (4)     //水平同步信号的前肩
#define HSPW_320240     (18)    //水平同步信号的
#define	EnableModuleClock(m)	(rCLKCON |= (m))
volatile static unsigned short LCD_BUFER[SCR_YSIZE_TFT_320240][SCR_XSIZE_TFT_320240];
/*-----------------------------------------------------------------------------
 *  LCD PWREN端口初始化, no use
 */
static void Lcd_Pwren_Init_On_Off( unsigned char m )
{
    rGPGCON = rGPGCON | (3<<8) ;
    rGPGUP = rGPGUP & ( ~(1<<4) ) ;
    if( m == TRUE )
        rGPGDAT = rGPGDAT | (1<<4) ;
    else
        rGPGDAT = rGPGDAT & ( ~(1<<4) );
}

/*-----------------------------------------------------------------------------
 *  320 x 240 TFT LCD数据和控制端口初始化
 */
void Lcd_Port_Init( void )
{
    //rGPCUP  = 0xffffffff; // Disable Pull-up register
    rGPCUP  = 0x00000000;
    //rGPCCON = 0xaaaa56a9; //Initialize VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND
    rGPCCON = 0xaaaa02a9;  //qjy: for avr config lcd!!!

    //rGPDUP  = 0xffffffff; // Disable Pull-up register
    rGPDUP  = 0x00000000;
    rGPDCON = 0xaaaaaaaa; //Initialize VD[15:8]
    
    Lcd_Pwren_Init_On_Off( TRUE ) ;
}

/*-----------------------------------------------------------------------------
 *  320 x 240 TFT LCD功能模块初始化
 */
void Lcd_Init(void)
{
    // TFT LCD panel, 16bpp TFT, ENVID=off
    rLCDCON1 = (CLKVAL_TFT_320240<<8) | (0<<7) | (3<<5) | (12<<1) | 0;
    rLCDCON2 = (VBPD_320240<<24) | (LINEVAL_TFT_320240<<14) | (VFPD_320240<<6)
             | (VSPW_320240);
    rLCDCON3 = (HBPD_320240<<19) | (HOZVAL_TFT_320240<<8) | (HFPD_320240);
    rLCDCON4 = (13<<8) | (HSPW_320240);
    rLCDCON5 = (1<<11) | (1<<10) | (1<<9) | (1<<8) | (0<<7) | (0<<6)
             | (1<<3)  |(BSWP<<1) | (HWSWP);

    rLCDSADDR1 = (((U32)bmp>>22)<<21) | M5D((U32)bmp>>1);
    rLCDSADDR2 = M5D( ((U32)bmp
               +(SCR_XSIZE_TFT_320240*LCD_YSIZE_TFT_320240*2))>>1 );
    rLCDSADDR3 = (((SCR_XSIZE_TFT_320240-LCD_XSIZE_TFT_320240)/1)<<11)
                |(LCD_XSIZE_TFT_320240/1);
    
    rLCDINTMSK |= (3);    // MASK LCD Sub Interrupt
    rLPCSEL &= (~7) ;     // Disable LPC3480
    rTPAL = 0 ;           // Disable Temp Palette
}

/*-----------------------------------------------------------------------------
 *  LCD视频和控制信号输出或者停止,1开启视频输出
 */
void Lcd_EnvidOnOff(int onoff)
{
    if(onoff == 1)
        rLCDCON1 |= 1;         // ENVID=ON
    else
        rLCDCON1 &= 0x3fffe;   // ENVID Off
}

/*-----------------------------------------------------------------------------
 *  LPC3600 is a timing control logic unit for LTS350Q1-PD1 or LTS350Q1-PD2
 *  no use
 */
static void Lcd_Lpc3600Enable(void)
{
    rLPCSEL &= ~(7);
    rLPCSEL |= (7);    // 320240, Enable LPC3480
}    

/*-----------------------------------------------------------------------------
 *  320 x 240 16Bpp TFT LCD 背光控制使能
 */
static void Lcd_Black_Light_On_Off( unsigned char m )
{
    rGPBCON = rGPBCON & (~(3<<10)) | (1<<10) ;    //GPB5 is output
    rGPBUP  = rGPBUP & (~(1<<5)) ;                 //GPB5 pull-up is enable
    
    if ( m > 0 ) rGPBDAT |= (1<<5) ;      //GPB5 output HIGH
    else rGPBDAT &= (~(1<<5));            //GPB5 output LOW
}    

/*-----------------------------------------------------------------------------
 *  320 x 240 16Bpp TFT LCD 电源控制引脚使能, no use
 */
static void Lcd_PowerEnable(int invpwren, int pwren)
{
    //GPG4 is setted as LCD_PWREN
    rGPGUP = rGPGUP | (1<<4);         // Pull-up disable
    rGPGCON = rGPGCON | (3<<8);       //GPG4=LCD_PWREN
    
    //Enable LCD POWER ENABLE Function
    rLCDCON5 = rLCDCON5 & (~(1<<3)) | (pwren<<3);      // PWREN
    rLCDCON5 = rLCDCON5 & (~(1<<5)) | (invpwren<<5);   // INVPWREN
}
/*-----------------------------------------------------------------------------
 *  320 x 240 TFT LCD全屏填充特定颜色单元或清屏
 */
void Lcd_ClearScr( U16 c)
{
    unsigned int x, y;
    
    for( y = 0 ; y < SCR_YSIZE_TFT_320240 ; y++ )
    {
        for( x = 0 ; x < SCR_XSIZE_TFT_320240 ; x++ )
        {
            LCD_BUFER[y][x] = c ;
        }
    }
}




int Main(int argc, char **argv)
{
	

// 	EnableModuleClock(CLOCK_UART0|CLOCK_TIMER|CLOCK_GPIO|CLOCK_NAND|CLOCK_LCD);   
 // MMU_DisableICache();
 // MMU_DisableDCache();
 Lcd_Port_Init();
   Lcd_Init();
//	Lcd_PowerEnable(0, 1);
  //  Lcd_EnvidOnOff(1);		//turn on vedio
    rLCDCON1 |= 1;         // ENVID=ON
  //  Lcd_ClearScr( (0x00<<11) | (0x3F<<5) | (0x00) );     //clear screen
   while(1)
   {
  
  } 
       
   return 0;
}

⌨️ 快捷键说明

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