//#####################################################################
//文件: Example_281xMCBSP_FFDLB_int.c
//功能: 設(shè)置McBSP為內(nèi)部自循環(huán)模式,發(fā)送數(shù)據(jù),接收數(shù)據(jù),并比較發(fā)送與接收的數(shù)據(jù) //發(fā)送數(shù)據(jù)如下:
//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" //函數(shù)聲明
interrupt void mcbspTxFifoIsr(void); interrupt void mcbspRxFifoIsr(void); void mcbsp_init(void); void error(void); //全局變量
Uint16 sdata[8]; //發(fā)送數(shù)據(jù) Uint16 rdata[8]; //接收數(shù)據(jù) Uint16 rdata_point; //主程序 void main(void) {
Uint16 i;
//步驟1.初始化系統(tǒng)控制(PLL, 看門狗,使能外設(shè)時鐘)
InitSysCtrl(); //步驟2.初始化 GPIO //InitGpio(); //本例中略過 //只需配置McBSP功能GPIO
InitMcbspGpio(); //配置GPIO為McBSP引腳 //步驟3.清除所有中斷并初始化PIE向量表
//關(guān)CPU所有中斷 DINT;
//初始化PIE控制 InitPieCtrl();
//禁止CPU所有中斷并清除所有中斷標(biāo)志位 IER = 0x0000; IFR = 0x0000;
//初始化 PIE 中斷向量表 InitPieVectTable(); EALLOW;
PieVectTable.MRINTA= &mcbspRxFifoIsr; PieVectTable.MXINTA=&mcbspTxFifoIsr; EDIS;
//步驟4.初始化所有外設(shè)
//InitPeripherals(); //本例中不需要 mcbsp_init(); //只需初始化McBSP //步驟5. 用戶代碼段, 使能中斷 //初始化發(fā)送數(shù)據(jù)緩沖器 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. 空循環(huán) for(;;); }
void error(void) {
asm(" ESTOP0"); // 測試失敗! 停止! for (;;); }
//McBSP 初始化函數(shù) void mcbsp_init() {
//復(fù)位 McBSP
McbspaRegs.SPCR2.bit.FRST=0; //幀同步信號產(chǎn)生器復(fù)位
McbspaRegs.SPCR2.bit.GRST=0; //復(fù)位采樣率發(fā)生器
McbspaRegs.SPCR2.bit.XRST=0; //發(fā)送器復(fù)位 McbspaRegs.SPCR1.bit.RRST=0; //接收器復(fù)位 //初始化 McBSP 寄存器組
//McBSP register 配置為數(shù)字自循環(huán)模式
McbspaRegs.SPCR2.all=0x0000; //發(fā)送器禁止 McbspaRegs.SPCR1.all=0x8000; //接收器禁止 McbspaRegs.RCR2.all=0x0001;
//接收幀位單相位幀,每幀一個串行字,每個串行字位8位,無壓縮擴(kuò)展模式,1位數(shù)據(jù)延時
McbspaRegs.RCR1.all=0x0; //接收幀長度為每幀一個串行字,每個串行字位8位 McbspaRegs.XCR2.all=0x0001;
//發(fā)送幀位單相位幀,每幀一個串行字,每個串行字位8位,無壓縮擴(kuò)展模式,1位數(shù)據(jù)延時
McbspaRegs.XCR1.all=0x0; //發(fā)送幀長度為每幀一
個串行字,每個串行字位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(); //使能接收/發(fā)送單元
McbspaRegs.SPCR2.bit.XRST=1; McbspaRegs.SPCR1.bit.RRST=1; //幀同步信號產(chǎn)生器復(fù)位
McbspaRegs.SPCR2.bit.FRST=1; }
//McBSP發(fā)送中斷服務(wù)程序
interrupt void mcbspTxFifoIsr(void) {
Uint16 i;
for(i=0; i<8; i++) {
McbspaRegs.DXR1.all=sdata[i]; }
//下一個要發(fā)送的數(shù)據(jù) 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; //發(fā)送PIE應(yīng)答信號 }
//McBSP 接收中斷服務(wù)程序
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; //清除溢出標(biāo)志位
McbspaRegs.MFFRX.bit.RXFFINT_CLEAR=1; //清除中斷標(biāo)志位
PieCtrlRegs.PIEACK.all|=0x20; //發(fā)送PIE應(yīng)答信號 }
因篇幅問題不能全部顯示,請點(diǎn)此查看更多更全內(nèi)容
Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號-2
違法及侵權(quán)請聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市萬商天勤律師事務(wù)所王興未律師提供法律服務(wù)