资讯详情

TMS320F2812外设例程系列之SCI

//##################################################################### //文件: Example_281xSci_FFDLB_int.c //说明: 该程序是SCI中断发送、接收的典型程序, // 采用内部连接的自循环模式,即自发、自接 //##################################################################### //SCI-A 发送的数据流: //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.. //SCI-B 发送的数据流: //FF FE FD FC FB FA F9 F8 //FE FD FC FB FA F9 F8 F7 //FD FC FB FA F9 F8 F7 F6 //.... //01 00 FF FE FD FC FB FA //00 FF FE FD FC FB FA F9 //etc.. //检查变量: // SCI-A SCI-B // ---------------------- // sdataA sdataB //发送的数据 // rdataA rdataB //接收的数据 // rdata_pointA rdata_pointB //用来检查接收到的数据 //##################################################################### #include "D281x_.h" //F2812头文件 #include "DSP281x_Examples.h" #define _FREQ 150E6 #define LSPCLK_FREQ CPU_FREQ/4 #define SCI_FREQ 100E3 #define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1 //功能函数原型 interrupt void sciaTxFifoIsr(void); interrupt void sciaRxFifoIsr(void); interrupt void scibTxFifoIsr(void); interrupt void scibRxFifoIsr(void); void scia_fifo_init(void); void scib_fifo_init(void); void error(void); //全局变量 Uint16 sdataA[8]; //SCI-A发送的数据 Uint16 sdataB[8]; //SCI-B发送的数据 Uint16 rdataA[8]; //SCI-A接收的数据 Uint16 rdataB[8]; //SCI-B接收的数据 Uint16 rdata_pointA; //用于检查接收到的数据 Uint16 rdata_pointB; //主程序 void main(void) { Uint16 i; //步骤1.初始化系统控制 //PLL, 看门狗,使能外设时钟 InitSysCtrl(); //步骤2.初始化GPIO //InitGpio(); //在这里省略,只需配置以下与SCI有关的GPIO即可 EALLOW; //注意,需要EALLOE保护 GpioMuxRegs.GPFMUX.bit.SCITA_GPIOF4 = 1; GpioMuxRegs.GPFMUX.bit.SCXDA_GPIOF5 = 1; GpioMuxRegs.GPGMUX.bit.SCITX_GPIOG4 = 1; GpioMuxRegs.GPGMUX.bit.SCIRXDB_GPIOG5 = 1; EDIS; //与EALLOW对应使用 //步骤3.清除所有的中断并初始化PIE中断向量表 DI; //禁止CPU中断 InitPieCtrl(); //初始化PIE控制寄存器 IER = 0x0000; //禁止 CPU 中断,并清除所有的 CPU 中断标志 IFR = 0x0000; InitPieVectTable(); //初始化 PIE 中断向量表,将相应的中断向量指向中断服务程 //序,当中断发生时跳转到相应的中断服务程序处 EALLOW; //寄存器需要 EALLOE 保护 PieVectTable.RXAINT = &sciaRxFifoIsr; PieVectTable.TXAINT = &sciaTxFifoIsr; PieVectTable.RXBINT = &scibRxFifoIsr; PieVectTable.TXBINT = &scibTxFifoIsr; EDIS; //与 EALLOW 对应使用 //步骤4.初始化外设 //InitPeripherals(); //在本程序中可以省略 scia_fifo_init(); //初始化SCI-A scib_fifo_init(); //初始化SCI-B //步骤5.用户程序段,使能中断 //初始化要发送的数据 for(i = 0; i<8; i++) { sdataA[i] = i; } for(i = 0; i<8; i++) { sdataB[i] = 0xFF - i; } rdata_pointA = sdataA[0]; rdata_pointB = sdataB[0]; //使能所需的中断 PieCtrlRegs.PIECRTL.bit.ENPIE = 1; //使能 PIE 模块 PieCtrlRegs.PIEIER9.bit.INTx1=1; //PIE Group 9, INT1 PieCtrlRegs.PIEIER9.bit.INTx2=1; //PIE Group 9, INT2 PieCtrlRegs.PIEIER9.bit.INTx3=1; //PIE Group 9, INT3 PieCtrlRegs.PIEIER9.bit.INTx4=1; //PIE Group 9, INT4 IER = 0x100; //使能 CPU 中断 EINT; //步骤6.空循环 for(;;); } void error(void) { asm(" EOP0"); //Test failed!! Stop! for (;;); } //SCIA 发送中断服务程序 interrupt void sciaTxFifoIsr(void) { Uint16 i;<
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台