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 和一些关键文件