锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

TMS320F2812外设例程系列之McBsp

时间:2024-04-18 11:37:09

//##################################################################### //文件: Example_281xMCB _FFDLB_int.c //功能: 设置McBSP为内部自循环模式,发送数据,接收数据,并比较发送与接收的数据 //发送数据如下: //00 01 02 03 04 05 06 07 //01 02 03 04 05 06 07 08 //02 03 04 05 06 07 08 09 //.... //FE FF 00 01 02 03 04 05 //FF 00 01 02 03 04 05 06 //etc.. //观测变量: // sdata // rdata // rdata_point //##################################################################### #include "DSP281x_ .h" //头文件 #include "DSP281x_Examples.h" //函数声明 interrupt void mcbspTxFifoIsr(void); interrupt void mcbspRxFifoIsr(void); void mcbsp_init(void); void error(void); //全局变量 Uint16 sdata[8]; //发送数据 Uint16 rdata[8]; //接收数据 Uint16 rdata_point; //主程序 void main(void) { Uint16 i; //步骤1.初始化系统控制(PLL, 看门狗,使能外设时钟) InitSysCtrl(); //步骤2.初始化 GPIO //InitGpio(); //本例中略过 //只需配置McBSP功能GPIO InitMcbspGpio(); //配置GPIO为McBSP引脚 //步骤3.清除所有中断并初始化PIE向量表 //关 所有中断 DI ; //初始化PIE控制 InitPieCtrl(); //禁止CPU所有中断并清除所有中断标志位 IER = 0x0000; IFR = 0x0000; //初始化 PIE 中断向量表 InitPieVectTable(); EALLOW; PieVectTable.MRINTA= &mcbspRxFifoIsr; PieVectTable.MXINTA=&mcbspTxFifoIsr; EDIS; //步骤4.初始化所有外设 //InitPeripherals(); //本例中不需要 mcbsp_init(); //只需初始化McBSP //步骤5. 用户代码段, 使能中断 //初始化发送数据 for(i=0; i<8; i++) { sdata[i]=i; } rdata_point = 0; //使能本例所需中断 PieCtrlRegs.PIECRTL.bit.ENPIE = 1; //使能 PIE 模块 PieCtrlRegs.PIEIER6.bit.INTx5=1; //使能 PIE Group 6, INT 5 PieCtrlRegs.PIEIER6.bit.INTx6=1; //使能 PIE Group 6, INT 6 IER=0x20; //使能 CPU INT6 EINT; //使能全局中断 //步骤6. 空循环 for(;;); } void error(void) { asm(" E OP0"); // 测试失败! 停止! for (;;); } //McBSP 初始化函数 void mcbsp_init() { //复位 McBSP McbspaRegs.SPCR2.bit.FRST=0; //帧同步信号产生器复位 McbspaRegs.SPCR2.bit.GRST=0; //复位采样率发生器 McbspaRegs.SPCR2.bit.XRST=0; //发送器复位 McbspaRegs.SPCR1.bit.RRST=0; //接收器复位 //初始化 McBSP 寄存器组 //McBSP register 配置为数字自循环模式 McbspaRegs.SPCR2.all=0x0000; //发送器禁止 McbspaRegs.SPCR1.all=0x8000; //接收器禁止 McbspaRegs.RCR2.all=0x0001; //接收帧位单相位帧,每帧一个串行字,每个串行字位8位,无压缩扩展模式,1位数据延时 McbspaRegs.RCR1.all=0x0; //接收帧长度为每帧一个串行字,每个串行字位8位 McbspaRegs.XCR2.all=0x0001; //发送帧位单相位帧,每帧一个串行字,每个串行字位8位,无压缩扩展模式,1位数据延时 McbspaRegs.XCR1.all=0x0; //发送帧长度为每帧一个串行字,每个串行字位8位 McbspaRegs.SRGR2.all=0x3140; McbspaRegs.SRGR1.all=0x010f; //配置采样率生成器 McbspaRegs.MCR2.all=0x0; McbspaRegs.MCR1.all=0x0; McbspaRegs.PCR.all=0x00a00; McbspaRegs.MFFTX.all=0x4028; McbspaRegs.MFFRX.all=0x0028; McbspaRegs.MFFCT.all=0x0000; McbspaRegs.MFFINT.all=0x0000; McbspaRegs.MFFST.all=0x000; //使能 FIFO McbspaRegs.MFFTX.bit.TXFIFO_RESET=1; McbspaRegs.MFFRX.bit.RXFIFO_RESET=1; //使能采样率生成器 McbspaRegs.SPCR2.bit.GRST=1; delay_loop(); //使能接收/发送单元 McbspaRegs.SPCR2.bit.XRST=1; McbspaRegs.SPCR1.bit.RRST=1; //帧同步信号产生器复位 McbspaRegs.SPCR2.bit.FRST=1; } //McBSP发送中断服务程序 interrupt void mcbspTxFifoIsr(void) { Uint16 i; for(i=0; i<8; i++) { McbspaRegs.DXR1.all=sdata[i]; } //下一个要发送的数据 for(i=0; i<8; i++) { sdata[i] = sdata[i]+1; sdata[i] = sdata[i] & 0x00FF; } McbspaRegs.MFFTX.bit.TXFFINT_CLEAR=1; PieCtrlRegs.PIEACK.all|=0x20; //发送PIE应答信号 } //McBSP 接收中断服务程序 interrupt void mcbspRxFifoIsr(void) { Uint16 i; for(i=0; i<8; i++) { rdata[i]=McbspaRegs.DRR1.all; } for(i=0; i<8; i++) { if (rdata[i] != ( (rdata_point+i) & 0x00FF) ) error(); } rdata_point = (rdata_point+1) & 0x00FF; McbspaRegs.MFFRX.bit.RXFFOVF_CLEAR=1; //清除溢出标志位 McbspaRegs.MFFRX.bit.RXFFINT_CLEAR=1; //清除中断标志位 PieCtrlRegs.PIEACK.all|=0x20; //发送PIE应答信号 }
-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章