2470|4

63

帖子

1

TA的资源

一粒金砂(中级)

楼主
 

28027的SPI问题,求高手指点 [复制链接]

本帖最后由 woshilee 于 2014-4-15 16:40 编辑

#include "DSP28x_Project.h"
#define CS GpioDataRegs.GPADAT.bit.GPIO19

void SPI_init(void);
int get;
char table0[]="北京邮电大学";


void Sendbyte(unsigned char bytes)
{
            while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG);      //上一字节完全移除时该位置为0,就是当发送缓冲器中没有数据时为0,有数据时为1
            SpiaRegs.SPITXBUF=(bytes<<8);
            get=SpiaRegs.SPIRXBUF;
            //DELAY_US(100);
}

void write_com(unsigned char com)
{
        //CS=1;DELAY_US(2);
        Sendbyte(0xf8);DELAY_US(10);
        Sendbyte(com&0xf0);DELAY_US(10);
        Sendbyte((com&0x0f)<<4);DELAY_US(10);
        //CS=0;DELAY_US(2);
}
void write_data(unsigned char dat)
{
        //CS=1;DELAY_US(2);
        Sendbyte(0xfa);
        Sendbyte(dat&0xf0);
        Sendbyte((dat&0x0f)<<4);
        //CS=0;DELAY_US(2);
}
void LCD_Init(void)
{
        write_com(0x01);
        DELAY_US(10);
        write_com(0x30);
        DELAY_US(10);
        write_com(0x0c);
        DELAY_US(10);
        write_com(0x06);
        DELAY_US(10);
        write_com(0x02);
        DELAY_US(1000);
}




void main(void)
        {
           int n;
           InitSysCtrl();                      // 系统初始化函数
           InitSpiaGpio();

           DINT;                               // 关闭CPU中断
           InitPieCtrl();                      // PIE中断控制
           IER = 0x0000;                       // 关闭中断使能
           IFR = 0x0000;                       // 清除中断标志位
           InitPieVectTable();
           EINT;
           ERTM;
           SPI_init();
          // SpiaRegs.SPITXBUF=0x00;这是关键,上电后,如果不先发送一个数据的话,发送第一个数据就没有效果,我发的是清屏指令,只有先发一个伪数据才能够清屏
           //MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
           while(1)
            {
                   /*****************第一行*******************/
                   LCD_Init();
                   write_com(0x80);
                   write_data(0x0b);
                   DELAY_US(1000);
                    write_data(0x0b);
                   for(n=0;n<12;n++)
                {
                      write_data(table0[n]);
                      DELAY_US(10);
                }
               write_data(0x0b);
                    write_data(0x0b);
                   /*****************第二行********************/
                    DELAY_US(1000000);
                    LCD_Init();
                    write_com(0x90);
                    write_data(0x0b);
                    write_data(0x0b);
                    for(n=0;n<12;n++)
                      {
                               write_data(table0[n]);
                               DELAY_US(10);
                       }
                    write_data(0x0b);
                    write_data(0x0b);
                    DELAY_US(1000000);
                   /*****************第三行********************/
                    LCD_Init();
                    write_com(0x88);
                    write_data(0x0b);
                    write_data(0x0b);
                    for(n=0;n<12;n++)
                 {
                               write_data(table0[n]);
                               DELAY_US(10);
                 }
                    write_data(0x0b);
                     write_data(0x0b);
               DELAY_US(1000000);
               /*****************第四行********************/
                     LCD_Init();
                    write_com(0x98);
                    write_data(0x0b);
                    write_data(0x0b);
                    for(n=0;n<12;n++)
                     {
                      write_data(table0[n]);
                          DELAY_US(10);
                     }
                   write_data(0x0b);
                   write_data(0x0b);
                   DELAY_US(1000000);
          }
          // while(1);
        }


void SPI_init()  //SPI的初始化函数
{
   EALLOW;
   SpiaRegs.SPICCR.bit.SPISWRESET=0; // Reset SPI
   SpiaRegs.SPICCR.all=0x0047;       //8-bit character, disable Loopback mode,Rising edge output
   SpiaRegs.SPICTL.all=0x0006;       //Interrupt enabled, Master,no delay
   SpiaRegs.SPISTS.all=0x0000;       //clear all the status
   SpiaRegs.SPIBRR=0x0063;           // Baud rate
   SpiaRegs.SPIPRI.all=0x0000;
   SpiaRegs.SPICCR.bit.SPISWRESET=1;  // Enable SPI
   EDIS;
}
















最新回复

什么液晶,每行都要初始化 LCD_Init();  详情 回复 发表于 2014-4-15 21:09
 
点赞 关注

回复
举报

2856

帖子

260

TA的资源

五彩晶圆(高级)

沙发
 
在你注释的地方加个延时看看效果

点评

加延时也没有效果,我从10us试到1s都没有效果  详情 回复 发表于 2014-4-15 20:19
 
 

回复

63

帖子

1

TA的资源

一粒金砂(中级)

板凳
 
ltbytyn 发表于 2014-4-15 18:40
在你注释的地方加个延时看看效果

加延时也没有效果,我从10us试到1s都没有效果

 
 
 

回复

2856

帖子

260

TA的资源

五彩晶圆(高级)

4
 
什么液晶,每行都要初始化 LCD_Init();

点评

用的12864,不是每行都要,后边行只用一个清楚DDRAM就行了,我写多了,后边每条指令都能执行,就上电后SPI发的第一个数据没用  详情 回复 发表于 2014-4-15 21:31
 
 
 

回复

63

帖子

1

TA的资源

一粒金砂(中级)

5
 
ltbytyn 发表于 2014-4-15 21:09
什么液晶,每行都要初始化 LCD_Init();

用的12864,不是每行都要,后边行只用一个清楚DDRAM就行了,我写多了,后边每条指令都能执行,就上电后SPI发的第一个数据没用
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表