void I2S0_CLK_OUT(void)
{
I2SParamCt i2s_ct;
GPIO_PortAModeSet(GPIOA2, 5);// bclk
i2s_ct.IsMasterMode = 0;
i2s_ct.SampleRate = 192000;
i2s_ct.I2sFormat = I2S_FORMAT_I2S;
i2s_ct.I2sBits = I2S_LENGTH_16BITS;
i2s_ct.RxPeripheralID = PERIPHERAL_ID_I2S0_RX;
i2s_ct.RxBuf = (void* )I2s0RxFifo;
i2s_ct.RxLen = I2S0_RX_FIFO_LEN;
i2s_ct.I2sTxRxEnable = 2;
AudioI2S_Init(I2S0_MODULE, &i2s_ct);
}
extern void SysTickInit(void);
#define BUFFER_LEN 1024
#define ADR_GPIO_A_REG_O (0x40010004)
void IIS_OUT(void)
{
static uint8_t DmaTestBuffer[BUFFER_LEN];
uint32_t i;
DMA_CONFIG DMAConfig;
uint32_t DmaTestLen;
for(i = 0; i < BUFFER_LEN ; i+=2)
{
DmaTestBuffer[i] = 0x55;
DmaTestBuffer[i+1] = 0xaa;
}
GPIO_RegBitsClear(GPIO_A_IE, 0xff);
GPIO_RegBitsSet(GPIO_A_OE, 0xff);
DmaTestLen = BUFFER_LEN;
DMAConfig.Dir = DMA_CHANNEL_DIR_MEM2PERI;
DMAConfig.Mode = DMA_CIRCULAR_MODE;
DMAConfig.SrcAddress = (uint32_t)DmaTestBuffer;
DMAConfig.SrcDataWidth = DMA_SRC_DWIDTH_BYTE;
DMAConfig.SrcAddrIncremental = DMA_SRC_AINCR_SRC_WIDTH;
DMAConfig.DstAddress = ADR_GPIO_A_REG_O;
DMAConfig.DstDataWidth = DMA_DST_DWIDTH_BYTE;
DMAConfig.DstAddrIncremental = DMA_DST_AINCR_NO;
DMAConfig.BufferLen = DmaTestLen;
DMA_TimerConfig(PERIPHERAL_ID_TIMER5, &DMAConfig);
DMA_CircularWritePtrSet(PERIPHERAL_ID_TIMER5, DmaTestLen+4);//将写指针指向buffer外 目的是循环发送数据
DMA_ChannelEnable(PERIPHERAL_ID_TIMER5);
}
void PCM_DRIVER_GPIO()
{
PWC_StructInit PWCParam;
GPIO_RegOneBitSet(GPIO_A_IE,GPIO_INDEX2);
PWC_GpioConfig(TIMER5,2);
//PWC参数配置
PWCParam.Polarity = PWC_POLARITY_FALLING;
PWCParam.SingleGet = 0;
PWCParam.DMAReqEnable = 1;
PWCParam.TimeScale = 1;
PWCParam.FilterTime = 1;
PWC_Config(TIMER5, &PWCParam);
IIS_OUT();
PWC_Enable(TIMER5);
I2S0_CLK_OUT();
while(1){}
}
BP10XX芯片,PWC捕获时钟触发DMA翻转GPIO
最新推荐文章于 2024-10-10 09:00:00 发布