打印
[DSP编程]

CPLD扩展12864的编程问题

[复制链接]
1214|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wangch_sh|  楼主 | 2014-8-7 16:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我们公司有一块DSP5509开发板。因为5509通用IO口少,所以用CPLD扩展IO口,扩展后
接了个12864.可是编程与单片机不同。我看不懂,贴出部分代码
。。。。。。。。。。。。。
#define CESECT1 0x200000
#define CESECT2 0x400000
#define CESECT3 0x600000

。。。。。。。。。。。。。。。。。
addr =  (int *)CESECT2;
    LCDCOM =  (int *)CESECT3;
        LCDOUT =  (int *)CESECT3;
        LCDIN  =  (int *)CESECT2;

。。。。。。。。。。。。。。。。。。。。。

/*----------------LCD忙检测----------------*/
void chk_busy()
{
        unsigned int temp;
        *addr = 0x00ef;
        *LCDCOM = 0x0005;  //RS=0(comm), RW=1(read), RST=1
        temp = 0x0080;
        while((temp&0x0080)!=0)
        {
                *LCDCOM = 0x000d;  //EN=1
                *addr = 0x00f7;
                delay(10);
                temp = *LCDIN;
                *addr = 0x00ef;
                *LCDCOM = 0x0005;  //EN=0
        }
        *addr = 0x00ff;
        //while((LCD_DAT&0x80)!=0);
}

/*------------------写LCD------------------*/
void  wr_lcd(unsigned char dat_comm, unsigned int content)
{
        chk_busy();
        if(dat_comm)
        {
                *addr = 0x00ef;
                *LCDCOM = 0x0003;  //RS=1(data), RW=0(write), RST=1
                *addr = 0x00d7;
                *LCDOUT = content;
                *addr = 0x00cf;
                *LCDCOM = 0x000b;  //EN=1
                delay(30);
                *LCDCOM = 0x0003;  //EN=0
                *addr = 0x00ff;
        }
        else
        {
                *addr = 0x00ef;
                *LCDCOM = 0x0001;  //RS=0(data), RW=0(write), RST=1
                *addr = 0x00d7;
                *LCDOUT = content;
                *addr = 0x00cf;
                *LCDCOM = 0x0009;  //EN=1
                delay(30);
                *LCDCOM = 0x0001;  //EN=0
                *addr = 0x00ff;
        }
}


/*----------------清DDRAM------------------*/
void clrram (void)
{
    wr_lcd (comm,0x30);
    wr_lcd (comm,0x01);
}


/*------------------初始化-----------------*/
void  lcd_init(void)
{
    *addr = 0x00ef;
        delay(10);
        *LCDCOM = 0x0000;         //RESET
        delay(1000);
        *LCDCOM = 1;
    wr_lcd (comm,0x30);  /*30---基本指令动作*/  
    wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
    wr_lcd (comm,0x06);  /*光标的移动方向*/
    wr_lcd (comm,0x0c);  /*开显示,关游标*/               
}
这里的addr,LCDCOM,LCDOUT,LCDIN都是什么意思啊?谢谢!

相关帖子

沙发
zhangmangui| | 2014-8-7 23:12 | 只看该作者
这就是映射   0x200000是CE1  0x400000是CE2    0x600000是CE3
你先看看5509的存储区   其实地址肯定是这些  注意了这个分字地址和字节地址
还有你应该看看cpld里面的代码怎么写的   
比如说你的cpld被映射到了CE2和CE3两个区    DSP里面对CE2基地址+偏移地址发数据
这个偏移地址是12864的LCDCOM    数据过来后cpld根据读到的地址就会译码到LCDCOM的相关指令
说的不是很清楚  其实很简单   主要是你要看看cpld里面的译码怎么写的

使用特权

评论回复
板凳
wangch_sh|  楼主 | 2014-8-8 08:34 | 只看该作者
谢谢!我不懂CPLD。请问版主,搞5509必须要学CPLD吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:为江山踏坏了乌骓马,为社稷拉断了宝雕弓。

318

主题

2817

帖子

5

粉丝