<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

        TMS320F2812外設例程系列之McBsp

        作者:佚名   來源:不詳   點擊數:  更新時間:2014年08月16日   【字體:

         

         
        //#####################################################################
        //文件:  Example_281xMCBSP_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_Device.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向量表
          //關CPU所有中斷
            DINT;
          //初始化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("     ESTOP0"); // 測試失敗! 停止!
            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應答信號
        }
         
        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮