wangch_sh 发表于 2014-8-7 16:23

CPLD扩展12864的编程问题

我们公司有一块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------------------*/
voidwr_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);
}


/*------------------初始化-----------------*/
voidlcd_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是CE10x400000是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吗?
页: [1]
查看完整版本: CPLD扩展12864的编程问题