DSP CCS12.00 芯片:TMS320F28335 TFTLCD显示屏幕的应用

1.我用的那个DSP 工具箱 是 永辉电子公司,


2.知识点 (无)

别人写好的代码,直接用!!!


3.具体操作

1.首先建立工程;

2.这次代码主要,需要添加一个 cmd 文件  

关于寄存器的cmd文件,包括两部分,一部分是section,这部分是定义的寄存器文件,一部分是map,就是为那些寄存器文件分配地址:

/*
// TI File $Revision: /main/5 $
// Checkin $Date: May 11, 2007   13:43:46 $
//###########################################################################
//
// FILE:    DSP2833x_Headers_nonBIOS.cmd
//
// TITLE:   DSP2833x Peripheral registers linker command file 
//
// DESCRIPTION: 
// 
//          This file is for use in Non-BIOS applications.
//
//          Linker command file to place the peripheral structures 
//          used within the DSP2833x headerfiles into the correct memory
//          mapped locations.
//
//          This version of the file includes the PieVectorTable structure.
//          For BIOS applications, please use the DSP2833x_Headers_BIOS.cmd file
//          which does not include the PieVectorTable structure.
//
//###########################################################################
*/

MEMORY
{
 PAGE 0:    /* Program Memory */

 PAGE 1:    /* Data Memory */
 
   DEV_EMU     : origin = 0x000880, length = 0x000180     /* device emulation registers */
   FLASH_REGS  : origin = 0x000A80, length = 0x000060     /* FLASH registers */
   CSM         : origin = 0x000AE0, length = 0x000010     /* code security module registers */
  
   ADC_MIRROR  : origin = 0x000B00, length = 0x000010     /* ADC Results register mirror */

   XINTF       : origin = 0x000B20, length = 0x000020     /* external interface registers */
   
   CPU_TIMER0  : origin = 0x000C00, length = 0x000008     /* CPU Timer0 registers */
   CPU_TIMER1  : origin = 0x000C08, length = 0x000008     /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/
   CPU_TIMER2  : origin = 0x000C10, length = 0x000008     /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/

   PIE_CTRL    : origin = 0x000CE0, length = 0x000020     /* PIE control registers */
   PIE_VECT    : origin = 0x000D00, length = 0x000100     /* PIE Vector Table */

   DMA         : origin = 0x001000, length = 0x000200     /* DMA Rev 0 registers */

   MCBSPA      : origin = 0x005000, length = 0x000040     /* McBSP-A registers */
   MCBSPB      : origin = 0x005040, length = 0x000040     /* McBSP-B registers */

   ECANA       : origin = 0x006000, length = 0x000040     /* eCAN-A control and status registers */ 
   ECANA_LAM   : origin = 0x006040, length = 0x000040     /* eCAN-A local acceptance masks */
   ECANA_MOTS  : origin = 0x006080, length = 0x000040     /* eCAN-A message object time stamps */
   ECANA_MOTO  : origin = 0x0060C0, length = 0x000040     /* eCAN-A object time-out registers */
   ECANA_MBOX  : origin = 0x006100, length = 0x000100     /* eCAN-A mailboxes */

   ECANB       : origin = 0x006200, length = 0x000040     /* eCAN-B control and status registers */ 
   ECANB_LAM   : origin = 0x006240, length = 0x000040     /* eCAN-B local acceptance masks */
   ECANB_MOTS  : origin = 0x006280, length = 0x000040     /* eCAN-B message object time stamps */
   ECANB_MOTO  : origin = 0x0062C0, length = 0x000040     /* eCAN-B object time-out registers */
   ECANB_MBOX  : origin = 0x006300, length = 0x000100     /* eCAN-B mailboxes */

   EPWM1       : origin = 0x006800, length = 0x000022     /* Enhanced PWM 1 registers */
   EPWM2       : origin = 0x006840, length = 0x000022     /* Enhanced PWM 2 registers */
   EPWM3       : origin = 0x006880, length = 0x000022     /* Enhanced PWM 3 registers */
   EPWM4       : origin = 0x0068C0, length = 0x000022     /* Enhanced PWM 4 registers */
   EPWM5       : origin = 0x006900, length = 0x000022     /* Enhanced PWM 5 registers */
   EPWM6       : origin = 0x006940, length = 0x000022     /* Enhanced PWM 6 registers */

   ECAP1       : origin = 0x006A00, length = 0x000020     /* Enhanced Capture 1 registers */
   ECAP2       : origin = 0x006A20, length = 0x000020     /* Enhanced Capture 2 registers */
   ECAP3       : origin = 0x006A40, length = 0x000020     /* Enhanced Capture 3 registers */
   ECAP4       : origin = 0x006A60, length = 0x000020     /* Enhanced Capture 4 registers */         
   ECAP5       : origin = 0x006A80, length = 0x000020     /* Enhanced Capture 5 registers */         
   ECAP6       : origin = 0x006AA0, length = 0x000020     /* Enhanced Capture 6 registers */         
 
   EQEP1       : origin = 0x006B00, length = 0x000040     /* Enhanced QEP 1 registers */
   EQEP2       : origin = 0x006B40, length = 0x000040     /* Enhanced QEP 2 registers */   

   GPIOCTRL    : origin = 0x006F80, length = 0x000040     /* GPIO control registers */
   GPIODAT     : origin = 0x006FC0, length = 0x000020     /* GPIO data registers */
   GPIOINT     : origin = 0x006FE0, length = 0x000020     /* GPIO interrupt/LPM registers */
                 
   SYSTEM      : origin = 0x007010, length = 0x000020     /* System control registers */
   SPIA        : origin = 0x007040, length = 0x000010     /* SPI-A registers */
   SCIA        : origin = 0x007050, length = 0x000010     /* SCI-A registers */
   XINTRUPT    : origin = 0x007070, length = 0x000010     /* external interrupt registers */

   ADC         : origin = 0x007100, length = 0x000020     /* ADC registers */

   SCIB        : origin = 0x007750, length = 0x000010     /* SCI-B registers */

   SCIC        : origin = 0x007770, length = 0x000010     /* SCI-C registers */
   
   I2CA        : origin = 0x007900, length = 0x000040     /* I2C-A registers */
   
   CSM_PWL     : origin = 0x33FFF8, length = 0x000008     /* Part of FLASHA.  CSM password locations. */
}

 
SECTIONS
{
   PieVectTableFile : > PIE_VECT,   PAGE = 1

/*** Peripheral Frame 0 Register Structures ***/
   DevEmuRegsFile    : > DEV_EMU,     PAGE = 1
   FlashRegsFile     : > FLASH_REGS,  PAGE = 1
   CsmRegsFile       : > CSM,         PAGE = 1
   AdcMirrorFile     : > ADC_MIRROR,  PAGE = 1 
   XintfRegsFile     : > XINTF,       PAGE = 1
   CpuTimer0RegsFile : > CPU_TIMER0,  PAGE = 1
   CpuTimer1RegsFile : > CPU_TIMER1,  PAGE = 1
   CpuTimer2RegsFile : > CPU_TIMER2,  PAGE = 1  
   PieCtrlRegsFile   : > PIE_CTRL,    PAGE = 1     
   DmaRegsFile       : > DMA,         PAGE = 1 

/*** Peripheral Frame 3 Register Structures ***/
   McbspaRegsFile    : > MCBSPA,      PAGE = 1
   McbspbRegsFile    : > MCBSPB,      PAGE = 1

/*** Peripheral Frame 1 Register Structures ***/
   ECanaRegsFile     : > ECANA,       PAGE = 1
   ECanaLAMRegsFile  : > ECANA_LAM    PAGE = 1   
   ECanaMboxesFile   : > ECANA_MBOX   PAGE = 1
   ECanaMOTSRegsFile : > ECANA_MOTS   PAGE = 1
   ECanaMOTORegsFile : > ECANA_MOTO   PAGE = 1
   
   ECanbRegsFile     : > ECANB,       PAGE = 1
   ECanbLAMRegsFile  : > ECANB_LAM    PAGE = 1   
   ECanbMboxesFile   : > ECANB_MBOX   PAGE = 1
   ECanbMOTSRegsFile : > ECANB_MOTS   PAGE = 1
   ECanbMOTORegsFile : > ECANB_MOTO   PAGE = 1
   
   EPwm1RegsFile     : > EPWM1        PAGE = 1   
   EPwm2RegsFile     : > EPWM2        PAGE = 1   
   EPwm3RegsFile     : > EPWM3        PAGE = 1   
   EPwm4RegsFile     : > EPWM4        PAGE = 1   
   EPwm5RegsFile     : > EPWM5        PAGE = 1   
   EPwm6RegsFile     : > EPWM6        PAGE = 1
   
   ECap1RegsFile     : > ECAP1        PAGE = 1   
   ECap2RegsFile     : > ECAP2        PAGE = 1   
   ECap3RegsFile     : > ECAP3        PAGE = 1   
   ECap4RegsFile     : > ECAP4        PAGE = 1
   ECap5RegsFile     : > ECAP5        PAGE = 1   
   ECap6RegsFile     : > ECAP6        PAGE = 1

   EQep1RegsFile     : > EQEP1        PAGE = 1   
   EQep2RegsFile     : > EQEP2        PAGE = 1               

   GpioCtrlRegsFile  : > GPIOCTRL     PAGE = 1
   GpioDataRegsFile  : > GPIODAT      PAGE = 1
   GpioIntRegsFile   : > GPIOINT      PAGE = 1
   
/*** Peripheral Frame 2 Register Structures ***/
   SysCtrlRegsFile   : > SYSTEM,      PAGE = 1
   SpiaRegsFile      : > SPIA,        PAGE = 1
   SciaRegsFile      : > SCIA,        PAGE = 1
   XIntruptRegsFile  : > XINTRUPT,    PAGE = 1
   AdcRegsFile       : > ADC,         PAGE = 1
   ScibRegsFile      : > SCIB,        PAGE = 1
   ScicRegsFile      : > SCIC,        PAGE = 1
   I2caRegsFile      : > I2CA,        PAGE = 1
              
/*** Code Security Module Register Structures ***/
   CsmPwlFile        : > CSM_PWL,     PAGE = 1
}


/*
//===========================================================================
// End of file.
//===========================================================================
*/

3.这次主要用到的函数 

4.这次函数的讲解

第1个参数:这一行开始显示的地方:

第2个参数:从第几行开始显示

第3个参数: uchar  类型的字符串   显示的内容  

第4个参数: 字体的颜色

第5个参数: 背景的颜色


5.显示屏默认只能显示 字母 或者  数字   当我们要显示 汉字需要一些操作

1.首先 我们打开取模软件  ( --  设置参数  (重要))

链接:  LCD/OLED汉字字模提取软件,(HZK16宋体)GB2312中文16*16点阵字库 (23bei.com)

2.我们按固定的形式,添加到 

 

 

3.使搜索汉字的默认 个数增加


 6.主要的代码: (程序功能: 外部中断 控制电机转动方向  , key 1-- key4   控制 num 数值)

main.c

/*
 * main.c
 * TFTLCD字符显示实验
 * 作者 : she001
 * 时间: 2022/10/24
 * 程序功能:外部中断 开始方向 , key1 num全局变量  +1   key2  num全局变量  -1    key3 num全局变量  +10   key 全局变量 -10 (别按 中断2  有 bug)
 */

/* 头文件汇总 */
#include <bsp_includes.h>

#define Key_Read *((Uint16 *)0x4700)
#define KeyValue ((Key_Read)&0x0f)
#define keyon1 GpioDataRegs.GPADAT.bit.GPIO29

// 中断服务子程序在主程序下面时,需要在主程序之前要先申明才能使用.
interrupt void xint1_isr(void);
void delay_loop_2(void);
void delay_loop_1(void);//超短时间的延时

int num=110;//速度的数值
int fangxiang=0;//当fangxiang=0  电机转动的方向为  正向   , fangxiang==1  电机转动的方向为 反向
/********************************************************************************************
 * 在做TFTLCD时,找到对用的头文件,改变宏定义即可,
 * */
#if (TFTLCD_TEST == 1)
uchar class[]= {"班级 :"};
uchar Name[]= {"名字: "};
uchar student_ID[]={"学号:  "};
uchar Str1[] = {"电机转动方向:  "};//方向的提示语句
uchar direction1[]={"正向 "};//正向
uchar direction2[]={"反向 "};//反向
uchar Str2[] = {"速度: "};//速度的提示语句
#endif

void interrupt_init()
{
    EALLOW;  // 修改被保护的寄存器,修改前应添加EALLOW语句
   PieVectTable.XINT1 = &xint1_isr;
   EDIS;   // EDIS的意思是不允许修改被保护的寄存器

   // 在外设中断扩展模块中断使能寄存器中允许XINT1和XINT2: (组1中断4 & 5)
   // 使能CPU中断1(INT1):
      PieCtrlRegs.PIECTRL.bit.ENPIE = 1;          // 使能外设中断扩展PIE模块
      PieCtrlRegs.PIEIER1.bit.INTx4 = 1;          // 使能PIE组1的INT4
      IER |= M_INT1;                              // 使能CPU中断1(INT1)
      EINT;                                       // 开全局中断

      // GPIO29配置为输入引脚通用I/O口,接按键TZ1,TZ2
         EALLOW;
         GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 0;         // 选择为通用I/O口
         GpioCtrlRegs.GPADIR.bit.GPIO29 = 0;          // 方向定义为输入
         GpioCtrlRegs.GPAPUD.bit.GPIO29=0;
         GpioCtrlRegs.GPAQSEL2.bit.GPIO29 = 0;        // 外部中断1(XINT1)与系统时钟SYSCLKOUT同步
         GpioCtrlRegs.GPACTRL.bit.QUALPRD0 = 0x80;   // 每个采样窗口的周期
         EDIS;


 // 通过GPIO外部中断选择寄存器,选择GPIO12为外部中断1,选择GPIO13为外部中断2
    EALLOW;
    GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 0x1D;   // XINT1是GPIO29
    EDIS;

    // 配置外部中断1和2的中断控制寄存器
       XIntruptRegs.XINT1CR.bit.POLARITY = 0;      // 下降沿触发中断

    // 使能外部中断1和外部中断2
       XIntruptRegs.XINT1CR.bit.ENABLE = 1;        // 使能XINT1
}

void TFTLCD(uchar str3)
{
    //TFTLCD实验
  #if (TFTLCD_TEST == 1)
      ILI9325_Init();         //TFT初始化
      //显示字符
      LCD_PutString(37, 20,class, WHITE,RED);//显示班级
      LCD_PutString(37, 50,Name,  WHITE,RED);//显示名字
      LCD_PutString(37, 80,student_ID, RED,WHITE);//显示学号
      LCD_PutString(37, 110,Str1,  BLUE,WHITE);//直流电机的转动方向
      if(fangxiang==0)
      {
          LCD_PutString(150,110,direction1,  RED,WHITE);
      }
      else if(fangxiang==1)
      {
          LCD_PutString(150,110,direction2,  RED,WHITE);
      }
      LCD_PutString(37,140,Str2, WHITE,RED);//速度
      LCD_PutString(110,140,str3, WHITE,RED);//速度的数值
  #endif
}

void bianhua()//改变显示器的 显示数据
{
    int n1;
    int n2;
    int n3;
    if(num<10)
    {
        n1=num;
    }
    else if(num<100)
    {
        uchar str3[5];
        n1=num/10;
        str3[0]=n1+48;
        n2=num%10;
        str3[1]=n2+48;
        TFTLCD(str3);//输出数据
    }
    else if(num<255)
    {
        uchar str3[5];
        n1=num/100;
        str3[0]=n1+48;
        n2=num%100/10;
        str3[1]=n2+48;
        n3=num%10;
        str3[2]=n3+48;
        TFTLCD(str3);//输出数据
    }
}

//函数入口
void main(void)
{
    //TFTLCD 初始化
    InitSysCtrl();
    DINT;
    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;
    InitPieVectTable();
    EINT;
    ERTM;
    InitXintf();
    InitSpiaGpio();
    interrupt_init();//中断初始化
    
    bianhua();//开始的显示

    while (1)
    {
        if(KeyValue==0x0e)//1110  e
       {
            num++;
            bianhua();
       }
       delay_loop_1();//这里加一个延时是为了保证 key   按键按下去的时候能够识别的到
       if(KeyValue==0x0d) //1101  13->d
       {
          num--;
          bianhua();
       }
       delay_loop_1();//这里加一个延时是为了保证 key   按键按下去的时候能够识别的到
       if(KeyValue==0x0b)//1011  11->b
       {
          num=num+10;
          bianhua();
       }
       delay_loop_1();//这里加一个延时是为了保证 key   按键按下去的时候能够识别的到
       if(KeyValue==0x07)//0111  7
       {
          num=num-10;
          bianhua();
       }
    }
}




interrupt void xint1_isr(void)
{
    Uint32 i;
    for(i=0;i<1000000;i++);    //键盘消抖动
    while(keyon1==0);
    if(fangxiang==0)
    {
        fangxiang=1;
    }
    else if(fangxiang==1)
    {
        fangxiang=0;
    }
    bianhua();
    // 应答寄存器的位1清0,以响应同组内其他中断;
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}


void delay_loop_2()
{
    Uint32      i;
    Uint32      j;

    for(i=0;i<40;i++)
    {
        for (j = 0; j < 100000; j++);
    }

}


void delay_loop_1()//超短时间的延时
{
        Uint32      i;
        Uint32      j;

        for(i=0;i<20;i++)
        {
            for (j = 0; j < 10000; j++);
        }
}


7.代码打包到资源里面了 (参考资源)(不是这篇文章的代码,但是包括这篇文章的所有资源) 

包括: bsp_GB1616.h  和一些关键文件

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值