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中断事件产生 |