请完成下面任务:写出基于f28335的DA输出的c语言的代码,同时列出使用了那些库函数代码
时间: 2024-01-21 11:17:24 浏览: 108
以下是基于f28335的DA输出的C语言代码,使用了DSP2833x_Dma.h和DSP2833x_Spi.h库函数代码:
```
#include "DSP2833x_Device.h"
#include "DSP2833x_Examples.h"
#include "DSP2833x_Dma.h"
#include "DSP2833x_Spi.h"
//定义DA输出端口
#define DA_CS_GPIO GPIO31
#define DA_CS_PIN 1
//定义DMA传输数据缓存
Uint16 dmaBuffer[256];
void initDA(void)
{
//初始化GPIO
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0; //选择GPIO31
GpioCtrlRegs.GPADIR.bit.DA_CS_GPIO = 1; //设置为输出
EDIS;
//配置SPI控制器
InitSpi();
//配置DMA传输
DMAInitialize();
DMADestPointerSet(0, &SpiaRegs.SPITXBUF); //设置DMA目的地址
DMASourcePointerSet(0, dmaBuffer); //设置DMA源地址
DMADestinationSizeSet(0, 256); //设置DMA目的传输大小
DMASourceSizeSet(0, 256); //设置DMA源传输大小
DMAModeSet(0, DMA_TRANSFER_CONTINUOUS); //设置DMA传输模式为连续传输
DMAEnable(0); //使能DMA传输
}
void setDAValue(Uint16 value)
{
//将DA输出值写入DMA传输数据缓存
for(int i=0;i<256;i++)
{
dmaBuffer[i] = value;
}
//使能SPI传输
GpioDataRegs.GPASET.bit.DA_CS_GPIO = 1; //拉低CS引脚
SpiaRegs.SPITXBUF = 0x00; //开始SPI传输
while(SpiaRegs.SPIFFTX.bit.TXFFST != 0); //等待传输完成
GpioDataRegs.GPACLEAR.bit.DA_CS_GPIO = 1; //拉高CS引脚
}
void InitSpi(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.SPISTEA_GPIO = 1; //选择SPI-STEA
GpioCtrlRegs.GPAMUX2.bit.SPISTEB_GPIO = 1; //选择SPI-STEB
GpioCtrlRegs.GPAMUX2.bit.SPICLKA_GPIO = 1; //选择SPI-CLKA
GpioCtrlRegs.GPAMUX2.bit.SPISIMA_GPIO = 1; //选择SPI-SIMA
GpioCtrlRegs.GPAMUX2.bit.SPISIMB_GPIO = 1; //选择SPI-SIMB
SpiaRegs.SPICCR.bit.SPISWRESET = 0; //使能SPI软件复位
SpiaRegs.SPICCR.all = 0x002F; //设置SPI时序模式
SpiaRegs.SPICTL.all = 0x0006; //设置SPI控制器模式
SpiaRegs.SPIBRR = 99; //设置SPI时钟分频
SpiaRegs.SPICCR.bit.SPISWRESET = 1; //关闭SPI软件复位
SpiaRegs.SPIPRI.bit.FREE = 1; //释放SPI优先级
EDIS;
}
void DMAInitialize(void)
{
EALLOW;
DmaRegs.CH1.BURST_SIZE.all = 0; //设置传输大小为单次传输
DmaRegs.CH1.SRC_BURST_STEP = 0; //设置源地址步进为0
DmaRegs.CH1.DST_BURST_STEP = 0; //设置目的地址步进为0
DmaRegs.CH1.TRANSFER_SIZE = 255; //设置传输大小为255
DmaRegs.CH1.SRC_TRANSFER_STEP = 1; //设置源地址步进为1
DmaRegs.CH1.DST_TRANSFER_STEP = 0; //设置目的地址步进为0
DmaRegs.CH1.SRC_ADDR_SHADOW = (Uint32)dmaBuffer; //设置源地址影子寄存器值
DmaRegs.CH1.DST_ADDR_SHADOW = (Uint32)&SpiaRegs.SPITXBUF; //设置目的地址影子寄存器值
DmaRegs.CH1.CONTROL.bit.PERINTSEL = 16; //设置DMA传输完成中断触发源
DmaRegs.CH1.CONTROL.bit.ERRCLR = 1; //清除DMA传输错误标志
DmaRegs.CH1.CONTROL.bit.SYNC = 0; //设置DMA传输同步模式为异步
DmaRegs.CH1.CONTROL.bit.CYCLE_CTRL = 0; //设置DMA传输循环控制模式为单次传输
DmaRegs.CH1.CONTROL.bit.DST_WRAP_SIZE = 0; //设置DMA目的地址循环包装大小为0
DmaRegs.CH1.CONTROL.bit.SRC_WRAP_SIZE = 0; //设置DMA源地址循环包装大小为0
DmaRegs.CH1.CONTROL.bit.TTYPE = 0; //设置DMA传输类型为内存到外设
DmaRegs.CH1.CONTROL.bit.ADDROFST = 0; //设置DMA传输地址偏移量为0
DmaRegs.CH1.CONTROL.bit.AUTO = 1; //设置DMA传输自动触发模式
DmaRegs.CH1.CONTROL.bit.TRANSFER_SIZE = 255; //设置DMA传输大小为255
PieCtrlRegs.PIEIER7.bit.INTx1 = 1; //使能DMA传输完成中断
IER |= M_INT7; //使能DMA传输完成中断
EDIS;
}
```
阅读全文