野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 18687|回复: 2

还可以问K60的问题么?有关FlexBus的

[复制链接]
发表于 2014-10-15 17:18:53 | 显示全部楼层 |阅读模式
野火给的FlexBus驱动ILI9341很好用,但是手上有其他主控的LCD,这些LCD我都有用IO口模拟协议的代码。
下面是其中一种方式
void Write_Cmd(unsigned char DH,unsigned char DL)
{
  CS=0;
  RS=0;
  GPIO_SET_NBIT(8,PTA6,DH);
  RW=0;
  RW=1;
  GPIO_SET_NBIT(8,PTA6,DL);
  RW=0;
  RW=1;
  CS=1;
}
void Write_Data(unsigned char DH,unsigned char DL)
{
  CS=0;
  RS=1;
  GPIO_SET_NBIT(8,PTA6,DH);
  RW=0;
  RW=1;
  GPIO_SET_NBIT(8,PTA6,DL);
  RW=0;
  RW=1;
  CS=1;
}

请教一下,如何修改之前ILI9341的FlexBus配置来满足上面LCD的要求呢,多谢。

下面是原ILI9341的代码
MK60_flexbus.c
#include "common.h"
#include "MK60_flexbus.h"

/*!
*  @brief      flexbus初始化为8080协议
*  @since      v5.0
*/
void flexbus_8080_init()
{
    //flexbus 本身不直接支持 8080协议,而是支持 6800协议
    //我们可以配置 cmd 与 data 数据的地址不同,从而通过地址线来区分命令和数据


    SIM_SOPT2 |= SIM_SOPT2_FBSL(3);             //FlexBus安全水平:允许指令和数据访问
    SIM_SCGC7 |= SIM_SCGC7_FLEXBUS_MASK;        //使能时钟


    //配置数据管脚复用
    port_init(PTD6  , ALT5 | HDS);              //PTD6 复用为 fb_ad[0] ,配置为 输出高驱动能力
    port_init(PTD5  , ALT5 | HDS);              //PTD5 复用为 fb_ad[1] ,配置为 输出高驱动能力
    port_init(PTD4  , ALT5 | HDS);              //PTD4 复用为 fb_ad[2] ,配置为 输出高驱动能力
    port_init(PTD3  , ALT5 | HDS);              //PTD3 复用为 fb_ad[3] ,配置为 输出高驱动能力
    port_init(PTD2  , ALT5 | HDS);              //PTD2 复用为 fb_ad[4] ,配置为 输出高驱动能力
    port_init(PTC10 , ALT5 | HDS);              //PTC10复用为 fb_ad[5] ,配置为 输出高驱动能力
    port_init(PTC9  , ALT5 | HDS);              //PTC9 复用为 fb_ad[6] ,配置为 输出高驱动能力
    port_init(PTC8  , ALT5 | HDS);              //PTC8 复用为 fb_ad[7] ,配置为 输出高驱动能力
    port_init(PTC7  , ALT5 | HDS);              //PTC7 复用为 fb_ad[8] ,配置为 输出高驱动能力
    port_init(PTC6  , ALT5 | HDS);              //PTC6 复用为 fb_ad[9] ,配置为 输出高驱动能力
    port_init(PTC5  , ALT5 | HDS);              //PTC5 复用为 fb_ad[10],配置为 输出高驱动能力
    port_init(PTC4  , ALT5 | HDS);              //PTC4 复用为 fb_ad[11],配置为 输出高驱动能力
    port_init(PTC2  , ALT5 | HDS);              //PTC2 复用为 fb_ad[12],配置为 输出高驱动能力
    port_init(PTC1  , ALT5 | HDS);              //PTC1 复用为 fb_ad[13],配置为 输出高驱动能力
    port_init(PTC0  , ALT5 | HDS);              //PTC0 复用为 fb_ad[14],配置为 输出高驱动能力
    port_init(PTB18 , ALT5 | HDS);              //PTB18复用为 fb_ad[15],配置为 输出高驱动能力
    //配置控制管脚复用
    //8080总线,即Intel总线,需要四根线控制线:RD写使能, WR读使能, RS数据/指令选择, CS片选
    port_init(PTB19 , ALT5 | HDS);              //PTB19复用为 fb_oe_b  ,配置为 输出高驱动能力 , fb_oe_b 时序符合 8080 总线的 RD写使能
    port_init(PTD1  , ALT5 | HDS);              //PTD1 复用为 fb_cs0_b ,配置为 输出高驱动能力 , fb_cs0_b时序符合 8080 总线的 CS片选
    port_init(PTC11 , ALT5 | HDS);              //PTC11复用为 fb_r/w   ,配置为 输出高驱动能力 , fb_r/w  时序符合 8080 总线的 WR读使能


    //目前还缺 8080 总线的 RS数据/指令选择线
    //flexbus可配置成两块地址不连续的块(高16位地址不相同),从而利用地址线来符合 8080 总线的 RS数据/指令选择线
    //高16位的地址,FB_BA 我们配置为 0x6000 ,因而可选择的 地址线有 fb_ad[16] ~ fb_ad[28]
    //FB_BAM配置为 0x0800 ,即选择 fb_ad[27] 作为 RS 。(0x0800 0000 == 1<<27 )
    // RS == 1 时 传输数据,RS == 0 时传输命令
    //因而 0x6000 0000 为 命令地址 , 0x6800 0000 为数据端口
    port_init(PTC12 , ALT5 | HDS);              //PTC12复用为 fb_ad[27],配置为 输出高驱动能力 , fb_ad[27]作为8080 总线的 RS数据/指令选择线


    FB_CSAR(0) = FB_CSAR_BA(FB_BA);             // 基地址 Base address
    FB_CSMR(0) =  ( 0
                    | FB_CSMR_BAM(FB_BAM)       // BAM = 0x0800 ,基地地址掩码 为 0x,800 FFFF ,即 片选有效的地址为 基地址 ~ (基地址 + 基地地址掩码) ,0x0800 0000 对应与 FB_AD27
                    | FB_CSMR_V_MASK            // 使用片选信号 FB_CS0
                  );
    FB_CSCR(0) =    FB_CSCR_BLS_MASK            //右对齐
                    | FB_CSCR_PS(2)             //16Byte数据
                    | FB_CSCR_AA_MASK           // 自动应答
                    ;
}

MK60_flexbus.h
#define FB_BA       0x6000      //基地址     = FB_BA * 0x10000 ,用于区分 不同的片选信号
                                //参考 System memory map 的说明, External Memory 的范围为 0x6000_0000 ~ 0x9FFF_FFFF
                                //即 FB_BA 的取值范围为 0x6000 ~ 0x9FFF
#define FB_BAM      0x0800      //基地址掩膜 = (FB_BA + FB_BAM)* 0x10000 ,用于区分 同一个CS控制的两个不连续的块的地址
#define FB_8080_CMD     (*(volatile uint16 *)(FB_BA * 0x10000))
#define FB_8080_DATA    (*(volatile uint16 *)((FB_BA + FB_BAM )* 0x10000))
extern void flexbus_8080_init();


再次先谢谢了,真的是穷途末路了才问的。。
回复

使用道具 举报

 楼主| 发表于 2014-10-17 10:34:37 | 显示全部楼层
顶一下,唉
回复 支持 反对

使用道具 举报

发表于 2014-10-17 10:35:37 | 显示全部楼层
ExiBQ 发表于 2014-10-17 10:34
顶一下,唉

楼主去这里问哈 http://www.vcan123.com/forum.php
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 16:30 , Processed in 0.029269 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表