DSP_TMS32F2812的串口操作

来源:互联网 发布:cydia更新后网络错误 编辑:程序博客网 时间:2024/05/17 07:34


void scia_fifo_init(int ibaud){   SciaRegs.SCICCR.all =0x0007;    // 1 stop bit,  No loopback                                   // No parity,8 char bits,                                   // async mode, idle-line protocol   SciaRegs.SCICTL1.all =0x0003;   // enable TX, RX, internal SCICLK,                                   // Disable RX ERR, SLEEP, TXWAKE   SciaRegs.SCICTL2.bit.TXINTENA =1;   SciaRegs.SCICTL2.bit.RXBKINTENA =1;   if(ibaud==9600)    {     SciaRegs.SCIHBAUD    =0x0001;//9600     SciaRegs.SCILBAUD    =0x00e7;   }      if(ibaud==19200)   {      SciaRegs.SCIHBAUD    =0x0000;      SciaRegs.SCILBAUD    =0x00f3;   }      if(ibaud==38400)   {      SciaRegs.SCIHBAUD    =0x0000;      SciaRegs.SCILBAUD    =0x0079;   }   SciaRegs.SCICCR.bit.LOOPBKENA =0; // Enable loop back   SciaRegs.SCIFFTX.all=0xC028;   SciaRegs.SCIFFRX.all=0x0021;//   SciaRegs.SCIFFCT.all=0x00;   SciaRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset   SciaRegs.SCIFFTX.bit.TXFIFOXRESET=1;   SciaRegs.SCIFFRX.bit.RXFIFORESET=1;}unsigned char r232data[3]={0,0,0};int int232cnt=0;void scia_xmit(int a){       while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}    SciaRegs.SCITXBUF=a;}interrupt void sciaRxFifoIsr(void){   unsigned short ReceivedChar=SciaRegs.SCIRXBUF.all; // Read data   //r232data[int232cnt%3]=ReceivedChar;int232cnt++;    if((r232data[0]==0X42)&&(r232data[1]==0X42)&&(int232cnt%3==0)){        //lslData = *(unsigned short*)(0x80000+0xb);//bit0 输出1的值,bit1 输出2的值    EALLOW;GpioMuxRegs.GPEMUX.bit.XNMI_XINT13_GPIOE2 = 0;  //   IO 输入 拉低GpioMuxRegs.GPEDIR.bit.GPIOE2 = 1;    //B6输出GpioDataRegs.GPEDAT.bit.GPIOE2 = (r232data[2]&0x2)>>1;  //GpioMuxRegs.GPBQUAL.all=0x0000;// Input qualifier disabledEDIS;//EALLOW;GpioMuxRegs.GPBMUX.bit.T3PWM_GPIOB6=0;  //   IO 输入 拉低GpioMuxRegs.GPBDIR.bit.GPIOB6=1;    //E2输出GpioDataRegs.GPBDAT.bit.GPIOB6 = r232data[2]&0x1;  //GpioMuxRegs.GPBQUAL.all=0x0000;// Input qualifier disabledEDIS;scia_xmit(0x41);scia_xmit(0x41);}    SciaRegs.SCIFFRX.bit.RXFFOVRCLR=1;  // Clear Overflow flagSciaRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flagPieCtrlRegs.PIEACK.all|=0x100;  // Issue PIE ack}void main(void){int ch=0;InitSysCtrl();//设置外部时钟和系统时钟    /////////for sci-b////////////////////       EALLOW;   GpioMuxRegs.GPFMUX.all=0x0030;// Select GPIOs to be Scia pins                                    // Port F MUX - x000 0000 0011 0000 //  GpioMuxRegs.GPGMUX.all=0x0030;// Select GPIOs to be Scib pins                                    // Port G MUX - x000 0000 0011 0000   EDIS;    ///////////////////////////////////DINT;InitGpio();  // 2812原配,未改动InitPieCtrl();// Disable CPU interrupts and clear all CPU interrupt flags:IER = 0x0000;IFR = 0x0000;InitPieVectTable();    EALLOW;  // This is needed to write to EALLOW protected registers  //  PieVectTable.TINT0 = &cpu_timer0_isr;    PieVectTable.RXAINT = &sciaRxFifoIsr;    EDIS; scia_fifo_init(9600); ///*PieCtrlRegs.PIECRTL.bit.ENPIE = 1;   // Enable the PIE blockPieCtrlRegs.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;// Enable CPU INT   EINT;   ERTM;   //*/// 将中断处理函数和InitFlash函数拷贝到RAM中运行,FLASH中运行时MemCopy和InitFlash必须有效MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);InitFlash();   // 对外部器件初始化必需放在InitFlash后// 初始化timer0//InitCpuTimers();    //  ConfigCpuTimer(&CpuTimer0, 150, 0xffffffff);   // 初始化while (1){         ;}} 


0 0
原创粉丝点击