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

TMS320F2812外设例程系列之SPI

时间:2024-04-18 13:37:06

//##################################################################### //文件:Example_281xSpi_FFDLB_int.c //发送的数据流如下: //0000 0001 0002 0003 0004 0005 0006 0007 //0001 0002 0003 0004 0005 0006 0007 0008 //0002 0003 0004 0005 0006 0007 0008 0009 //.... //FFFE FFFF 0000 0001 0002 0003 0004 0005 //FFFF 0000 0001 0002 0003 0004 0005 0006 //etc.. //观测变量: // sdata[8]:要发送的数据 // rdata[8]:接收的数据 // rdata_point //##################################################################### #include "D 281x_ .h" //头文件 #include "DSP281x_Examples.h" //功能函数原型 //interrupt void ISRTimer2(void); interrupt void spiTxFifoIsr(void); interrupt void spiRxFifoIsr(void); void delay_loop(void); void spi_fifo_init(void); void error(); //全局变量 Uint16 sdata[8]; //发送数据 Uint16 rdata[8]; //接收数据缓冲器 Uint16 rdata_point; //跟踪在数据流里检测接收到的数据 //主程序 void main(void) { Uint16 i; //Step 1. 初始化系统控制(PLL、看门狗、使能外设时钟) InitSysCtrl(); //Step 2. 初始化GPIO //InitGpio(); //本例中略过 //在本程序中只需设置下列 GPIO 口为特殊功能口(SPI 口) EALLOW; GpioMuxRegs.GPFMUX.all=0x000F; //配置 GPIOs 为 SPI 引脚 //Port F MUX - x000 0000 0000 1111 EDIS; //Step 3. 清除所有中断、初始化 PIE 中断向量表并禁止 中断 DI ; IER = 0x0000; IFR = 0x0000; //初始化 PIE 控制寄存器到默认状态 InitPieCtrl(); //初始化 PIE 向量表使它们指向一些空的中断服务子程序 InitPieVectTable(); //映射中断向量 EALLOW; PieVectTable.SP XINTA = &spiRxFifoIsr; PieVectTable.SPITXINTA = &spiTxFifoIsr; //Step 4. 初始化所有的外设 //InitPeripherals(); //本例中省略 spi_fifo_init(); //初始化SCI //Step 5. 用户程序段,使能中断 //初始化发送数据缓冲器 for(i=0; i<8; i++) { sdata[i] = i; } rdata_point = 0; //使能所需的中断 PieCtrlRegs.PIECRTL.bit.ENPIE = 1; //使能 PIE 模块 PieCtrlRegs.PIEIER6.bit.INTx1=1; //使能 PIE Group 6, INT 1 PieCtrlRegs.PIEIER6.bit.INTx2=1; //使能 PIE Group 6, INT 2 IER=0x20; //使能 CPU INT6 EINT; //使能全局中断 //Step 6. 空循环 for(;;); } //用户定义程序段 void delay_loop() { long i; for (i = 0; i < 1000000; i++) {} } void error(void) { asm(" E OP0"); //出现错误,测试失败,停止! for (;;); } //SPI FIFO 初始化程序 void spi_fifo_init() { //初始化 SPI FIFO 寄存器组 SpiaRegs.SPICCR.bit.SPISWRESET=0; //复位SPI SpiaRegs.SPICCR.all=0x001F; //16位数据位,自主循环模式 SpiaRegs.SP L.all=0x0017; //使能中断,使能主从模式 SpiaRegs.SPISTS.all=0x0000; SpiaRegs.SPIBRR=0x0063; //波特率 SpiaRegs.SPIFFTX.all=0xC028; //使能FIFO, 设置TX FIFO level为8 SpiaRegs.SPIFFRX.all=0x0028; //设置RX FIFO level为8 SpiaRegs.SPIFFCT.all=0x00; SpiaRegs.SPIPRI.all=0x0010; SpiaRegs.SPICCR.bit.SPISWRESET=1; //使能SPI SpiaRegs.SPIFFTX.bit.TXFIFO=1; SpiaRegs.SPIFFRX.bit.RXFIFORESET=1; } //SPI发送中断服务程序 interrupt void spiTxFifoIsr(void) { Uint16 i; for(i=0;i<8;i++) { SpiaRegs.SPITXBUF=sdata[i]; //发送数据 } for(i=0;i<8;i++) //每一次循环数据都加1 { sdata[i]++; } SpiaRegs.SPIFFTX.bit.TXFFINTCLR=1; //清除中断标志位 PieCtrlRegs.PIEACK.all|=0x20; } //SPI 接收中断服务程序 interrupt void spiRxFifoIsr(void) { Uint16 i; for(i=0;i<8;i++) { rdata[i]=SpiaRegs.SPIRXBUF; //读数据 } for(i=0;i<8;i++) //检测接收到的数据 { if(rdata[i] != rdata_point+i) error(); } rdata_point++; SpiaRegs.SPIFFRX.bit.RXFFOVFCLR=1; //清除溢出标志位 SpiaRegs.SPIFFRX.bit.RXFFINTCLR=1; //清除中断标志位 PieCtrlRegs.PIEACK.all|=0x20; }
-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章