[Kinetis] K60 flexbus 驱动RA8875 LCD

[复制链接]
2736|10
 楼主| jiekouliu 发表于 2015-9-27 10:04 | 显示全部楼层 |阅读模式
本帖最后由 jiekouliu 于 2015-9-27 10:10 编辑

之前成功调试过用K60 FLEXBUS驱动5.6寸的触摸屏,但是最近调试RA8875 7寸触摸屏,用IO模拟可以驱动,但是用FLEXBUS就是不行,都是8080模式,除了数据和命令脚不一样,其他都一样,有谁驱动过RA8875,能不能分享一下
我的初始化程序:

//其他的LCD控制器都是写数据时RS脚为高,写命令时RS脚为低,而RA8875刚好相反
//所以把LCD_SMD_ADDRESS和LCD_DATA_ADDRESS值反过来了,不知道对不对
//我在RS脚接了反相器,并把 LCD_CMD_ADDRESS定义为0x60000000,把LCD_DATA_ADDRESS
//定义为0x60010000也不行
#define LCD_CMD_ADDRESS     0x60010000
#define LCD_DATA_ADDRESS    0x60000000


static void WriteReg(unsigned char regAddr)
{
   unsigned short temp = 0xff00;
   temp |= regAddr;

    *((unsigned short *)LCD_CMD_ADDRESS) = temp;
}
static void WriteCommand(unsigned char mCommand)
{
    unsigned short temp = 0xff00;
    temp |= mCommand;

    *((unsigned short *)LCD_DATA_ADDRESS) = temp;
}


static void WriteData(unsigned short data)
{
    *((unsigned short *)LCD_DATA_ADDRESS) = data;
}
static void Flexbus_Init(void)
{
    SIM_CLKDIV1 |= SIM_CLKDIV1_OUTDIV3(0x2);//时钟分频96M/2=48M
    SIM_SOPT2 |= SIM_SOPT2_FBSL(3);
    SIM_SCGC7 |= SIM_SCGC7_FLEXBUS_MASK;     //使能flexbus

    FB_CSMR0 = 0;
    FB_CSAR0 = LCD_CMD_ADDRESS;              //设置基地址
    FB_CSCR0 = FB_CSCR_PS(2) | FB_CSCR_AA_MASK | FB_CSCR_BLS_MASK;      //16位数据宽度,右对齐,使能应答
    FB_CSCR0 |= FB_CSCR_WS(1) | FB_CSCR_RDAH(0) | FB_CSCR_WRAH(0);   //应答时间
    FB_CSMR0 = FB_CSMR_BAM(0x1) | FB_CSMR_V_MASK ; //2^(1+17)=128k

    //DATA
    PORTD_PCR6 = PORT_PCR_MUX(5);//DB0
    PORTD_PCR5 = PORT_PCR_MUX(5);//DB1
    PORTD_PCR4 = PORT_PCR_MUX(5);//DB2
    PORTD_PCR3 = PORT_PCR_MUX(5);//DB3
    PORTD_PCR2 = PORT_PCR_MUX(5);//DB4

    PORTC_PCR10 = PORT_PCR_MUX(5);//DB5
    PORTC_PCR9 = PORT_PCR_MUX(5);//DB6
    PORTC_PCR8 = PORT_PCR_MUX(5);//DB7
    PORTC_PCR7 = PORT_PCR_MUX(5);//DB8
    PORTC_PCR6 = PORT_PCR_MUX(5);//DB9
    PORTC_PCR5 = PORT_PCR_MUX(5);//DB10
    PORTC_PCR4 = PORT_PCR_MUX(5);//DB11

    PORTC_PCR2 = PORT_PCR_MUX(5);//DB12
    PORTC_PCR1 = PORT_PCR_MUX(5);//DB13
    PORTC_PCR0 = PORT_PCR_MUX(5);//DB14

    PORTB_PCR18 = PORT_PCR_MUX(5);//DB15

    //CS
    PORTD_PCR1 = PORT_PCR_MUX(5);
    //WR
    PORTC_PCR11 = PORT_PCR_MUX(5);
    //RD
    PORTB_PCR19 = PORT_PCR_MUX(5);
    //D/C
    PORTB_PCR17 = PORT_PCR_MUX(5);
}



Mancherstun 发表于 2015-9-27 14:35 | 显示全部楼层
  1. //其他的LCD控制器都是写数据时RS脚为高,写命令时RS脚为低,而RA8875刚好相反
  2. //所以把LCD_SMD_ADDRESS和LCD_DATA_ADDRESS值反过来了,不知道对不对
  3. //我在RS脚接了反相器,并把 LCD_CMD_ADDRESS定义为0x60000000,把LCD_DATA_ADDRESS
  4. //定义为0x60010000也不行
  5. #define LCD_CMD_ADDRESS     0x60010000
  6. #define LCD_DATA_ADDRESS    0x60000000


  7. static void WriteReg(unsigned char regAddr)
  8. {
  9.    unsigned short temp = 0xff00;
  10.    temp |= regAddr;

  11.     *((unsigned short *)LCD_CMD_ADDRESS) = temp;
  12. }
  13. static void WriteCommand(unsigned char mCommand)
  14. {
  15.     unsigned short temp = 0xff00;
  16.     temp |= mCommand;

  17.     *((unsigned short *)LCD_DATA_ADDRESS) = temp;
  18. }


  19. static void WriteData(unsigned short data)
  20. {
  21.     *((unsigned short *)LCD_DATA_ADDRESS) = data;
  22. }
  23. static void Flexbus_Init(void)
  24. {
  25.     SIM_CLKDIV1 |= SIM_CLKDIV1_OUTDIV3(0x2);//时钟分频96M/2=48M
  26.     SIM_SOPT2 |= SIM_SOPT2_FBSL(3);
  27.     SIM_SCGC7 |= SIM_SCGC7_FLEXBUS_MASK;     //使能flexbus

  28.     FB_CSMR0 = 0;
  29.     FB_CSAR0 = LCD_CMD_ADDRESS;              //设置基地址
  30.     FB_CSCR0 = FB_CSCR_PS(2) | FB_CSCR_AA_MASK | FB_CSCR_BLS_MASK;      //16位数据宽度,右对齐,使能应答
  31.     FB_CSCR0 |= FB_CSCR_WS(1) | FB_CSCR_RDAH(0) | FB_CSCR_WRAH(0);   //应答时间
  32.     FB_CSMR0 = FB_CSMR_BAM(0x1) | FB_CSMR_V_MASK ; //2^(1+17)=128k

  33.     //DATA
  34.     PORTD_PCR6 = PORT_PCR_MUX(5);//DB0
  35.     PORTD_PCR5 = PORT_PCR_MUX(5);//DB1
  36.     PORTD_PCR4 = PORT_PCR_MUX(5);//DB2
  37.     PORTD_PCR3 = PORT_PCR_MUX(5);//DB3
  38.     PORTD_PCR2 = PORT_PCR_MUX(5);//DB4

  39.     PORTC_PCR10 = PORT_PCR_MUX(5);//DB5
  40.     PORTC_PCR9 = PORT_PCR_MUX(5);//DB6
  41.     PORTC_PCR8 = PORT_PCR_MUX(5);//DB7
  42.     PORTC_PCR7 = PORT_PCR_MUX(5);//DB8
  43.     PORTC_PCR6 = PORT_PCR_MUX(5);//DB9
  44.     PORTC_PCR5 = PORT_PCR_MUX(5);//DB10
  45.     PORTC_PCR4 = PORT_PCR_MUX(5);//DB11

  46.     PORTC_PCR2 = PORT_PCR_MUX(5);//DB12
  47.     PORTC_PCR1 = PORT_PCR_MUX(5);//DB13
  48.     PORTC_PCR0 = PORT_PCR_MUX(5);//DB14

  49.     PORTB_PCR18 = PORT_PCR_MUX(5);//DB15

  50.     //CS
  51.     PORTD_PCR1 = PORT_PCR_MUX(5);
  52.     //WR
  53.     PORTC_PCR11 = PORT_PCR_MUX(5);
  54.     //RD
  55.     PORTB_PCR19 = PORT_PCR_MUX(5);
  56.     //D/C
  57.     PORTB_PCR17 = PORT_PCR_MUX(5);
  58. }

楼主的这个程序遇到了什么问题
 楼主| jiekouliu 发表于 2015-9-27 19:06 | 显示全部楼层
Mancherstun 发表于 2015-9-27 14:35
楼主的这个程序遇到了什么问题

问题就是驱动不了LCD,用IO就可以,不知道是不是配置有问题?
李香兰 发表于 2015-9-27 21:03 | 显示全部楼层
jiekouliu 发表于 2015-9-27 19:06
问题就是驱动不了LCD,用IO就可以,不知道是不是配置有问题?

用IO模拟的没有问题,用硬件的驱动就有问题?
 楼主| jiekouliu 发表于 2015-9-27 22:26 | 显示全部楼层
李香兰 发表于 2015-9-27 21:03
用IO模拟的没有问题,用硬件的驱动就有问题?

用IO模拟时序能驱动,用程序中flexbus驱动不了
风的样子 发表于 2015-9-28 07:39 | 显示全部楼层
是不是什么地方给设置错了呢
晓枫VS枯叶 发表于 2015-9-28 16:43 | 显示全部楼层
我用K64驱动NT35510也不能行,不知道楼主解决了没?
 楼主| jiekouliu 发表于 2015-9-28 18:11 | 显示全部楼层
晓枫VS枯叶 发表于 2015-9-28 16:43
我用K64驱动NT35510也不能行,不知道楼主解决了没?

没解决,不知道是什么问题
cowboy2014 发表于 2015-9-29 09:22 | 显示全部楼层
FLEXBUS的时序是不是写的有问题呢?
huangzhengji 发表于 2016-3-18 13:28 | 显示全部楼层
K60 flexbus 驱动RA8875 LCD,请问楼主,搞定了吗??
 楼主| jiekouliu 发表于 2016-4-6 15:32 | 显示全部楼层
huangzhengji 发表于 2016-3-18 13:28
K60 flexbus 驱动RA8875 LCD,请问楼主,搞定了吗??

没有彻底搞定,把CS和WR设置为普通IO,其他脚用的flexbus,暂时这么用的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

30

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部