[DSP编程] 关于28335中aic23模块使用的问题

[复制链接]
267|1
 楼主 | 2018-9-29 22:02 | 显示全部楼层 |阅读模式
本人刚开始学习TMS320F28335开发板,使用音频模块的时候有如下两个问题,还请前辈们解答:

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

2、当我把中断函数里的代码屏蔽之后还可以正常录放音,难道录放音的实现与中断没有关系?
  1. #include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
  2. #include "DSP2833x_Examples.h"   // DSP2833x Examples Include File



  3. Uint16  volume,tAicRegs;
  4. int ADbuf[500];
  5. int DA_wptr,DA_rptr,y;
  6. Uint16 play_mode=1;

  7. void main(void)
  8. {
  9.     Uint16  temp,i;

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

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

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

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

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

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

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

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

  54. //  tAicRegs = 0xFF;
  55. //  SysReg = tAicRegs;

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

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

  67.     EINT;   // Enable Global interrupt INTM


  68.     while(1)
  69.     {
  70.         for(temp=30000;temp>0;temp-=100)
  71.         {
  72.             for(i=0;i<2;i++)
  73.             {
  74.                 y=5000;
  75.                 delay(temp);    //播放警报
  76.               //  McbspaRegs.DXR1.all = y;
  77.                 y=-5000;
  78.                 delay(temp);    //播放警报
  79.               //  McbspaRegs.DXR1.all = y;
  80.             }
  81.         }
  82.     }

  83. }
  84. interrupt void  ISRMcbspSend(void)
  85. {
  86. //      int temp;
  87. //
  88. //    PieCtrlRegs.PIEACK.all = PIEACK_GROUP6;
  89. //      temp=McbspaRegs.DRR1.all;
  90. //
  91. //      DA_rptr++;
  92. //      if(DA_rptr>=500)
  93. //            DA_rptr=0;
  94. //
  95. //      ADbuf[DA_rptr]=temp;   //保存录音数据
  96. //
  97. //      if(play_mode==0)
  98. //        McbspaRegs.DXR1.all = y;
  99. //                   //警报声的幅值
  100. //      else
  101. //        McbspaRegs.DXR1.all = temp;        //放音

  102. }
复制代码
 楼主 | 2018-10-5 09:42 | 显示全部楼层
搞清楚了,是aic23的bypass设置问题
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

关闭

热门推荐上一条 /8 下一条

快速回复 返回顶部 返回列表