28027的SPI问题

2019-08-02 17:07发布

#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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。