zoukankan      html  css  js  c++  java
  • 28335scififo中断接收与发送

    #include "DSP28x_Project.h"// Device Headerfile and Examples Include File

    interrupt void scibTxFifoIsr(void);//fifo发送中断函数

    interrupt void scibRxFifoIsr(void);//fifo接收中断函数

    void scib_fifo_init(void);//scib fifo模式 初始化函数

    char buffer [100];//数据缓冲数组

    void main(void)

    {

       Uint16 i;

       InitSysCtrl();//系统时钟等初始化   

    InitSciGpio();//sci端口初始化   

    DINT; //关掉中断   

    InitPieCtrl(); //pie模块初始化   

    IER = 0x0000;//关cpu中断   

    IFR = 0x0000;//清cpu中断标志   

    InitPieVectTable();//初始化中断向量表,  经试验   此句注释掉也可以 ,因为下边对中断向量表进行了重新赋值   

    EALLOW; // This is needed to write to EALLOW protected registers   

    PieVectTable.SCIRXINTC = &scibRxFifoIsr; //中断向量表重新赋值(自定义中断函数的入口地址)

       PieVectTable.SCITXINTC = &scibTxFifoIsr; //中断向量表重新赋值  

      EDIS;   // This is needed to disable write to EALLOW protected registers  

      scib_fifo_init();  // 初始化 SCI-B寄存器配置   

    for(i = 0; i<100; i++) //缓存初始化   

    {      

    buffer[i] = 0;   

    }    // Enable interrupts required for this. example 中断使能

       PieCtrlRegs.PIECTRL.bit.ENPIE = 1;   // Enable the PIE block  

      PieCtrlRegs.PIEIER8.bit.INTx6=1;     // PIE Group 9, INT3   SCIRXINTB SCIB   

    PieCtrlRegs.PIEIER8.bit.INTx5=1;     // PIE Group 9, INT4   SCITXINTB SCIB   

    IER |= M_INT8;   // Enable CPU INT  

      EINT;//开总中断 INTM    // Step 6. IDLE loop. Just sit and loop forever (optional):  

      for(;;);

    }

    interrupt void scibTxFifoIsr(void) //fifo发送中断服务子程序

    {   

      Uint16 i;    

    for(i=0;i<8; i++)    

    {       

    ScicRegs.SCITXBUF=buffer[i];     // Send data 将缓存中的数据发出    

    }     //ScibRegs.SCIFFTX.bit.TXFFINTCLR=1; //如果在发送中断里清发送中断标志,则会一直不停地发送   

      PieCtrlRegs.PIEACK.all|=PIEACK_GROUP8;;      // Issue PIE ACK

    }

    interrupt void scibRxFifoIsr(void)//fifo接收中断服务子程序

    {    

    Uint16 i;    

    for(i=0; i<8; i++)    

    {      

      buffer[i]=ScicRegs.SCIRXBUF.all; // 将fifo中的数据读到缓存    

    }    

    ScicRegs.SCIFFTX.bit.TXFFINTCLR=1;  // 很重要 若不清fifo发送中断标志则,不进入发送中断   

      ScicRegs.SCIFFRX.bit.RXFFINTCLR=1; // 清接收中断标志    

    PieCtrlRegs.PIEACK.all|=PIEACK_GROUP8;    // Issue PIE ack

    }

    void scib_fifo_init()

    {    ScicRegs.SCICCR.all =0x0007;    // 1 stop bit,  No loopback

                                       // No parity,8 char bits,

                                       // async mode, idle-line protoco  

      ScicRegs.SCICTL1.all =0x0003;   // enable TX, RX, internal SCICLK,

                                       // Disable RX ERR, SLEEP, TXWAKE

       ScicRegs.SCIHBAUD    =0x0001;  

      ScicRegs.SCILBAUD    =0x00e7;  //波特率9600  

      ScicRegs.SCIFFTX.bit.SCIFFENA = 1;//使能sci fifo功能   

    ScicRegs.SCIFFTX.bit.TXFFIENA = 1;//fifo 发送中断使能   

    ScicRegs.SCIFFTX.bit.TXFFIL = 0; //发送中断级别,此时为上电默认值0   

    ScicRegs.SCIFFRX.bit.RXFFOVRCLR = 1;//清接收fifo溢出标志   

    ScicRegs.SCIFFRX.bit.RXFFINTCLR = 1;//清除接收fifo中断标志位   

    ScicRegs.SCIFFRX.bit.RXFFIENA = 1;//使能fifo 接收中断   

    ScicRegs.SCIFFRX.bit.RXFFIL = 8; //fifo接收中断级别为8   

    ScicRegs.SCIFFCT.all=0x00; //为默认值 效果为  禁用自动波特率调整  fifo传送延时为0   

    ScicRegs.SCIFFTX.bit.TXFIFOXRESET=1;//重新使能发送fifo操作   

    ScicRegs.SCIFFRX.bit.RXFIFORESET=1;//重新使能接收fifo操作   

    ScicRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset  重启sci

    }

  • 相关阅读:
    java中取两位小数 但不要四舍五入
    从字符串中提取数字 java正则表达式
    SQL实现 列转行(MySQL中)
    sql如何根据时间取出最新的数据记录
    动画 很精辟的
    week 与 strong区别 精辟的解释
    The executable was signed with invalid entitlements新设备run出现这个问题
    在iOS中创建静态库
    网址
    nginx单机1w并发设置
  • 原文地址:https://www.cnblogs.com/luxiaolai/p/5173927.html
Copyright © 2011-2022 走看看