音频DAC cs4344 驱动不起来,求助
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了音频DAC cs4344 驱动不起来,求助相关的知识,希望对你有一定的参考价值。
参考技术A 这个是驱动程序:#include "CS4344.h"
DMA_InitTypeDef DMA_InitStructure;
u32 AudioTotalSize=0xFFFF;
u32 AudioRemSize =0;
u16 *CurrentPos;
extern void AUDIO_TransferComplete(u32 pBuffer, uint32_t Size);
void AUDIO_Init(u32 AudioFreq)
I2S_GPIO_Init();
Audio_I2S_Init(AudioFreq);
Audio_DMA_Init();
void I2S_GPIO_Init(void)
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13 | GPIO_Pin_15 ;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource12, GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource13, GPIO_AF_SPI2);
GPIO_PinAFConfig(GPIOB, GPIO_PinSource15, GPIO_AF_SPI2);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_SPI2);
void Audio_I2S_Init(uint32_t AudioFreq)
I2S_InitTypeDef I2S_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
SPI_I2S_DeInit(SPI2);
/* I2S peripheral configuration */
I2S_InitStructure.I2S_Standard = I2S_Standard_Phillips;
I2S_InitStructure.I2S_DataFormat = I2S_DataFormat_16b;
I2S_InitStructure.I2S_MCLKOutput = I2S_MCLKOutput_Enable;
I2S_InitStructure.I2S_AudioFreq = AudioFreq;
I2S_InitStructure.I2S_CPOL = I2S_CPOL_Low;
I2S_InitStructure.I2S_Mode = I2S_Mode_MasterTx;
I2S_Init(SPI2, &I2S_InitStructure);
//I2S_Cmd(SPI2, ENABLE);
void Audio_DMA_Init(void)
NVIC_InitTypeDef NVIC_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
DMA_Cmd(DMA1_Stream4, DISABLE);
DMA_DeInit(DMA1_Stream4);
DMA_InitStructure.DMA_Channel = DMA_Channel_0;
DMA_InitStructure.DMA_PeripheralBaseAddr = 0x4000380C;
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)0;
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral;
DMA_InitStructure.DMA_BufferSize = (uint32_t)0xFFFE;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;
DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_1QuarterFull;
DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;
DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
DMA_Init(DMA1_Stream4, &DMA_InitStructure);
DMA_ITConfig(DMA1_Stream4, DMA_IT_TC, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Stream4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
SPI_I2S_DMACmd(SPI2, SPI_I2S_DMAReq_Tx, ENABLE);
本回答被提问者和网友采纳
stm32-浅谈DAC
在数字信号系统中,大部分传感器信号会被转换成电压信号,经由ADC转换成易于计算机存储,处理的数字编码,由计算机处理之后,DAC输出电压模拟信号以驱动器件,例如音频信号的采集和还原。
Stm32的DAC外设的数字输入信号的分辨率可为8位或12位,具有两个输出通道,每个通道都可以使用DMA,DAC能出错检测和外部触发,下面我们分析他的结构框图。
- 参考电压:VSS一般接地,VDD,VREF,这样DAC的输出电压的范围为0~3.3V。当然在外部加一个电压调理电路,能让电压范围变宽。
- 数模转换及输出通道:转换器以VREF作为参考电压,以数据寄存器的数字编码作为输入,经它转换的模拟信号由DAC_OUTx输出到PA4(DAC1),PA5(DAC2),为避免干扰,此俩引脚配置为模拟输入。
- 控制单元:这个就是配置不同的模式。
- DHRx寄存器与触发源:数据必须先写入DHRx寄存器(包含DHR8Rx,DHR12Lx,根据分辨率和数据对齐方向将数据写入相应寄存器);DAC就会根据不同的触发配置进行处理;触发源分为硬件触发(内部),外部触发(定时器,中断,软件)。
- 如何输出正弦波? v=sin(t),这个t可由定时器作为触发源来提供,每隔一段相同的时间就会触发DMA搬运一个新数据到数据寄存器里,再进行转换就会输出正弦波了;每完成一个周期后,DMA重新开始循环,就可以输出连续的波形了。
以上是关于音频DAC cs4344 驱动不起来,求助的主要内容,如果未能解决你的问题,请参考以下文章