DSP

DSP实验学习一

2019-07-13 15:04发布

DSP

标签:笔记

文章目录

实验一:GPIO控制

1、GPXMUX1/2(功能选择寄存器)

GPXMUXn图片 每组IO一般有32个IO口可以配置,GPXMUX1对应X组低16位IO口,GPXMUX2对应X组高个IO口。 MUX 功能 00 普通IO口 01 第一种外设功能 10 第二种外设功能(若有第二种外设功能) 11 第三种外设功能(若有第三种外设功能)

2、GPXDIR(方向控制寄存器)

GPXDIR图片 GPXDIR 功能 0 配置GPIO引脚为输入(默认配置) 1 配置GPIO引脚为输出

3、GPXSET(置位寄存器)

GPXSET GPXSET 功能 0 无影响 1 若置GPIO引脚为输出,写1配置GPIO引脚为高电平

4、GPXCLEAR(强制拉低寄存器)

GPXCLEAR GPXCLEAR 功能 0 无影响 1 若置GPIO引脚为输出,写1配置GPIO引脚为低电平

5、GPXTOGGLE(输出状态翻转寄存器)

GPXTOGGLE GPXTOGGLE 功能 0 配置GPIO引脚为输入(默认配置) 1 若置GPIO引脚为输出,写1配置GPIO引脚进行翻转

5、GPXDAT(数据寄存器)

GPXDAT GPXDAT 功能 0 写0:强制为0(状态必须配置GPIO为输出) 1 写1:强制为1(状态必须配置GPIO为输出)

实验二:外部中断控制

代码

#include"DSP28x_Project.h" //蜂鸣器为GPIO53,利用外部中断控制蜂鸣器响和停止 //1、利用外部中断1或2控制(GPIOA) //2、利用外部中断3-7控制(GPIOB) interrupt void xint1_isr(void);//声明中断函数 void initgpio(void);//声明gpio函数 volatile Uint32 xint1count;//定义中断计数变量 /*volatile一般说来volatile关键字是一种类型修饰符, * 用它声明的类型变量表示可以被某些编译器未知的因素更改, * 比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量, * 编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地 * 址的稳定访问。,volatile用在如下的几个地方: 1、中断服务程序中修改的供其它程序检测的变量需要加volatile; 2、多任务环境下各任务间共享的标志应该加volatile; 3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能有不同意义;*/ void main(void) { InitSysCtrl();//初始化系统控制 DINT; //关闭全局中断 InitPieCtrl();//初始化PIE控制 IER=0X0000; IFR=0X0000;//cpu级中断使能和中断标志清零 InitPieVectTable();//初始化PIE向量表 //初始化系统、全局中断、初始化PIE控制、CPU中断标志和使能、初始化PIE向量表。 initgpio();//初始化GPIO xint1count=0;//中断计数变量赋初值 EALLOW;//关闭写保护 PieVectTable.XINT1=&xint1_isr;//将中断服务函数映射到向量表中 EDIS;//打开写保护 PieCtrlRegs.PIEIER1.bit.INTx4=1;//使能PIE第一组第四个中断。 IER |=M_INT1;//打开cpu级中断1的使能, EINT;//初始化gpio、配置向量映射、使能cpu级中断、全局中断。 XIntruptRegs.XINT1CR.bit.POLARITY=1;//上升沿产生中断 0或2:下降沿 3:上升或下降沿 XIntruptRegs.XINT1CR.bit.ENABLE=1;//使能外部中断XINT1 for(;;) { } } void initgpio(void) { EALLOW; GpioCtrlRegs.GPBMUX2.bit.GPIO53 = 0; // GPIO GpioCtrlRegs.GPBDIR.bit.GPIO53 = 1; // output GpioDataRegs.GPBDAT.bit.GPIO53=1; //付初值 GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0; // GPIO GpioCtrlRegs.GPADIR.bit.GPIO13 = 0; // input GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 2; // Xint1 Synch to SYSCLKOUT only GpioCtrlRegs.GPACTRL.bit.QUALPRD3 = 0xFF; // Each sampling window is 510*SYSCLKOUT GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 13; //选择中断源触发引脚 EDIS; } interrupt void xint1_isr(void) { GpioDataRegs.GPBTOGGLE.bit.GPIO53 = 1; // GPIO0翻转 xint1count++;//中断计数变量加1 // Acknowledge this interrupt to get more from group 1 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //读1:已经有其他组发送中断请求,写1:可以清零,通知当没有中断执行时优先较高的中断会响应 }

GPXQSELn(GPIO选择限制寄存器)

GPXQSELn
X:A、B n:1、2 GPXQSELn 功能 00 与系统时钟同步(GPIO配置外设和通用有效) 01 采用3个采样周期宽度限制GPIO配置外设和通用有效) 10 采用6个采样周期宽度限制GPIO配置外设和通用有效) 11 不同步(配置GPIO为外设),与00系统时钟同步(配置GPIO为通用io口)

GPXCTRL(GPIO控制限制寄存器)

GPXCTRL GPXCTRL位 字段 功能 31-24 QUXLPRD3 GPIO24-31引脚采样周期:0x00:采样T=T(SYSCLKOUT)0X01:采样T=2xT(SYSCLKOUT) 0X??:采样T=2x0X??xT(SYSCLKOUT) 23-16 QUXLPRD2 GPIO16-23引脚采样周期0x00-0xff:0-510T(SYSCLKOUT); 15-8 QUXLPRD1 GPIO8-15引脚采样周期 7-0 QUXLPRD0 GPIO0-7引脚采样周期

GPIOXINTnSEL(GPIO中断选择寄存器)

GPIOXINTnSEL
X:A时 n为1或2
X:B时 n为3-7 GPIOXINTnSEL 功能 15-5 保留 4-0 选择X端口的GPIO引脚作为XINTn的中断源默认为00000(选择GPIO0或GPIO32)

XINTnCR

XINTnCR
n为1-7 XINTnCR位 字段 功能 15-4 保留 保留 3-2 Polarity 00:下降沿 01:上升沿 10:下降沿 11:上升或下降沿 1 保留 保留 0 Eable 0:关闭中断 1:是使能中断

实验三:ADC实验

代码

#include "DSP28x_Project.h" Uint16 SampleTable[4]={0};//初始为0 用于存储结果 void main(void) { InitSysCtrl(); EALLOW; SysCtrlRegs.HISPCP.all = 0x3; // HSPCLK = SYSCLKOUT/ADC_MODCLK //将高速时钟进行分频,适合ADC的频率。25MHZ EDIS; DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); InitAdc(); AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x0;//ADC时钟分频器分频数:2*ADCCLKPS AdcRegs.ADCTRL1.bit.CPS=0;//ADC时钟预分频器0:不分频(默认) 1:2分频 AdcRegs.ADCTRL1.bit.ACQ_PS = 0x1; //采集窗口为两个(ACQ_PS+1)ADC时钟 AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;//1:级联模式 0:双序列模式; AdcRegs.ADCTRL3.bit.SMODE_SEL=0;//0:顺序模式(默认) 1:同步模式。 AdcRegs.ADCTRL1.bit.CONT_RUN = 1;//1:连续转换模式。 0:启动/停止模式。 AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; //0:转换通道完成后转换指针复位到初始状态。1:到达最后排序通道后再复位通道指针。 AdcRegs.ADCCHSELSEQ1.all = 0x9108;//通道0、1、2、3分别为:B0、A0、B1、A1 AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 03;//最大转换通道数=通道数+1(或从0开始) AdcRegs.ADCTRL2.all = 0x2000;//从当前位置启动SEQ1;0020:启动SEQ2 for(;;) { while (AdcRegs.ADCST.bit.INT_SEQ1== 0){}//当中断执行完后继续执行 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;//清除SEQ1的中断标志位 SampleTable[0]= ( (AdcRegs.ADCRESULT0)>>4);//将结果保存到变量中 SampleTable[1]= ( (AdcRegs.ADCRESULT1)>>4); SampleTable[2]= ( (AdcRegs.ADCRESULT2)>>4); SampleTable[3]= ( (AdcRegs.ADCRESULT3)>>4); } }

HISPCP(高速标记预分频器)

对时钟进行分频

ADCTRL1(ADC控制寄存器1)

位 位名 描述 15 - - 14 RESET ADC模块软件复位(三个时钟周期不能改变相关寄存器) 0:无影响 1:复位 13-12 SUSMOD1/0 仿真暂停方式 11-8 ACQ_PS[3-0] 设置采集窗口大小,控制SOC脉冲宽度,确定采样开关闭合时间 SOC的脉冲宽度是(ACQ_PS+1)个ADCCLK周期 7 CPS ADC内核时钟预分频位,用来对HSPCLK进行分频 0:不分频 1:2分频(fclk/2)_fclk为经过ADCCLKPS[3-0]之后分频的时钟 6 CONT_RUN 连续运行选择模式 0:启动-停止方式 1:连续运行模式 5 SEQ_OVRD 序列发生器运行方式 0:转换完成后通道排序器指针复位到初始状态 1:最后一个排序15转换完成后,排序指针从初始状态开始。 4 SEQ_CASE 级取序列发生器工作方式(2个8;还是1个16) 0:双序列模式 1:级联模式 3-0 - -

ADCTRL2(ADC控制寄存器2)

位 位名 描述 15 ePWM_SOCB_SEQ 必须在级联模式下 0:无作用 1:允许ePWMSOCB启动级联的序列发生器 14 RST_SEQ1 复位序列发生器 0:无作用 1:立即复位序列发生器SEQ1到CONV00状态 13 SOC_SEQ1 0:写0,清除悬挂的SOC触发信号 1:软件触发,从当前位置启动SEQ1 12 - - 11 INT_ENA_SEQ1 SEQ1中断使能 0:禁止SEQ1中断请求 1:使能SEQ1中断请求 10 INT_MOD_SEQ1 SEQ1中断使能 0:每个SEQ1序列转换结束时,置位SEQ1中断标志位 1:每隔一个SEQ1序列转换结束时,置位SEQ1中断标志位 9 - - 8 ePWM_SOCA_SEQ1 SEQ1事件管理器A的SOC屏蔽位 0:不能通ePWMxSOCA触发启动SEQ1 1:允许通过··· 7 EXT_SOC_SEQ1 SEQ1的外部信号启动转换位 0:无作用 1:通过设定的GPIOXINT2SEL可以使用端口A中的XINT2信号启动ADC转换过程 6 RST_SEQ2 复位序列发生器 0:无作用 1:立即复位序列发生器SEQ2到CONV08状态 5 SOC_SEQ2 0:写0,清除悬挂的SOC触发信号 1:软件触发,从当前位置启动SEQ2 4 - - 3 INT_ENA_SEQ2 SEQ2中断使能 0:禁止SEQ2中断请求 1:使能SEQ2中断请求 2 INT_MOD_SEQ2 SEQ2中断使能 0:每个SEQ2序列转换结束时,置位SEQ2中断标志位 1:每隔一个SEQ2序列转换结束时,置位SEQ2中断标志位 1 - - 0 ePWM_SOCA_SEQ2 SEQ2事件管理器A的SOC屏蔽位 0:不能通ePWMxSOCA触发启动SEQ2 1:允许通过···

ADCTRL13(ADC控制寄存器3)

位 位名 描述 15-8 - - 7-6 ADCBGRFDN[1:0] 0:带逢和参考电路掉电 1:上电 5 ADCPWDN ADC电源控制(控制带逢和参考电路外的ADC其他模拟电路供电) 0:掉电 1:上电 4-1 ADCCKLPS[3:0] ADC内核时钟分频器HSPCLK/{(ADCCLKPS[3:0])*(ADCTRL1[7]+1)} 0 SMOD_SEL 0:顺序采样模式 1:同步采样模式

ADCCHSELSEQn()

位 位名 位名 位名 位名 ADCCHSELSEQ1 ADCCHSELSEQ2 ADCCHSELSEQ3 ADCCHSELSEQ4 15-12 CONN03 CONN07 CONN11 CONN15 11-8 CONN02 CONN06 CONN10 CONN14 7-4 CONN01 CONN05 CONN09 CONN13 3-0 CONN00 CONN04 CONN08 CONN12

ADCMAXCONV()

位 位名 描述 15-7 - - 6-4 MAX_CONV2 对SEQ2操作 3-0 MAX_CONV 其中MAX_CONV[2:0]对SEQ1进行操作,整个对SEQ进行操作

ADCST()

15-8 - - 7 EOS_BUF2 SEQ2的序列缓冲器结束位 6 EOS_BUF1 SEQ1的序列缓冲器结束位 5 INT_SEQ2_CLR 中断清除位 0:无效 1:写1进行清除SEQ2中断标志位 4 INT_SEQ1_CLR 中断清除位 0:无效 1:写1进行清除SEQ1中断标志位 3 SEQ2_BSY SEQ2忙标志位 0:表示空闲状态 1:表示正在进行,忙状态 2 SEQ1_BSY SEQ1忙标志位 0:表示空闲状态 1:表示正在进行,忙状态 1 INT_SE2 SEQ2 中断标志位 0:表示无中断事件 1:SEQ2中断事件产生 0 INT_SE1 SEQ1 中断标志位 0:表示无中断事件 1:SEQ1中断事件产生