1. 写出相关 C 语言指令,完成以下任务: (1)将 TMS320F28335 的引脚 GPIO0 设置为普通输出引脚、使能上拉电阻,并 将该引脚输出电平设置为高电平; (2)将 TMS320F28335 的引脚 GPIO1 设置为 ePWM1 模块的 EPWMB 信号输出 引脚。 2. 将 TMS320F28335 的 SCIA 串口的波涛率设置为 115200 波特。假设低速外设 时钟 LSPCLK 的频率是 37.5MHz。请写出相关数据的计算过程及 C 语言指令。 3. 利用 TMS320F28335 的 ADC 模块采集 8 个通道的模拟量输入信号,假设采集 顺序为:A7、A4、A6、A5、A2、B2、B0、A3。要求:采用级联、顺序采样方 式。请写出相关 C 语言指令,按上要求完成 ADC 模块配置。
时间: 2023-06-14 10:03:32 浏览: 157
三大电机控制方案之DSP篇(1):TMS320F28335
5星 · 资源好评率100%
1.
(1)将 TMS320F28335 的引脚 GPIO0 设置为普通输出引脚、使能上拉电阻,并将该引脚输出电平设置为高电平:
```
//配置GPIO0为普通输出引脚
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; //设置为输出引脚
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0; //使能上拉电阻
//将GPIO0输出电平设置为高电平
GpioDataRegs.GPASET.bit.GPIO0 = 1;
```
(2)将 TMS320F28335 的引脚 GPIO1 设置为 ePWM1 模块的 EPWMB 信号输出引脚:
```
//配置GPIO1为ePWM1模块的EPWMB信号输出引脚
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; //设置为复用功能
GpioCtrlRegs.GPAGMUX1.bit.GPIO1 = 0; //选择复用功能为EPWMB
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0; //禁用上拉电阻
```
2. 将 TMS320F28335 的 SCIA 串口的波涛率设置为 115200 波特。假设低速外设时钟 LSPCLK 的频率是 37.5MHz。请写出相关数据的计算过程及 C 语言指令。
计算过程:
LSPCLK = 37.5MHz
波特率 = 115200
BRR = LSPCLK / (波特率 * 8) - 1 = 40
C语言指令:
```
//使能SCI-A引脚复用功能
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;
//配置SCI-A
SciaRegs.SCICCR.all = 0x0007;
SciaRegs.SCICTL1.all = 0x0003;
SciaRegs.SCICTL2.all = 0x0003;
SciaRegs.SCICTL2.bit.TXINTENA = 1;
SciaRegs.SCIHBAUD = 0;
SciaRegs.SCILBAUD = 40;
SciaRegs.SCICTL1.all = 0x0023;
```
3. 利用 TMS320F28335 的 ADC 模块采集 8 个通道的模拟量输入信号,假设采集顺序为:A7、A4、A6、A5、A2、B2、B0、A3。要求:采用级联、顺序采样方式。请写出相关 C 语言指令,按上要求完成 ADC 模块配置。
```
//配置ADC模块
AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; //选择内部参考电压
AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; //使能内部参考电压缓冲区
AdcRegs.ADCCTL1.bit.ADCPWDN = 1; //使能ADC模块电源
AdcRegs.ADCCTL1.bit.ADCENABLE = 1; //使能ADC模块
AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; //使能内部参考电压缓冲区电源
AdcRegs.ADCCTL1.bit.ADCREFSEL = 0; //选择内部参考电压
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //设置中断触发时间
AdcRegs.ADCCTL2.bit.ADCNONOVERLAP = 1; //使能非重叠采样
AdcRegs.ADCCTL2.bit.CLKDIV2EN = 1; //使能ADC时钟除以2
AdcRegs.ADCCTL2.bit.ADCRES = 3; //设置采样分辨率为12位
AdcRegs.ADCSOC0CTL.bit.CHSEL = 7; //选择A7通道
AdcRegs.ADCSOC1CTL.bit.CHSEL = 4; //选择A4通道
AdcRegs.ADCSOC2CTL.bit.CHSEL = 6; //选择A6通道
AdcRegs.ADCSOC3CTL.bit.CHSEL = 5; //选择A5通道
AdcRegs.ADCSOC4CTL.bit.CHSEL = 2; //选择A2通道
AdcRegs.ADCSOC5CTL.bit.CHSEL = 10; //选择B2通道
AdcRegs.ADCSOC6CTL.bit.CHSEL = 8; //选择B0通道
AdcRegs.ADCSOC7CTL.bit.CHSEL = 3; //选择A3通道
AdcRegs.ADCSOC0CTL.bit.ACQPS = 63; //设置采样时间
AdcRegs.ADCSOC1CTL.bit.ACQPS = 63;
AdcRegs.ADCSOC2CTL.bit.ACQPS = 63;
AdcRegs.ADCSOC3CTL.bit.ACQPS = 63;
AdcRegs.ADCSOC4CTL.bit.ACQPS = 63;
AdcRegs.ADCSOC5CTL.bit.ACQPS = 63;
AdcRegs.ADCSOC6CTL.bit.ACQPS = 63;
AdcRegs.ADCSOC7CTL.bit.ACQPS = 63;
AdcRegs.ADCINTSEL1N2.bit.INT1SEL = 7; //设置ADCINT1的触发源为SOC7
AdcRegs.ADCINTSEL1N2.bit.INT1E = 1; //使能ADCINT1中断
AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //清除ADCINT1标志位
AdcRegs.ADCINTSEL1N2.bit.INT2SEL = 0; //设置ADCINT2的触发源为SOCA
AdcRegs.ADCINTSEL1N2.bit.INT2E = 1; //使能ADCINT2中断
AdcRegs.ADCINTFLGCLR.bit.ADCINT2 = 1; //清除ADCINT2标志位
AdcRegs.ADCINTSOCSEL1.bit.SOC0 = 2; //设置ADCINT1触发SOC0
AdcRegs.ADCINTSOCSEL1.bit.SOC1 = 2; //设置ADCINT1触发SOC1
AdcRegs.ADCINTSOCSEL1.bit.SOC2 = 2; //设置ADCINT1触发SOC2
AdcRegs.ADCINTSOCSEL1.bit.SOC3 = 2; //设置ADCINT1触发SOC3
AdcRegs.ADCINTSOCSEL2.bit.SOC4 = 2; //设置ADCINT1触发SOC4
AdcRegs.ADCINTSOCSEL2.bit.SOC5 = 2; //设置ADCINT1触发SOC5
AdcRegs.ADCINTSOCSEL2.bit.SOC6 = 2; //设置ADCINT1触发SOC6
AdcRegs.ADCINTSOCSEL2.bit.SOC7 = 2; //设置ADCINT1触发SOC7
AdcRegs.ADCSOCFIFOCTL.bit.SOCCOUNT = 8; //设置FIFO中SOC数量为8
AdcRegs.ADCSOCFIFOCTL.bit.CHAINDELAY = 1; //设置级联采样延迟为1个CLK周期
AdcRegs.ADCSOCFIFOCTL.bit.TRIGSEL = 0; //设置FIFO触发源为SOCA
AdcRegs.ADCINTSOCSEL1.bit.SOC8 = 1; //设置ADCINT2触发SOC8
AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //设置ADCINT1触发时间
AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; //使能内部参考电压缓冲区电源
AdcRegs.ADCCTL1.bit.ADCPWDN = 1; //使能ADC模块电源
AdcRegs.ADCCTL1.bit.ADCENABLE = 1; //使能ADC模块
```
阅读全文