ADSP21565 use Sport0A can work, but Sport4A can't work.
I can capture data on the data line through a logic analyzer, but there is no data for this variable in the program.
The data of Sport0A is normal, but when switching to Sport4A, there is data on the data line, but the variable remains at 0
static void SPORTCallback(
void *pAppHandle,
uint32_t nEvent,
void *pArg
)
{
ADI_SPORT_RESULT eResult;
/* CASEOF (event type) */
switch (nEvent)
{
/* CASE (buffer processed) */
case ADI_SPORT_EVENT_BUFFER_PROCESSED:
if(A2B_pingpong_flag==0){
A2B_pingpong_flag=1;
for(int kkk=0;kkk<30;kkk++){
for(int kk=0;kk<ref_num;kk++){
*(*(ref_blook+kk)+kkk)=*(A2B_in_Buffer1+kkk*16+ref_seq[kk]);
}
for(int kk=0;kk<mic_num;kk++){
*(*(MIC_blook+kk)+kkk)=*(A2B_in_Buffer1+kkk*16+kk+9);
}
}
}
else if(A2B_pingpong_flag==1){
A2B_pingpong_flag=0;
for(int kkk=0;kkk<30;kkk++){
for(int kk=0;kk<ref_num;kk++){
*(*(ref_blook+kk)+kkk)=*(A2B_in_Buffer2+kkk*16+ref_seq[kk]);
}
for(int kk=0;kk<mic_num;kk++){
*(*(MIC_blook+kk)+kkk)=*(A2B_in_Buffer2+kkk*16+kk+9);
}
}
}
A2BCallbackCount++;
A2B_flag=1;
break;
default:
break;
}
}
static void PrepareDescriptors (void)
{
iDESC_LIST_1_SP0A.pStartAddr = (int32_t *)A2B_in_Buffer1;
iDESC_LIST_1_SP0A.Config = ENUM_DMA_CFG_XCNT_INT ;
iDESC_LIST_1_SP0A.XCount = COUNT;
iDESC_LIST_1_SP0A.XModify = 4;
iDESC_LIST_1_SP0A.YCount = 0;
iDESC_LIST_1_SP0A.YModify = 0;
iDESC_LIST_1_SP0A.pNxtDscp = &iDESC_LIST_2_SP0A;
iDESC_LIST_2_SP0A.pStartAddr = (int32_t *)A2B_in_Buffer2;
iDESC_LIST_2_SP0A.Config = ENUM_DMA_CFG_XCNT_INT ;
iDESC_LIST_2_SP0A.XCount = COUNT;
iDESC_LIST_2_SP0A.XModify = 4;
iDESC_LIST_2_SP0A.YCount = 0;
iDESC_LIST_2_SP0A.YModify = 0;
iDESC_LIST_2_SP0A.pNxtDscp = &iDESC_LIST_1_SP0A;
iDESC_LIST_1_SP0B.pStartAddr = (int32_t *)A2B_out_Buffer1;
iDESC_LIST_1_SP0B.Config = ENUM_DMA_CFG_XCNT_INT ;
iDESC_LIST_1_SP0B.XCount = COUNT;
iDESC_LIST_1_SP0B.XModify = 4;
iDESC_LIST_1_SP0B.YCount = 0;
iDESC_LIST_1_SP0B.YModify = 0;
iDESC_LIST_1_SP0B.pNxtDscp = &iDESC_LIST_2_SP0B;
iDESC_LIST_2_SP0B.pStartAddr = (int32_t *)A2B_out_Buffer2;
iDESC_LIST_2_SP0B.Config = ENUM_DMA_CFG_XCNT_INT ;
iDESC_LIST_2_SP0B.XCount = COUNT;
iDESC_LIST_2_SP0B.XModify = 4;
iDESC_LIST_2_SP0B.YCount = 0;
iDESC_LIST_2_SP0B.YModify = 0;
iDESC_LIST_2_SP0B.pNxtDscp = &iDESC_LIST_1_SP0B;
}
void Sport_Init()
{
int delay11=0xffff;
/* Open the SPORT Device 4A */
adi_sport_Open(SPORT_DEVICE_4A,ADI_HALF_SPORT_A,ADI_SPORT_DIR_RX, ADI_SPORT_MC_MODE, SPORTMemory0A,ADI_SPORT_MEMORY_SIZE,&hSPORTDev4ARx);
adi_sport_Open(SPORT_DEVICE_4A,ADI_HALF_SPORT_B,ADI_SPORT_DIR_TX, ADI_SPORT_MC_MODE, SPORTMemory0B,ADI_SPORT_MEMORY_SIZE,&hSPORTDev4BTx);
/* Configure the data,clock,frame sync and MCTL of SPORT Device 4A*/
adi_sport_ConfigData(hSPORTDev4ARx,ADI_SPORT_DTYPE_SIGN_FILL,31,false,false,false);
adi_sport_ConfigClock(hSPORTDev4ARx,4,true,false,false);
adi_sport_ConfigFrameSync(hSPORTDev4ARx,511,true,true,false,true,false,false);
adi_sport_ConfigMC(hSPORTDev4ARx,1u,15u,0u,true);
adi_sport_SelectChannel(hSPORTDev4ARx,0u,15u);
adi_sport_ConfigData(hSPORTDev4BTx,ADI_SPORT_DTYPE_SIGN_FILL,31,false,false,false);
adi_sport_ConfigClock(hSPORTDev4BTx,0,false,false,false);
adi_sport_ConfigFrameSync(hSPORTDev4BTx,511,true,false,false,true,false,false);
adi_sport_ConfigMC(hSPORTDev4BTx,1u,15u,0u,true);
adi_sport_SelectChannel(hSPORTDev4BTx,0u,15u);
/**************************************************Sport Global Group Array Handle***********************************************************/
/*Tx group*/
SportRxDai1Array[0]= hSPORTDev4ARx;
SportTxDai1Array[0]= hSPORTDev4BTx;
/* Prepare descriptors */
PrepareDescriptors();
/* Submit the first buffer for Rx. */
adi_sport_DMATransfer(hSPORTDev4ARx,&iDESC_LIST_1_SP0A,(DMA_NUM_DESC_SPORT),ADI_PDMA_DESCRIPTOR_LIST, ADI_SPORT_CHANNEL_PRIM);
/* Submit the first buffer for Rx. */
adi_sport_DMATransfer(hSPORTDev4BTx,&iDESC_LIST_1_SP0B,(DMA_NUM_DESC_SPORT),ADI_PDMA_DESCRIPTOR_LIST, ADI_SPORT_CHANNEL_PRIM);
adi_sport_CreateGlobalGroup(SportRxDai1Array,1u,&hDai1Group1Rx,false,true);
adi_sport_CreateGlobalGroup(SportTxDai1Array,1u,&hDai1Group0Tx,false,true);
/* Register Global callback for RX group*/
adi_sport_GlobalRegisterCallback(hDai1Group1Rx,SPORTCallback,0);
/* Global sport enable */
adi_sport_GlobalEnable(true);
/* wait for Codec to up */
delay11=0xffff;
while(delay11--)
{
asm("nop;");
}
}
void SRU_Init()
{
*pREG_PADS0_DAI0_IE = BITM_PADS_DAI0_IE_VALUE;
*pREG_PADS0_DAI1_IE = BITM_PADS_DAI1_IE_VALUE;
SRU2(SPT4_ACLK_O,DAI1_PB01_I); /*SPORT 4A to DAC clock*/
SRU2(HIGH,DAI1_PBEN01_I);
SRU2(DAI1_PB01_O,SPT4_BCLK_I); /*SPORT 4A to DAC clock*/
SRU2(SPT4_AFS_O,DAI1_PB02_I); /*DAC FS to SPORT 4A*/
SRU2(HIGH,DAI1_PBEN02_I);
SRU2(DAI1_PB02_O,SPT4_BFS_I); /*SPORT 4A to DAC clock*/
SRU2(DAI1_PB04_O,SPT4_AD1_I); /*ADC to SPORT 4B*/
SRU2(LOW,DAI1_PBEN04_I);
SRU2(DAI1_PB03_O,SPT4_AD0_I); /*ADC to SPORT 4B*/
SRU2(LOW,DAI1_PBEN03_I);
SRU2(SPT4_BD0_O,DAI1_PB05_I); /*ADC to SPORT 4B*/
SRU2(HIGH,DAI1_PBEN05_I);
SRU2(SPT4_BD1_O,DAI1_PB05_I); /*ADC to SPORT 4B*/
SRU2(HIGH,DAI1_PBEN06_I);
}}
Edit Notes
edit c code[编辑人: zyc115005 编辑时间: 24 Jul 2025 8:01 AM (GMT -4)]



