This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于28335中aic23模块使用的问题

Other Parts Discussed in Thread: TMS320F28335

本人刚开始学习TMS320F28335开发板,使用音频模块的时候有如下两个问题,还请前辈们解答:

1、使用lab7例程时,为什么停止仿真之后为什么语音录放不暂停?

2、当我把中断函数里的代码屏蔽之后还可以正常录放音,难道录放音的实现与中断没有关系?

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File



Uint16	volume,tAicRegs;
int ADbuf[500];
int DA_wptr,DA_rptr,y;
Uint16 play_mode=1;

void main(void)
{
	Uint16	temp,i;

// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP2833x_SysCtrl.c file.
   	InitSysCtrl();

// Step 2. Initalize GPIO:
// This example function is found in the DSP2833x_Gpio.c file and
// illustrates how to set the GPIO to it's default state.
// InitGpio();  // Skipped for this example
// For this example, only enable the GPIO for McBSP-A
	InitXintf16Gpio();
   	InitMcbspaGpio();

	EALLOW;
     GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0; //aic_dat	 0为数字IO模式,1为外设IO模式
	 GpioCtrlRegs.GPADIR.bit.GPIO12 = 1;  //0为输入方向,1为输出方向
	 GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;  //使能内部上拉电阻
     GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0; //aic_CS
	 GpioCtrlRegs.GPADIR.bit.GPIO13 = 1;
	 GpioCtrlRegs.GPAPUD.bit.GPIO13 = 0;
	 GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 0; //aic_clk	 
	 GpioCtrlRegs.GPBDIR.bit.GPIO61 = 1; 
	 GpioCtrlRegs.GPBPUD.bit.GPIO61 = 0;
	 EDIS; 

// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
   	DINT;

// Initialize PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
// This function is found in the DSP2833x_PieCtrl.c file.
   	InitPieCtrl();	//IER\IFR寄存器清零

// Disable CPU interrupts and clear all CPU interrupt flags:
   	IER = 0x0000;
   	IFR = 0x0000;

// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
// This will populate the entire table, even if the interrupt
// is not used in this example.  This is useful for debug purposes.
// The shell ISR routines are found in DSP2833x_DefaultIsr.c.
// This function is found in DSP2833x_PieVect.c.
   	InitPieVectTable();	//**初始化向量表(为PIE向量表中的所有中断向量配置对应向量的入口地址)

// Step 4. Initialize all the Device Peripherals:
// This function is found in DSP2833x_InitPeripherals.c
// InitPeripherals();     // Not required for this example
   	InitMcbspa();          // Initalize the Mcbsp-A in loopback test mode

//	tAicRegs = 0xFF;
//	SysReg = tAicRegs;

	InitAic23();		//aic23配置(单步调试声音变大)
	delay(500);
    volume=90;
  WriteAic23(L_HEADPHONE_VOLUME,0x0180+volume);//改变音量
	
	EALLOW;	// This is needed to write to EALLOW protected registers
	PieVectTable.MRINTA = &ISRMcbspSend;	//把函数的地址赋值给中断向量MRINTA的向量地址中
	EDIS;   // This is needed to disable write to EALLOW protected registers

    PieCtrlRegs.PIECTRL.bit.ENPIE = 1;   // Enable the PIE block
    PieCtrlRegs.PIEIER6.bit.INTx5=1;     // Enable PIE Group 6, INT 5
    IER |= M_INT6;                            // Enable CPU INT6

	EINT;   // Enable Global interrupt INTM


	while(1)
	{
    	for(temp=30000;temp>0;temp-=100)
		{
      		for(i=0;i<2;i++)
      		{
         		y=5000;
         		delay(temp);	//播放警报
         	  //  McbspaRegs.DXR1.all = y;
         		y=-5000;
         		delay(temp);	//播放警报
         	  //  McbspaRegs.DXR1.all = y;
      		}
		}
	}

}
interrupt void  ISRMcbspSend(void)
{
//      int temp;
//
//	  PieCtrlRegs.PIEACK.all = PIEACK_GROUP6;
//      temp=McbspaRegs.DRR1.all;
//
//      DA_rptr++;
//      if(DA_rptr>=500)
//            DA_rptr=0;
//
//      ADbuf[DA_rptr]=temp;   //保存录音数据
//
//      if(play_mode==0)
//        McbspaRegs.DXR1.all = y;
//                   //警报声的幅值
//      else
//        McbspaRegs.DXR1.all = temp;        //放音

}