Thread 中讨论的其他器件:SysConfig
工具/软件:TI-RTOS
您好!
我正在配置 McASP2 AXR0、以通过外部 帧同步帧(8kHz)和时钟(4.096MHz)传输插槽尺寸为16位(LSB 优先)的32通道 TDM。
我只启用了帧起始中断、因此希望产生@8kHz 的中断、但我得到的速率为@4kHz 的一半。
下面是 McASP2配置代码片段:
// MCASP 引脚配置
mcasp2Ptr->pfunc = 0x0000FFFC; // CLK、AXR0和 AXR1 McASP 引脚
mcasp2Ptr->Pdir = 0x00000001; // AXR0作为输出,REST 为输入
//将 CH0串行器配置为 TX
mcasp2SerControlReg ->ch0 = 0x0000000D;
//将 CH1串行器配置为 RX,以供将来使用
mcasp2SerControlReg ->CH1 = 0x0000000E;
// RX REST
mcaspGblCtl->mcaspGblControlBits.rclkrst = 0;
mcaspGblCtl->mcaspGblControlBits.rfrst = 0;
mcaspGblCtl->mcaspGblControlBits.rhclkrst=0;
mcaspGblCtl->mcaspGblControlBits.rsmrst = 0;
mcaspGblCtl->mcaspGblControlBits.rsrclr = 0;
// TX 复位
mcaspGblCtl->mcaspGblControlBits.xclkrst = 0;
mcaspGblCtl->mcaspGblControlBits.xfrst = 0;
mcaspGblCtl->mcaspGblControlBits.xhclkrst = 0;
mcaspGblCtl->mcaspGblControlBits.xsmrst = 0;
mcaspGblCtl->mcaspGblControlBits.xsrclr = 0;
//轮询直到复位结束
while (((mcasp2Ptr -> gblctl & GBLCTRL_bits_all)!= 0x00000000);
//空闲模式
mcasp2Ptr ->SysConfig = 0x01;
mcasp2Ptr ->txmask = 0x0000FFFF;
mcasp2Ptr ->txfmt = 0x00000078;
mcasp2Ptr ->txtdm = 0xFFFFFFFF;
mcasp2Ptr ->xevtctl = 0x00000001;
mcasp2Ptr ->txfmctl = 0x00001000;
mcasp2Ptr ->txclkchk = 0x00F02000;
mcasp2Ptr ->aclkxctl = 0x00000000;
mcasp2Ptr ->ahclkxctl = 0x00008000;
//打开 CLK 和帧同步
mcaspGblCtl->mcaspGblControlBits.xclkrst = 1;
mcaspGblCtl->mcaspGblControlBits.xhclkrst = 1;
//等待位未置位
while (!mcaspGblCtl->mcaspGblControlBits.xhclkrst ||!mcaspGblCtl->mcaspGblControlBits.xclkrst);
//因为预计会出现第一个时钟误差
while (mcaspTxState->mcaspStateBits.clkfail)
{
mcaspTxState->mcaspStateBits.clkFAIL = 1;
AppDelay (10);
}
//清除暂挂中断
mcasp2Ptr ->txstat = 0xFF;
//启用中断
mcasp2Ptr ->evtctlx = 0x00000080;
//释放 TX 状态机
mcaspGblCtl->mcaspGblControlBits.xsmrst = 1;