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"
interrupt void xint1_isr(void);
void initgpio(void);
volatile Uint32 xint1count;
void main(void) {
InitSysCtrl();
DINT;
InitPieCtrl();
IER=0X0000;
IFR=0X0000;
InitPieVectTable();
initgpio();
xint1count=0;
EALLOW;
PieVectTable.XINT1=&xint1_isr;
EDIS;
PieCtrlRegs.PIEIER1.bit.INTx4=1;
IER |=M_INT1;
EINT;
XIntruptRegs.XINT1CR.bit.POLARITY=1;
XIntruptRegs.XINT1CR.bit.ENABLE=1;
for(;;)
{
}
}
void initgpio(void)
{
EALLOW;
GpioCtrlRegs.GPBMUX2.bit.GPIO53 = 0;
GpioCtrlRegs.GPBDIR.bit.GPIO53 = 1;
GpioDataRegs.GPBDAT.bit.GPIO53=1;
GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO13 = 0;
GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 2;
GpioCtrlRegs.GPACTRL.bit.QUALPRD3 = 0xFF;
GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 13;
EDIS;
}
interrupt void xint1_isr(void)
{
GpioDataRegs.GPBTOGGLE.bit.GPIO53 = 1;
xint1count++;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
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中断事件产生