void RA8875_Init(void)
{
RCC->AHBENR|=1<<8; //使能FSMC时钟
RCC->APB2ENR|=1<<3; //使能PORTB时钟
RCC->APB2ENR|=1<<5; //使能PORTD时钟
RCC->APB2ENR|=1<<6; //使能PORTE时钟
RCC->APB2ENR|=1<<7; //使能PORTF时钟
RCC->APB2ENR|=1<<8; //使能PORTG时钟
RCC->APB2ENR|=1<<0; //使能AFIO时钟
GPIOB->CRL&=0XFFFFFFF0; //PB0 推挽输出 背光 这个作为RST
GPIOB->CRL|=0X00000003;
//PORTD复用推挽输出
GPIOF->CRH&=0X0FFFFFFF; //使用PF15
GPIOF->CRH|=0XB0000000;
GPIOD->CRH&=0X00FFF000; //8 9 10 14 15
GPIOD->CRH|=0XBB000BBB;
GPIOD->CRL&=0XFF00FF00; // 0 1 4 5
GPIOD->CRL|=0X00BB00BB;
//PORTE复用推挽输出
GPIOE->CRH&=0X00000000; //7 8 9 10 11 12 13 14 15
GPIOE->CRH|=0XBBBBBBBB;
GPIOE->CRL&=0X0FFFFFFF; //7
GPIOE->CRL|=0XB0000000;
//PORTG12复用推挽输出 作为片选信号
GPIOG->CRH&=0XFFF0FFFF; // 12
GPIOG->CRH|=0X000B0000;
GPIOG->CRL&=0XFFFFFFF0;//PG0->RS //0
GPIOG->CRL|=0X0000000B;
//寄存器清零
//bank1有NE1~4,每一个有一个BCR+TCR,所以总共八个寄存器。
//这里我们使用NE4 ,也就对应BTCR[6],[7]。
FSMC_Bank1->BTCR[6]=0X00000000;
FSMC_Bank1->BTCR[7]=0X00000000;
FSMC_Bank1E->BWTR[6]=0X00000000;
//操作BCR寄存器 使用异步模式
FSMC_Bank1->BTCR[6]|=1<<12;//存储器写使能
FSMC_Bank1->BTCR[6]|=1<<4; //存储器数据宽度为16bit
//操作BTR寄存器
//3个HCLK(HCLK=72M)因为液晶驱动IC的写信号脉宽,最少也得50ns。72M/3=24M=42ns,已经超频了。
FSMC_Bank1->BTCR[7]|=1<<9; //数据保存时间为3个HCLK
//闪存写时序寄存器
FSMC_Bank1E->BWTR[6]=0x0FFFFFFF;//默认值
//使能BANK4(PC卡设备)
FSMC_Bank1->BTCR[6]|=1<<0;
DelayMs(50); // delay 50 ms
// LCD_WriteReg(0x0000,0x0001);
DelayMs(50); // delay 50 ms
//因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
FSMC_Bank1->BTCR[7]|=0XF<<8; //数据保存时间为16个HCLK
FSMC_Bank1->BTCR[7]|=1<<28; //用B模式
// DeviceCode = LCD_ReadReg(0x0000);
FSMC_Bank1->BTCR[7]&=~(0XF<<8); //数据保存时间为0
//因为液晶驱动IC的写信号脉宽,最少也得50ns。72M/3=24M=42ns,已经超频了。
// FSMC_Bank1->BTCR[7]|=3<<8; //数据保存时间为3个HCLK
FSMC_Bank1->BTCR[7]&= 0xFFFF00FF;
FSMC_Bank1->BTCR[7]|= 0x00000100;
RST=1;
DelayMs(2); //上电延时100ms
RST=0;
DelayMs(10);
RST=1;
DelayMs(10); //在上升沿的10才进行其他动作
LCD_OneCommand(PLLC1,0x05); //
DelayMs(10);
LCD_OneCommand(PLLC2,0x02); // system clock = 25MHz
DelayMs(10); //更改PLL参数后要延时1ms
LCD_OneCommand(PWRR,0x0001);
DelayMs(10);
LCD_OneCommand(PWRR,0x0000); //完成复位并关掉显示
DelayMs(10); //延时10ms
LCD_OneCommand(SYSR,0x000F); //设置色彩深度、选择16bit的数据接口
DelayMs(1);
LCD_OneCommand(SFCLR,0x0000); //Serail Flash/ROM频率设置,此处将Serial Flash/ROM频率设置与system clock一样
DelayUs(1);
LCD_OneCommand(P1CR,0x85);
LCD_OneCommand(P1DCR,0x0010); //频率约为305Hz,占空比为50%
DelayMs(1);
LCD_OneCommand(PCSR,0x0003);
LCD_OneCommand(HDWR,79); //水平方向的像素点= (79+1)*8
LCD_OneCommand(HNDFTR,0x0005); //水平非显示的像素(微调)
LCD_OneCommand(HNDR,0x000F); //水平非显示的像素
LCD_OneCommand(HSTR,0x0001); //水平同步信号起始宽度
LCD_OneCommand(HPWR,0x0000); //水平同步信号脉冲宽度
LCD_OneCommand(VDHR0,0x00DF);
LCD_OneCommand(VDHR1,0x0001); //以上两句为设置垂直方向的像素
LCD_OneCommand(VNDR0,0x000A);
LCD_OneCommand(VNDR1,0x0000); //以上两句为设置垂直非显示的像素
LCD_OneCommand(VSTR0,0x001F);
LCD_OneCommand(VSTR1,0x0000); //以上两句为设置垂直同步信号起始像素
LCD_OneCommand(VPWR, 0x0001); //设置垂直同步脉冲信号宽度
LCD_OneCommand(DPCR,0x0000); //设置单图层、扫描方向等
LCD_OneCommand(MWCR0,0x0000); //选择绘图模式、光标显示
LCD_OneCommand(MWCR1,0x0000);
}