如果停止和启动VSS服务

在命令行窗口运行:


 net stop ssservice


 net start ssservice

首先需要说明的是,TMS28335C2000是一款数字信号处理器(DSP),并不搭载模拟输出模块,因此无法直接输出模拟信号。同时,DAC7724是一款4路12位DAC芯片,可以将数字信号转换为模拟信号输出,但需要通过SPI或者并行接口与DSP进行通信。 因此,本题需要先确定如何将DSP的数字信号转换为DAC7724能够接收的数字信号,并通过DAC7724输出cos波形和锯齿波。 以下是基于TMS28335C2000和DAC7724芯片设计定时数模转换的示例代码: 引脚初始化函数: ``` void initPins(void) { // 初始化SPI通信引脚 GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 0b10; // SPI_SIMO GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0b10; // SPI_SOMI GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0b10; // SPI_CLK GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 0b10; // SPI_CS // 初始化DAC7724控制引脚 GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // /SYNC GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0; // LDAC GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0; // CLR GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0; // RESET GpioDataRegs.GPASET.bit.GPIO0 = 1; // /SYNC高电平 GpioDataRegs.GPASET.bit.GPIO1 = 1; // LDAC高电平 GpioDataRegs.GPASET.bit.GPIO2 = 1; // CLR高电平 GpioDataRegs.GPASET.bit.GPIO3 = 1; // RESET高电平 } ``` SPI写函数: ``` void spiWrite(uint16_t data) { SpiaRegs.SPITXBUF = data; while(SpiaRegs.SPISTS.bit.INT_FLAG != 1); SpiaRegs.SPIRXBUF; } ``` DAC7724配置函数: ``` void initDAC7724(void) { // 复位DAC7724 GpioDataRegs.GPACLEAR.bit.GPIO3 = 1; // RESET低电平 DELAY_US(1); GpioDataRegs.GPASET.bit.GPIO3 = 1; // RESET高电平 // 设置SPI模式 SpiaRegs.SPICCR.bit.SPISWRESET = 0; SpiaRegs.SPICCR.bit.CLKPOLARITY = 0; SpiaRegs.SPICCR.bit.SPICHAR = 15; SpiaRegs.SPICCR.bit.SPILBK = 0; SpiaRegs.SPICCR.bit.SPIMASTER = 1; SpiaRegs.SPICCR.bit.SPISWRESET = 1; // 设置SPI时钟频率 SpiaRegs.SPIBRR = 0x3FF; // DAC7724初始化 GpioDataRegs.GPACLEAR.bit.GPIO0 = 1; // /SYNC低电平 spiWrite(0b0000111111111111); // 使能所有4路DAC输出 spiWrite(0b1111111111111111); // 设置参考电压为AVDD和AVSS spiWrite(0b0000001111000000); // 设置输出为字节模式,更新寄存器时立即生效 spiWrite(0b0000000000000000); // 将DAC输出值全部清零 GpioDataRegs.GPASET.bit.GPIO0 = 1; // /SYNC高电平 } ``` 定时器中断函数: ``` interrupt void timerISR(void) { static uint16_t i = 0; static uint16_t dacValue = 0; // 输出cos波形 dacValue = (uint16_t)(2047 * cos(2 * 3.1415926 * i / 1024) + 2048); GpioDataRegs.GPACLEAR.bit.GPIO0 = 1; // /SYNC低电平 spiWrite(i << 2); spiWrite(dacValue >> 4); GpioDataRegs.GPASET.bit.GPIO0 = 1; // /SYNC高电平 i++; // 输出锯齿波 dacValue = i << 2; GpioDataRegs.GPACLEAR.bit.GPIO0 = 1; // /SYNC低电平 spiWrite(i << 2); spiWrite(dacValue >> 4); GpioDataRegs.GPASET.bit.GPIO0 = 1; // /SYNC高电平 i++; if(i >= 1024) { i = 0; } PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; } ``` 主函数: ``` int main(void) { // 系统初始化 InitSysCtrl(); InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); EALLOW; PieVectTable.TIMER0_INT = &timerISR; EDIS; initPins(); initDAC7724(); // 定时器初始化 CpuTimer0Regs.TCR.bit.TSS = 1; // 停止定时器 CpuTimer0Regs.PRD.all = 375; // 定时器周期为375个SYSCLKOUT CpuTimer0Regs.TCR.bit.TRB = 1; // 重载定时器周期 CpuTimer0Regs.TCR.bit.TIE = 1; // 使能定时器中断 CpuTimer0Regs.TCR.bit.TSS = 0; // 启动定时器 // 使能总中断 IER |= M_INT1; EINT; ERTM; while(1); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值